我的笔记本电脑有一个运行计算器的按钮,但是每次按下它时,它会产生一个新的过程,而不是专注于现有过程。 我决定编写一个小应用程序,以专注于计算器的窗口(如果存在)或生成一个新的窗口。
#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)¶ms);
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
-未显示窗口。
在这一方面需要帮助-我不知道为什么会失败。