Ren*_*ers 1 c# interop hwnd messages
我试图"挂钩"窗口的消息以检测最小化/最大化.我环顾四周,并认为这样做的唯一/最佳解决方案是挂钩窗口的消息,并检查WM_WINDOWPOSCHANGED消息,然后检查它的状态.
我遇到了一个问题.
System.Windows.Interop.HwndSource source = System.Windows.Interop.HwndSource.FromHwnd(System.Diagnostics.Process.GetProcessesByName("notepad")[0].MainWindowHandle);
System.Windows.Interop.HwndSourceHook hook = new System.Windows.Interop.HwndSourceHook(WndProc);
source.AddHook(hook);
Run Code Online (Sandbox Code Playgroud)
它会给我一个"对象引用不设置为对象的实例"."source.AddHook ..."上的错误.在断点时,也清楚源变量为空.换句话说:它无法在第一行获得HwndSource.
我知道可以使用"WindowInteropHelper",但是当你将实际窗口作为Windows.Window可用时,但在我的情况下,我没有.
RenéSackers 非常感谢任何解决方法/解决方案
PS我在执行代码时100%确定记事本是否正在运行,它设法找到它,它是主窗口句柄.
HwndSource并且HwndSourceHook不要做你想的.它们仅存在于WPF和标准Win32窗口之间的互操作 - 在同一过程中.它们不能用于在不同的进程中挂钩窗口的窗口过程.
HwndSource.FromHwnd()不会创建一个新的HwndSource对象,它"返回指定窗口的HwndSource对象".如果hWnd没有关联的hWnd,FromHwnd()则返回null.这就像System.Windows.Forms.Control.FromHandle从记事本调用hWnd - 由于记事本窗口不是WinForms控件,因此也会返回null.
挂钩另一个进程的窗口过程的方法是使用SetWindowsHookEx.为了挂钩另一个进程,代码必须用C或C++编写.
| 归档时间: |
|
| 查看次数: |
5899 次 |
| 最近记录: |