问题标签 [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.

0 投票
1 回答
2295 浏览

c++ - 在哪里可以找到窗口消息 WM_UAHDRAWMENUITEM (0x92) 的定义

我正在编写一个处理窗口绘图消息的钩子 dll。
我发现对于Vista及以上版本,钩子dll接收到一些未知的消息ID,具体为0x90~0x95。
我做了一些谷歌搜索,发现了一个msdn 链接this,它告诉我它们是什么消息:

但是我在任何头文件中都找不到宏的定义WM_UAHDRAWMENUITEM,编译器抱怨“未定义的符号”。我对“WM_UAHDRAWMENUITEM”进行了全局搜索,但一无所获。

目前我正在使用 0x92 来处理这个消息。
我的问题是:如何用 Windows 定义的宏很好地替换硬编码的 0x92?

0 投票
1 回答
954 浏览

c# - WndProc 消息 = 49619 - 它是什么?

我正在调试 wpf 中的拖动错误并订阅了 wndproc。我收到一条消息 ID 为 49619,其中 wparam=0 和 lparam=0。我已经用尽了我的谷歌努力,并且无法发现这个窗口消息的名称是什么。

如果你知道,太好了。如果您可以提供一个将其包含在其窗口消息列表中的网站,那就更好了。

十六进制值 = 0xC1D3

0 投票
1 回答
936 浏览

c++ - 无法接收/捕获 Windows 消息

MFCMessage handling上下文还很陌生。

我有一个DLL消费者应用程序,它有一个CFrameWndEx派生类,CMainFrame. 现在这调用 a DLL,它将 aCDialog等放入此MainFrame窗口。

我希望在我的应用程序中接收某些消息。

所以我所做的是,在 DLL 使用者应用程序的消息映射中声明预期的消息,并定义适当的消息处理程序。

现在,即使我可以看到正在向应用程序发送那些注册的消息,我也无法在消费者窗口中接收/处理它们,也就是说,当这些消息被广播时,什么也没有发生。

Mainfrm.h

Mainfrm.cpp

所以,在这一切之后,我可以看到消费者应用程序已注册为从另一个广播它们的应用程序接收这些消息。

但是,在创建消息被广播的条件时,我可以从其他接收它们的应用程序中验证它们,我的应用程序中没有捕获到这样的消息。

我不确定问题可能出在哪里。窗口总是在最上面,尽管里面有另一个CDialog派生DLL的。

0 投票
2 回答
169 浏览

c++ - 从控件中确定对话框最小化

有没有办法从对话框上的控件中确定对话框的最小化?

我正在使用当对话框最小化时ON_WM_SIZE应该使用 Type 调用的窗口消息。SIZE_MINIMIZED

然而,当对话框被最小化时,这个方法永远不会被调用。我需要跟踪该最小化,以便在再次恢复时使用透明胶片正确重绘我的控件。

0 投票
1 回答
245 浏览

windows - 如何在 shell 扩展中拦截窗口消息

RegisterWindowMessage我有一个 shell 扩展,当另一个应用程序广播特定的窗口消息(使用 注册的自定义消息)时,它需要重新加载其配置。

我尝试了几种方法来拦截消息:

  • 在 Windows 资源管理器的窗口上安装窗口子类回调,使用SetWindowSubclass. 这适用于 Window 7,但不适用于 Windows 8,因为显然DllMain没有在主线程上调用,并且SetWindowSubclass不适用于另一个线程。这在文档中提到:

    您不能使用子类化辅助函数跨线程子类化窗口

  • 安装挂钩CALLWNDPROC,使用SetWindowsHookEx. 因为我不想减慢整个系统的速度,所以我只为特定线程(资源管理器的主线程)安装了钩子。这适用于 Windows 8,但不适用于 Windows 7...我怀疑这是因为我挂错了线程,但我不确定。无论如何,这种方法似乎过于侵入性。

  • 创建一个仅消息窗口来处理消息。这根本不起作用,因为仅消息窗口不接收广播消息。

是否有可靠的方法在 shell 扩展中接收窗口消息?

窗口消息最初似乎是通知 shell 扩展的最简单方法,但如果您认为另一种机制更合适,我愿意接受建议。

0 投票
1 回答
774 浏览

c++ - 新创建的桌面不接收键盘事件

我创建了一个小程序,它在新桌面中启动。

稍后,使用以下行在该桌面上启动另一个应用程序:

pathModuleName是由 获得的自身位置GetModuleFileName(NULL)

新创建的应用程序获取到另一个窗口的 HWND 并使用以下命令发送窗口消息:

所以基本上A桌面 DEFAULT 上的应用程序是B在桌面 X 上启动应用程序,它会获得一个 HWND 到C在同一个桌面 X 上启动的另一个应用程序。

我的问题是来自B桌面 X 上的应用程序的键盘事件没有在应用程序中触发C。只有当我使用SwitchDesktop(B)时,才会触发事件并正确执行代码。

我错过了什么?

0 投票
0 回答
317 浏览

c# - 移动后相对于另一个窗口定位窗口

我们正在开发一个 WPF 应用程序,在某些情况下会打开一个附加窗口,该窗口应始终停靠在父(主)窗口上。我们目前正在挂钩主应用程序并使用窗口消息:

这工作得很好,除了一些极少数情况,当你很快放下窗口时——额外的窗口只是停留在一个过时的位置,这显然是不正确的。

我想到了另一种/另一种方法。每 x MS 额外检查一次窗口位置,或者每次处理窗口消息时启动/重新启动计时器,以延迟更新过程。还有其他想法吗?

0 投票
1 回答
208 浏览

windows-8.1 - NSE:最小化和恢复窗口后,我得到“WM_WINDOWPOSCHANGING”,但没有得到“WM_WINDOWPOSCHANGED”

如果我最小化我的shell 扩展文件夹,然后尝试通过单击任务栏中的来恢复它,我会收到错误提示音并且没有任何操作。

使用Microsoft Spy++,我查看了尝试恢复文件夹的事件并得到以下信息:

对于常规窗口,我得到以下信息:

该问题仅在 上为我重现Windows 8.1,而不是在此之前的任何版本上。

可能是什么原因WM_WINDOWPOSCHANGING没有被调用并且WM_WINDOWPOSCHANGED根本没有被调用?据我了解,必须在操作完成后调用它,这可能是我的窗口无法恢复的原因,并且我收到了错误提示音。

0 投票
3 回答
1866 浏览

c# - 在 Winforms 中捕获 WinKey+D 键序列

我试图让我的应用程序始终呈现在桌面级别。这意味着我的应用程序需要忽略 LWin+D 或 RWin+D 等键序列。我试图让它这样工作:

但它只捕获 RWin/LWin 按钮,没有 D 按钮。

我也尝试过创建自己的消息过滤器,但我迷路了。所有这些消息和按位:

那么,如何让我的应用程序捕获/忽略 R/LWin+D?

0 投票
0 回答
55 浏览

sendmessage - 接收器窗口未通过 Windows 中的 PostMessage 获取数据

void SendDataFromWorkerThread(HWND 句柄)

{

}

在不同线程上接收时..

void GetDataFromWorkerThread(WPARAM wparam,LPARAM lparam)

{

}

我的应用程序是单线程,我将一些工作(返回一些数据,高于 x 值 "10" )委派给工作线程。我正确地收到了消息,但没有收到数据。