ShowWindow无法专注于Win10计算器应用程序

时间:2018-10-25 20:53:36

标签: c++ windows winapi

我的笔记本电脑有一个运行计算器的按钮,但是每次按下它时,它会产生一个新的过程,而不是专注于现有过程。 我决定编写一个小应用程序,以专注于计算器的窗口(如果存在)或生成一个新的窗口。

#include "pch.h"
#include <iostream>
#include <Windows.h>
#include <WtsApi32.h>

HWND find_top_window(DWORD pid)
{
    std::pair<HWND, DWORD> params = { 0, pid };

    BOOL bResult = EnumWindows([](HWND hwnd, LPARAM lParam) -> BOOL
    {
        auto pParams = (std::pair<HWND, DWORD>*)(lParam);

        DWORD processId;
        if (GetWindowThreadProcessId(hwnd, &processId) && processId == pParams->second)
        {
            SetLastError(-1);
            pParams->first = hwnd;
            return FALSE;
        }

        return TRUE;
    }, (LPARAM)&params);

    if (!bResult && GetLastError() == -1 && params.first)
    {
        return params.first;
    }

    return 0;
}

///
int main(int argc, char* argv[])
{
    LPCWSTR szProcessName = TEXT("Calculator");
    WTS_PROCESS_INFO* pWPIs = NULL;
    DWORD dwProcCount = 0;

    if (WTSEnumerateProcesses(WTS_CURRENT_SERVER_HANDLE, NULL, 1, &pWPIs, &dwProcCount))
    {
        for (DWORD i = 0; i < dwProcCount; i++)
        {
            if (wcsstr(pWPIs[i].pProcessName, szProcessName) != NULL)
            {
                std::cout << "Found!\npid: " << pWPIs[i].ProcessId << "\n";

                HWND hWnd = find_top_window(pWPIs[i].ProcessId);

                std::cout << "hwnd:" << hWnd << "\n";

                if (hWnd != 0)
                {
                    ShowWindow(hWnd, SW_SHOW);
                    //ShowWindow(hWnd, SW_RESTORE);
                }

                break;
            }
        }
    }

    if (pWPIs)
    {
        WTSFreeMemory(pWPIs);
        pWPIs = NULL;
    }

    return 0;
}

由于某种原因,它无法ShowWindow-未显示窗口。 在这一方面需要帮助-我不知道为什么会失败。

0 个答案:

没有答案