- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试“ Hook ”到窗口的消息中以检测最小化/最大化。我环顾四周,认为唯一/最好的解决方案是挂接到窗口的消息,检查 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);
它会给我一个“对象引用未设置为对象的实例”。 “source.AddHook ...”错误。断点时,源变量为空也很清楚。换句话说:它无法在第一行获取 HwndSource。
我知道使用“WindowInteropHelper”是可能的,但那是当您有实际窗口作为 Windows.Window 可用时,但在我的情况下我没有。
任何解决方法/解决方案将不胜感激,
雷内·萨克斯
附言我 100% 确定记事本在执行代码时正在运行,并且它设法找到它,它是主窗口句柄。
最佳答案
HwndSource
和 HwndSourceHook
不会按照您的想法进行操作。它们只存在于 WPF 和标准 Win32 窗口之间的互操作 - 在同一进程中。它们不能用于 Hook 不同进程中窗口的窗口过程。
HwndSource.FromHwnd() 不会创建新的 HwndSource 对象,它“返回指定窗口的 HwndSource 对象”。如果 hWnd 没有关联,FromHwnd()
将返回 null。这就像在记事本的 hWnd 上调用 System.Windows.Forms.Control.FromHandle
- 由于记事本窗口不是 WinForms 控件,这也会返回 null。
Hook 另一个进程的窗口过程的方法是使用SetWindowsHookEx .为了 Hook 另一个进程,the code has to be written in C or C++ .
关于来自 Process.MainWindowHandle 的 C# HwndSource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7860083/
我正在使用 HwndSource在不是主窗口的 WPF 窗口中,为了 Hook 窗口过程 (WndProc) 以接收一些消息: WinSource = HwndSource.FromHwnd(new
我正在 .net 4.0 中构建 C# 应用程序。出于某种原因,我无法使这段代码工作: HwndSource Source; Source = HwndSource.FromHwnd(new Wind
我正在尝试“ Hook ”到窗口的消息中以检测最小化/最大化。我环顾四周,认为唯一/最好的解决方案是挂接到窗口的消息,检查 WM_WINDOWPOSCHANGED 消息,然后检查它的状态。 我遇到了一
我有一段代码如下: IntPtr hWnd = new WindowInteropHelper(this).Handle; HwndSource source = HwndSource.FromHwn
我需要通过 Handle 在其他窗口中托管我的 WPF UserControl。我试过使用 HwndSource: var userControl = new MyUserControl(); var
我的公司有一个大型的遗留 Delphi 应用程序,我们正试图将其逐渐迁移到 .Net 框架。我们已经决定使用 WPF 实现新的 GUI 元素并通过 COM 公开它们。我相信这是相当标准的,因为我在网上
我有一个用原生 C++ 编写的 MFC 应用程序,它不能使用\clr。我需要在这个 MFC 应用程序的框架内显示一个 WPF 窗口,所以我试图用混合 C++(cli) 制作一个包装器,它包含这个 WP
我是一名优秀的程序员,十分优秀!