如何在C+中使用进程id切换到另一个正在运行的应用程序+;? 当我知道它的进程ID时,如何切换到Windows 7和C++中的另一个运行的应用程序?p>
我只有进程id。可能有几个应用程序具有相同的名称,因此使用窗口标题不起作用。我也没有可靠的HWND可供使用 我希望应用程序处于活动状态、可见并准备好输入,就像我使用alt tab切换到它一样。试试看如何在C+中使用进程id切换到另一个正在运行的应用程序+;? 当我知道它的进程ID时,如何切换到Windows 7和C++中的另一个运行的应用程序?p>,c++,windows,pid,C++,Windows,Pid,我只有进程id。可能有几个应用程序具有相同的名称,因此使用窗口标题不起作用。我也没有可靠的HWND可供使用 我希望应用程序处于活动状态、可见并准备好输入,就像我使用alt tab切换到它一样。试试看 HWND hNewWindow = FindWindow(...); // get window handle by title etc. if (hNewWindow) { DWORD hCurrentWindowThread = GetWindowThreadProcessId( hWn
HWND hNewWindow = FindWindow(...); // get window handle by title etc.
if (hNewWindow)
{
DWORD hCurrentWindowThread = GetWindowThreadProcessId( hWndCurrentWindow, NULL );
DWORD hNewWindowThread = GetWindowThreadProcessId( hNewWindow, NULL);
AttachThreadInput( hCurrentWindowThread, hNewWindowThread, TRUE );
SetForegroundWindow(hNewWindow);
AttachThreadInput( hCurrentWindowThread, hNewWindowThread, FALSE );
}
SetForeGroundIndow正在这里发挥你想要的魔力。这里概述了它的局限性
来自的解决方案您是否尝试过明显的
c++窗口切换到应用程序
search?只需枚举所有顶级窗口,直到找到一个属于设置了WS\u EX\u APPWINDOW
样式的PID。将该窗口置于z顺序的前面,并为其提供输入焦点。这并不能真正可靠地工作,因为并非每个应用程序都设置了WS_EX_APPWINDOW样式。如果该应用程序出现在任务栏或任务切换窗口中,则它具有WS_EX_APPWINDOW
样式。如果没有,请选择一个使您尽可能接近的标准。在我尝试的6个任务栏上的应用程序中,只有1个设置了WS_EX_APPWINDOW样式。简单地选择可能无法可靠工作的标准听起来很草率。我不能使用FindWindow,因为它使用窗口标题,并且与进程id不同,它不是唯一的。请注意,这可能会发现一个不可见的窗口或其他不打算交互的窗口。