问题标签 [window-messages]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 为什么我的 Windows API 回调函数不运行?
我编写了一个终止 egui.exe 的代码。但是处理完 WM_CLOSE 消息后,我的回调函数没有运行。为什么?
虽然这个程序完美地完成了它的任务,但是在处理完 WM_CLOSE 消息并终止 egui.exe 之后,回调函数 SendAsyncProc 并没有运行。你能告诉我为什么吗?
.net-core - .NET Core 中的窗口消息循环(WndProc | While (GetMEssage))线程
我正在尝试使用 .Net Core 订阅窗口消息
我能够接收初始消息以创建一个窗口(通过 pinvoke)并销毁消息。但在那之后我创建的窗口被阻止并且没有收到任何其他消息。
类创建自定义窗口CustomWndProc 接收消息。我还没有在那里执行任何逻辑,只是想让事情正常进行。
我试图弄清楚如何从一个单独的线程中执行此操作,以便在不阻塞主 api/gui/console 接口的同时继续收听消息
我可以在单独的线程中创建这个类并且仍然使用依赖注入并且可以随心所欲地访问它的数据/消息/事件。我知道在 .net 中有很多方法可以做到这一点,但这是 .net Core。
否决票是怎么回事,实际上没有资源如何在 Net Core 中实现这一点,我无法访问任何简化这一点的 .Net 表单/控件,我还提供了完整的工作类,如果缺乏细节在我的帖子中,发表评论。不要在没有充分理由的情况下随机投票。如果有另一个线程解释了如何做到这一点,链接它,然后投反对票。
实现了 GetMessage 循环,我的窗口现在接收所有消息并且没有被阻塞,但它现在阻塞了主线程。我会看看我是否可以在单独的线程上创建窗口并在该线程上运行消息循环。
c# - 如何为另一个应用程序捕获 WM_MINIMIZE?
我目前正在寻找 C# 中的解决方案,如何为我没有任何源代码的另一个应用程序(例如记事本)捕获像 WM_MINIMIZE 这样的窗口消息。我的目标是防止用户或系统最小化某个应用程序。所以我的基本想法是运行一个过滤所有窗口消息的进程,并且什么都不做,除非将消息发布到我定义的应用程序(例如通过知道应用程序主窗口的窗口句柄),然后查看如果此消息是特定大小的操作,例如 WM_MINIMIZE。只有在这种情况下,才应从 Windows 消息队列中删除该消息。
实现这一目标的第一种方法是什么?目前,我在寻找在线资源方面有点困难,因为大多数关于调整大小的主题都涉及自己应用程序的消息,而不是控制发布到同一台计算机上运行的其他外部应用程序的消息。
c++ - 在 CRichEditCtrl 派生和子类中消失 WS_STYLECHANGING/WS_STYLECHANGED 消息,或者 Spy++ 中的错误?
我真的对此感到困惑。我有一个CRichEditCtrl派生类,它在我的 CDialog 中也被子类化为子控件。(Win32窗口本身的窗口类rich-edit
是较新的RICHEDIT50W
。)
我正在尝试调查在用户点击 ENTER 以使该控件显示垂直滚动条之前光标位于窗口底部的那一刻广播的消息:
当我使用 Spy++ 检查该窗口的消息时,它表明我收到了一系列WS_STYLECHANGING
/WS_STYLECHANGED
消息。但是当我试图将它们困在我的子类 WndProc 中时,什么也没有发生。
所以我决定设置一个测试(在Debug
构建中)。这是我为子类修改的 WndProc,在br0
和上有两个断点br1
:
所以我设置了 Spy++ 来监视我的窗口的消息,然后在它的垂直滚动条即将显示时到达控件本身的点(上面的屏幕截图),然后点击Enter
. 在这一点上br0
被击中的WM_NCCALCSIZE
消息。然后我手动设置bDoLogging
为1,删除所有断点,让它运行。
这是 Spy++ 的输出:
这是我的日志副本:
看到我的日志中缺少WS_STYLECHANGING
/消息。WS_STYLECHANGED
以下是 Spy++ 中的属性:
此外,下次我运行应用程序时,我也会这样做,但现在在根 MFC 窗口过程中设置一个特定的断点AfxWndProc
:
作为条件:
看看WS_STYLECHANGED
消息是否在我的子类收到之前在 MFC 的某个地方被吃掉了。虽然该断点在应用程序启动时命中了几次,但当 Spy++ 显示它时它永远不会被命中。
那么给出了什么:它是 MFC 吗?我的代码?还是 Spy++ 中的错误?
PS。我正在使用 Spy++ x64 版本 15.00.27729
c - 如何在控制台应用程序中设置 WM_KEYDOWN 消息拦截器?
我正在开发控制台游戏引擎,为此我想制作一些控制界面。
为此,我选择了制作一个隐藏窗口的方法,该窗口读取被按下的键,然后将它们推入队列(我将单独实现这个东西),然后引擎本身只是通过读取队列并执行描述的操作来读取这些键按下每个按钮(控制表)。这就是我的意思:
此函数创建一个消息窗口并设置HandleMessageSetup()
为 proc func。
在游戏循环中(使用 while(1) 复制)我要求
消息拦截程序如下所示:
但它收到的所有消息都是 36、129、131、1,它们是窗口本身的创建消息,但没有来自控制台的消息,我按下任何键,WM_KEYDOWN 消息都不会出现。
从这个问题中,我了解了ChangeWindowMessageFilterEx()但既不
工作ChangeWindowMessageFilterEx(MWND, WM_KEYDOWN,1,NULL);
也不ChangeWindowMessageFilterEx(GetConsoleWindow(), WM_KEYDOWN,1,NULL);
工作,仍然没有收到消息。如何克服这个麻烦?
c# - 使用 Winforms C# 在远程桌面会话中向 RemoteApp 应用程序发送键盘敲击
我想将键盘键发送到 RemoteApp 应用程序。我将 C# 与 Windows API 一起使用。
当我将 Windows 10 桌面与 RemoteApp 应用程序一起使用时,该代码示例有效。应用程序出现在前台,并在应用程序中执行快捷键 CTRL + SHIFT + O。
当我在 RDS 会话中的 Windows Server 2012 / 2016 远程桌面服务器上启动相同的应用程序时,它会将窗口设置为前台,但应用程序没有收到快捷方式。
在带有远程桌面的 Windows 2019 服务器上,它运行良好,但对于 2012 和 2016 版本,它不起作用。
我还尝试了以下方法:带有句柄和 WM_KEYDOWN / WM_KEYUP 的 SendMessage 和 PostMessage。
c++ - 正确使用 AddClipboardFormatListener 并订阅 WM_CLIPBOARDUPDATE 消息
我目前正在尝试在我的应用程序中使用 Windows 剪贴板及其通知。具体来说,我正在尝试WM_CLIPBOARDUPDATE
使用该AddClipboardFormatListener()
函数订阅窗口消息。以前,我一直在使用该SetClipboardViewer()
功能将我的窗口直接添加到剪贴板查看器链中。这工作得很好,我已经收到了相关的消息WM_DRAWCLIPBOARD
,并且WM_DESTROYCLIPBOARD
在预期的时候。但是,我想避免继续使用剪贴板链,因为它可能很不稳定。
WM_CLIPBOARDUPDATE
我的理解是打电话后我完全可以接听AddClipboardFormatListener()
。我还缺少另一个步骤吗?我需要做些什么来确保我能正确收到此消息?就目前而言,执行复制操作时我没有收到它。
这是我的代码的一个简化示例:
WNDPROC 覆盖:
由构造函数调用:
这是一个由 .NET 包装器调用的 COM 接口,但我认为在这种情况下,这两件事中的任何一个都与我的问题无关(我想以防万一)。
c++ - MFC 中的窗口消息管理:是否必须添加基类调用?
让我们考虑这个代码片段:
问题 :
1-基类调用是强制性的吗?
2-如果我不添加它,会发生什么?(例如窗口消息堆栈溢出)?
3-基类调用是一种形式message release
吗?如果是这样,是否有另一种方法可以正确发布消息?
winapi - 在 Win32 中创建 ComboBox 无法正常工作
我是第一次创建 Win32 ComboBox。我这里有个问题。
当调用CreateWindow
ComboBox 时,它会再次使用消息调用 WndProc 回调函数WM_CREATE
,所以发生的情况是 ComboBox 生成一个子 ComboBox,就像递归一样一次又一次。
这是代码:
结果如下:
我试图放置一些布尔标志WM_CREATE
只执行一次,它可以工作,我的意思是只创建一个没有任何子项的 ComboBox。
但是,它看起来只是一个带有边框标记的白色窗口,没有箭头按钮或任何 ComboBox 应该具有的下拉页面。
当我创建不同的控件(如按钮、复选框、列表框等)时,这种递归情况从未发生过。
并且创建的 ComboBox 看起来也没有正确的形状。
希望我只是缺少一些简单的东西。