在屏幕上找到程序位置

时间:2014-02-03 18:42:27

标签: c++ windows winapi

如果我使用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;
    }

1 个答案:

答案 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
    }
}