typedef struct tagWndInfo
{
DWORD dwProcessId;
HWND hWnd;
}WNDINFO, *LPWNDINFO;
BOOL CALLBACK EnumProcess(HWND hWnd, LPARAM lParam)
{
DWORD dwProcessID;
GetWindowThreadProcessId(hWnd, &dwProcessID);
LPWNDINFO pInfo = (LPWNDINFO)lParam;
if (dwProcessID == pInfo->dwProcessId)
{
pInfo->hWnd = hWnd;
return FALSE;
}
return TRUE;
}
HWND GetProcessMainWnd(DWORD dwProcessId)
{
WNDINFO wi;
wi.dwProcessId = dwProcessId;
wi.hWnd = NULL;
::EnumWindows(EnumProcess, (LPARAM)&wi);
return wi.hWnd;
}
int main()
{
SHELLEXECUTEINFO info;
ZeroMemory(&info, sizeof(info));
info.cbSize = sizeof(SHELLEXECUTEINFO);
info.fMask = SEE_MASK_NOCLOSEPROCESS;
info.hwnd = NULL;
info.lpVerb = L"open";
info.lpFile = m_filepath;
info.lpParameters = _T("");
info.lpDirectory = NULL;
info.nShow = SW_SHOW;
info.hInstApp = NULL;
ShellExecuteEx(&info);
if (1)
{
DWORD dwProcessId = ::GetProcessId(info.hProcess);
HWND hWnd = ghdspShowComInfWndUtil::GetProcessMainWnd(dwProcessId);
CWnd* pWnd = nullptr;
if (::IsWindow(hWnd))
pWnd = CWnd::FromHandle(hWnd);
if (nullptr == pWnd)
return;
pWnd->MoveWindow(x, y, cx, cy);
SwitchToThisWindow(hWnd, FALSE);
AfxMessageBox(_T("xxx"));
}
}
获取通过ShellExecute打开的exe的句柄
最新推荐文章于 2023-05-23 23:25:59 发布