我使用postmessageapi向一些程序发送了一条WM_ACTIVE消息。当程序被停用时,发送消息实际上不会激活窗口,但程序认为它是活动的。(它确实成功了。(然而,我认为定期发送邮件是非常低效的。如果我想检查程序的WM_ACTIVE值,并且它是未激活的,我会尝试使用POSTMESSAGE API再次发送WM_ACTIVE消息,以将程序本身与活动混淆,但我想不出方法。尽管有人认为挂钩很容易使用,但除了键盘和鼠标之外,C#不支持其他类型的全局挂钩。有人能想出其他主意吗?请帮帮我。
要检查进程是否聚焦,您应该使用GetForegroundWindow
获取聚焦窗口句柄,然后使用GetWindowThreadProcessId
从该窗口句柄获取进程:
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
static extern uint GetWindowThreadProcessId(int hWnd, out int ProcessId);
IntPtr focusedWindow = GetForegroundWindow(); //get the focused window
int focusedProcessID = 0;
GetWindowThreadProcessID(focusedWindow, out focusedProcessID); //get it's process id
Process focusedProcess = Process.GetProcessById(focusedProcessID);//get the focused process
Console.WriteLine("Current Focused Process:" + focusedProcess.ProcessName);