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 个评论

发表评论

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

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据