Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.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#_Windows_Winapi_Hook - Fatal编程技术网

C# 如何在每次打开应用程序窗口(其他进程)时执行一些代码?

C# 如何在每次打开应用程序窗口(其他进程)时执行一些代码?,c#,windows,winapi,hook,C#,Windows,Winapi,Hook,我正在尝试从当前运行的所有进程跟踪可见窗口。我的程序与这些窗口交互,它检测它们的速度越快越好。我的目标是将可见窗口移动到屏幕上的某个位置,如果可能的话,甚至在默认位置绘制之前。如果没有,我希望在创建它们后尽快移动它们 现在,我在循环中使用EnumWindows(从user32.dll调用的p/invoked)在Visible窗口中枚举,迭代之间的延迟尽可能小 我正在寻找一种方法来连接“某物”,它允许我等待“窗口打开”事件触发,而不是不断地轮询 有什么方法可以实现这一点吗?您需要setWindow

我正在尝试从当前运行的所有进程跟踪可见窗口。我的程序与这些窗口交互,它检测它们的速度越快越好。我的目标是将可见窗口移动到屏幕上的某个位置,如果可能的话,甚至在默认位置绘制之前。如果没有,我希望在创建它们后尽快移动它们

现在,我在循环中使用EnumWindows(从user32.dll调用的p/invoked)在Visible窗口中枚举,迭代之间的延迟尽可能小

我正在寻找一种方法来连接“某物”,它允许我等待“窗口打开”事件触发,而不是不断地轮询


有什么方法可以实现这一点吗?

您需要setWindowshookx()API函数,设置一个WH_SHELL钩子。当创建一个新的顶级窗口时,回调会收到一个HSHELL_WINDOWCREATED通知

这是一个全局钩子,不能用C#编写此钩子的代码。它需要一个可以注入进程的DLL,CLR无法正确初始化以支持托管代码。你需要一个非托管DLL来完成这项工作