15,471
社区成员
发帖
与我相关
我的任务
分享
void RunModule(LPVOID lpParam)
{
SHELLEXECUTEINFO* pseinfo = (SHELLEXECUTEINFO*)lpParam;
if (NULL == pseinfo)
return ;
HWND hWnd =::FindWindow(NULL, pseinfo->lpParameters);
if (NULL == hWnd)
::ShellExecuteEx(pseinfo);
if (pseinfo->hProcess)
::WaitForSingleObject(pseinfo->hProcess, INFINITE);
...
}
void CInfoManager::RunTKBModule(LPCTSTR lpszFilePath, LPCTSTR lpszWnidowTitle, HWND *phWnd)
{
ASSERT(lpszFilePath != NULL);
ASSERT(AfxIsValidString(lpszFilePath));
ASSERT(lpszWnidowTitle != NULL);
ASSERT(AfxIsValidString(lpszWnidowTitle));
HWND hWnd = ::FindWindow(NULL, lpszWnidowTitle);
SHELLEXECUTEINFO seinfo;
seinfo.hwnd = NULL;
seinfo.fMask = SEE_MASK_NOCLOSEPROCESS;
seinfo.lpVerb = _T("Open");
seinfo.lpFile = lpszFilePath;
seinfo.nShow = SW_SHOW;
seinfo.lpParameters = lpszWnidowTitle;
seinfo.cbSize = sizeof(seinfo);
_beginthread(RunModule, 0, (LPVOID)&seinfo);
Sleep(1000);
while (NULL == hWnd && phWnd)
{//这里死循环
Sleep(0);
hWnd = ::FindWindow(NULL, lpszWnidowTitle);
}
if (phWnd)
*phWnd = hWnd;
}