Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否有简单的方法来检查某些流程是否已激活?_C#_Hook_Postmessage - Fatal编程技术网

C# 是否有简单的方法来检查某些流程是否已激活?

C# 是否有简单的方法来检查某些流程是否已激活?,c#,hook,postmessage,C#,Hook,Postmessage,我使用PostMessageAPI向一些程序发送了一条WM_活动消息。 当程序被停用时,发送消息实际上并不会激活窗口,但程序认为它处于活动状态。(它实际上成功了。) 然而,我认为定期发送邮件是非常低效的。 如果我想检查程序的WM_ACTIVE值,并且它是非活动的,我尝试使用POSTMESSAGE API再次发送WM_ACTIVE消息,以混淆程序本身与活动的关系,但我想不出一种方法。尽管有一种想法认为挂钩很容易使用,但C#不支持除键盘和鼠标之外的其他类型的全局挂钩。 有人能想出别的主意吗?请帮助我

我使用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);

你只是想让一个过程有重点吗?我不认为我需要知道这个过程是否有重点。但是我想这可能会有帮助。有没有办法确保它的重点?我会参考它。非常感谢。