如何从本机应用程序获取窗口打开/关闭/最小化消息?

发布于 2024-08-26 22:41:51 字数 283 浏览 8 评论 0原文

为这个标题写一个好的标题是很困难的。

我正在开发一个 WPF 应用程序,它需要了解系统上所有其他打开的窗口的存在。我可以通过调用本机 EnumWindows 方法来完成此操作,并且我可以调用其他本机方法来过滤出我感兴趣的窗口。这效果很好。

我遇到的问题是我想知道窗口何时打开或关闭(理想情况下最小化)。我可以通过使用 EnumWindows 进行轮询来做到这一点,但我发现即使我将其推到另一个线程,速度也相当慢。

有没有更好的方法来获取窗口打开/关闭/最小化的通知?请记住,我对非托管代码的了解非常有限。

It's tough to write a good title for this one.

I'm working on a WPF application which needs to know about the existence of all other open windows on the system. I'm able to do this by calling the native EnumWindows method just fine, and I can call other native methods to filter out just the windows I'm interested in. This works well.

The problem I'm having is that I want to know when a window is opened or closed (and, ideally, minimized). I can do this by polling with EnumWindows, but I'm finding that to be pretty slow, even if I push it off to another thread.

Is there a better way to get notifications of window opened/closed/minimized? Keep in mind that my knowledge of non-managed code is pretty limited.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

握住我的手 2024-09-02 22:41:51

您可以使用 windows hook 来处理此类事情。

基本上一旦设置了你的钩子,只要你感兴趣的消息被调用,你的回调就会被调用。

codeproject 上有一个很好的示例,用于使用 C# 代码设置全局系统范围的挂钩.
注意:此项目有一个非托管 C++ 组件,但您不需要直接使用它。

You can use windows hook for this type of thing.

Basically once setup your hook, your callback will be called whenever the messages you're interested get called.

There is a good example on codeproject for setting global system wide hooks with C# code.
Note: There is a unmanaged c++ component to this project, but you don't need to work with it directly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文