有没有办法在辅助屏幕中获取未选择的地面窗口的进程ID

时间:2019-06-11 21:56:45

标签: c# wpf winapi

Windows Api将当前活动/选定的进程视为唯一的前台进程,我需要将焦点放在在其他屏幕上运行的应用程序中(如果当前进程在主屏幕中处于活动状态,则我希望将前台应用程序集中在第二个屏幕,反之亦然)

目前,我可以选择任何过程。

Process currentProcess  = Process.GetProcessById(2612);
var hWnd = currentProcess.MainWindowHandle;
if (hWnd != IntPtr.Zero)
{
   SetForegroundWindow(hWnd);
}
[DllImport("user32.dll")]
internal static extern IntPtr SetForegroundWindow(IntPtr hWnd);

是否可以找到在另一个屏幕上运行的应用程序的进程ID?

1 个答案:

答案 0 :(得分:1)

  

有没有一种方法可以根据屏幕坐标找到进程ID?

是的。您可以使用WindowFromPoint从坐标中获取窗口句柄(确保在辅助屏幕中的Point处可见该窗口)。然后,您可以通过GetWindowThreadProcessId

获取与句柄关联的processId和threadId
GetWindowThreadProcessId(WindowFromPoint(Point),ref ProcessId);