【问题标题】:Is there any way to "bind" to window data for all open windows?有没有办法“绑定”到所有打开窗口的窗口数据?
【发布时间】:2011-06-05 21:49:13
【问题描述】:

我编写了一些互操作代码,利用 user32.dll 枚举窗口并将它们添加到列表中。 WindowData是一个本地的INotifyPropertyChanged类,存储了窗口hWnd、标题、位置、大小、可执行路径、应用图标等。

有没有一种方法可以有效地“绑定”到窗口标题、位置、大小等的变化?我不想使用 DispatcherTimer 每秒更新信息。如果我可以使用简单的事件处理程序或回调或其他东西,我会更喜欢它。

有人有什么想法吗?

【问题讨论】:

    标签: c# wpf interop user32


    【解决方案1】:

    要有效地跟踪所有窗口的窗口数据而不进行轮询,您必须注册窗口创建或删除通知,然后挂钩所有消息队列并处理影响您尝试跟踪的窗口数据的消息。不幸的是,这是一项相当艰巨的任务。如果你想抢先一步,你可以看看 Spy++ 是如何实现的,等等类似的东西。这是一篇文章:

    看完之后,您可能需要重新考虑每隔一段时间进行一次轮询,并仔细更新ObservableCollection 中的更改数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 2019-09-05
      • 2016-11-25
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多