1、需要用到的 APIs

  1. GetForegroundWindow()
  2. GetWindowThreadProcessId()

2、大致步骤

1、首先导入 DLL 和添加引用

//引用
using System.Diagnostics;
using System.Runtime.InteropServices;

//导入DLL(class内部)
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern IntPtr GetForegroundWindow();

[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);

2、接着获取焦点窗口的 HWND

IntPtr myPtr = GetForegroundWindow();

3、通过 HWND 获取进程 ID,再通过 Process 的 GetProcessById 即可获取到进程

int calcID;
GetWindowThreadProcessId(myPtr, out calcID);
Process result = Process.GetProcessById(calcID);

值得注意的是,在 C# 7后 out 关键字支持在传入时定义,即为

GetWindowThreadProcessId(myPtr, out int calcID);
Process result = Process.GetProcessById(calcID);

1 个评论

发表评论

邮箱地址不会被公开。 必填项已用*标注