C# 是否有简单的方法来检查某些流程是否已激活?
我使用PostMessageAPI向一些程序发送了一条WM_活动消息。 当程序被停用时,发送消息实际上并不会激活窗口,但程序认为它处于活动状态。(它实际上成功了。) 然而,我认为定期发送邮件是非常低效的。 如果我想检查程序的WM_ACTIVE值,并且它是非活动的,我尝试使用POSTMESSAGE API再次发送WM_ACTIVE消息,以混淆程序本身与活动的关系,但我想不出一种方法。尽管有一种想法认为挂钩很容易使用,但C#不支持除键盘和鼠标之外的其他类型的全局挂钩。C# 是否有简单的方法来检查某些流程是否已激活?,c#,hook,postmessage,C#,Hook,Postmessage,我使用PostMessageAPI向一些程序发送了一条WM_活动消息。 当程序被停用时,发送消息实际上并不会激活窗口,但程序认为它处于活动状态。(它实际上成功了。) 然而,我认为定期发送邮件是非常低效的。 如果我想检查程序的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);
你只是想让一个过程有重点吗?我不认为我需要知道这个过程是否有重点。但是我想这可能会有帮助。有没有办法确保它的重点?我会参考它。非常感谢。