如果我使用CreateProcess()从C ++程序打开notepad.exe,是否可以找到已启动的记事本窗口的位置?我想在屏幕上找到它的X和Y位置。
代码:(通过建议改进)//工作
Procces = CreateProcess(
"C:\\Windows\\System32\\notepad.exe",
"-l D:\\Testing.txt",
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi);
WaitForSingleObject(pi.hProcess, 1000);
HWND hwndNotePad = FindWindow(NULL, "Testing.txt - Notepad");
RECT r;
if (INVALID_HANDLE_VALUE != hwndNotePad) {
GetWindowRect(hwndNotePad, &r);
cout << r.bottom << endl;
}
答案 0 :(得分:1)
这样的事情:
HWND hwndNotePad = FindWindow(NULL, "Untitled - Notepad");
RECT r;
if (NULL != hwndNotePad) {
GetWindowRect(hwndNotePad, &r);
}
如果您不知道确切的名称,可以使用EnumWindows
。这不是我的首要问题,因此可能存在错误:
main()
{
//// .....
HWND hwndNotePad = NULL; // Store the result here
EnumWindows(enumProc, (LPARAM)(&hwndNotePad); // Check all windows
if (NULL != hwndNotePad) {
// Window found
RECT r;
GetWindowRect(hwndNotePad, &r);
}
//// ......
}
BOOL CALLBACK enumProc(HWND hwnd, LPARAM lParam)
{
// Get title bar text
char winTitle[256];
GetWindowText(hwnd, winTitle, 256);
if (NULL != strstr(winTitle, "Notepad")) { // Check for match
HWND *match = (HWND *)lParam;
*match = hwnd; // Save result
return FALSE; // No need to keep checking
}
else {
return TRUE; // No match. Keep checking
}
}