如何在C+中使用进程id切换到另一个正在运行的应用程序+;? 当我知道它的进程ID时,如何切换到Windows 7和C++中的另一个运行的应用程序?p>

如何在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

我只有进程id。可能有几个应用程序具有相同的名称,因此使用窗口标题不起作用。我也没有可靠的HWND可供使用

我希望应用程序处于活动状态、可见并准备好输入,就像我使用alt tab切换到它一样。

试试看

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不同,它不是唯一的。请注意,这可能会发现一个不可见的窗口或其他不打算交互的窗口。