读书人

怎么依据CreateProcess产生的进程ID得

发布时间: 2012-02-16 21:30:36 作者: rapoo

如何依据CreateProcess产生的进程ID得到主窗体的句柄?
如题

[解决办法]
struct EnumParam
{
HWND hMainWnd;
DWORD dwProcessID;
};

BOOL CALLBACK EnumWinProc(HWND hwnd, LPARAM lParam)
{
DWORD dwID;

EnumParam* pep = (EnumParam*)lParam;
GetWindowThreadProcessId(hwnd, &dwID);
if (dwID == pep-> dwProcessID) {
pep-> hMainWnd = hwnd; return 0;
}
return TRUE;
}


void __fastcall TForm1::Button3Click(TObject *Sender)
{
EnumParam ep;
STARTUPINFO si;
PROCESS_INFORMATION pi;

ep.hMainWnd = NULL;
memset(&si, 0, sizeof(si));
si.cb = sizeof(STARTUPINFO);
if (CreateProcess(NULL, "notepad.exe c:\\1.txt ",
NULL,NULL,FALSE,0,NULL,NULL,&si,&pi))
{
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);

ep.dwProcessID = pi.dwProcessId;
EnumWindows((WNDENUMPROC)EnumWinProc,
(long)&ep);
}
//此时的 ep.hMainWnd 就是你要的NodePad.exe窗口的句柄
}
[解决办法]
msdn.microsoft.com/msdnmag/issues/02/07/CQA/
[解决办法]
hongqi162,请您赐教,我A调用应用程序B,用的是SHELLEXECUTE,想控制B程序的一些控件。如何可以获取B的主窗体的句柄呢?
恳请赐教。

读书人网 >.NET

热点推荐