问题标签 [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.
macos - OS X 上的 PostMessage() 等。向窗口发送消息
Mac OS X 上 Windows 中的 PostMessage/SendMessage 等价物是什么?
我最近开始使用 Mac 开发,我的大部分经验来自 Windows 和 nix。
我想挂钩一个窗口并模拟鼠标点击或键盘按下。此外,我希望能够找到像 GetWindowText 这样的函数或任何可以从窗口获取特定文本的函数。
mfc - 如何知道其他人是否处理了 OnContextMenu
我有一个CWnd
派生类,它有一个WM_CONTEXTMENU
处理程序 ( OnContextMenu
),它有我的默认上下文菜单。我的应用程序中的几个地方都在使用这个类。
一些使用它的地方也处理WM_CONTEXTMENU
父级(窗口父级)。它们基本上覆盖了默认的上下文菜单。
当我在CWnd
派生类中时,我基本上想知道其他人(窗口父级)是否处理了上下文菜单。
例如:
可以通过 Win32/MFC 框架吗?
windows - WM_MSO_BROADCASTCHANGE 值
WM_MSO_BROADCASTCHANGE 的值是多少,下次我将如何为自己弄清楚呢?
windows - 窗口消息“可靠”吗?
这是关于 Windows 编程的一个普遍问题:
窗口消息“可靠”吗?
例如(这些只是示例):
你能确定在光标进入你的屏幕之前
WM_MOUSEMOVE
会发生吗?如果插入设备,您能确定会收到消息吗?
WM_DEVICECHANGE
如果你的窗口失去焦点,你能确定你会收到一条消息吗?
WM_KILLFOCUS
或者,换句话说:您能否确定您会在适当的时间收到适当的消息,或者您是否总是必须进行防御性编码,以防万一您可能因为没有明显记录的原因而错过消息?
例子:
保证(AFAIK)文件系统过滤器驱动程序不会“错过”文件操作或更改通知。
相反,不能保证ReadDirectoryChangesW不会错过通知。事实上,如果它的缓冲区溢出,它可能会错过很多。
笔记:
我不是在谈论针对对手的情况(例如,有人劫持了您的窗口程序或安装了钩子/过滤器);这几乎会使任何保证无效。我只是在询问即使没有人故意表示任何不好的事情也可能真正发生的晦涩情况,例如某些随机缓冲区溢出,如果有人使用SendInput
等等,假设您可以控制自己的代码。
delphi - 仅具有进程 ID 时关闭主应用程序窗口的问题
我有进程的ID。这个过程是一个有一个主窗口的应用程序。我正在尝试通过将 WM_CLOSE 发送到其主窗口来关闭此应用程序。我正在使用搜索其主窗口EnumWindows
。
问题是,我尝试关闭的这个应用程序并不总是关闭。它是多线程应用程序。当我使用下面介绍的相同方法时,记事本和 Calc 总是关闭。但我不确定它是否正常工作,因为它会将许多句柄返回到同一个窗口,即使对于 Calc.exe 也是如此。
线程是否有可能正在处理窗口的句柄,然后这个句柄以某种方式损坏?或者也许我不应该GetWindowThreadProcessId(hHwnd,pPid)
在回调中使用其他函数?
我没有想法,将不胜感激任何帮助。谢谢。
代码片段:
windows - Spy++是如何构建它的进程列表的?
TL;DR - Spy++ 工具如何真正构建它的进程列表?
阶段
我们有一个挂起的 MFC 桌面应用程序(在 Windows XP 上运行),它不再对任何用户输入做出反应。但是,通过 alt-tab 切换到它时会重新绘制它。(它确实收到WM_SETFOCUS
,WM_ACTIVATE
等。它显然没有收到任何鼠标或键盘消息。)
由于该应用程序处于不确定状态,我们提取了一些进程转储,但到目前为止这些都没有什么帮助。进入:
间谍++
我们使用 Spy++ 来查找我上面提供的有关此应用程序似乎正在处理的窗口消息的信息。我们通过打开Windows 视图 并选择我们的应用程序窗口并在消息属性中选择Windows of same process
和Messages to View
:来做到这一点Select All
。
但是,我们首先尝试通过打开Spy++的进程视图来查看此进程的所有消息,但 我们的应用程序未显示在此进程列表中。在应用程序正常运行的另一台 PC 上进行交叉检查,该进程也通常显示在 Spy++ 的进程列表中。
是否可以从 Spy++ 的 Process View 中未显示该进程,但该应用程序的主窗口显示在 Windows 视图中这一事实推断出有关行为不端的应用程序的任何信息。为什么具有可见主窗口的进程不会显示在 Spy++ 的进程视图中?
该进程列在任务管理器和 Visual Studio 2005 的“附加进程”窗口中。因此,这些工具显然使用与 Spy++ 不同的方法来列出进程...?
应用程序当前挂起的系统是 Windows XP SP2 系统,我们使用了 Visual Studio 2005 附带的 Spy++ 实用程序。
该行为偶尔会再次出现,但仅在应用程序运行几天后才会出现!
windows - MFC 应用程序似乎没有收到输入消息?
我们有一个不响应任何用户输入的 MFC Visual-C++ 应用程序。
(注意:目前仅在一台机器上知道。该行为偶尔会再次出现,但仅在应用程序运行几天后才会出现!)
当我们通过 Alt-Tab(或任务栏)切换到应用程序时,应用程序会被重绘,但我们不能,例如,通过单击标题栏来激活它的主窗口。
我们已经使用 WinDbg 提取了 4 个转储并检查了活动指令。我们总是在主线程(GUI线程)内的一些重绘代码或类似的东西中。我们肯定是/不在模式消息循环中,并且主线程的堆栈总是看起来“OK”。(大多数/所有工作线程都处于空闲状态,等待某个事件,那里也没有可疑代码。)
在调查Spy++的问题时,我们还看到这个单独的问题中指定的行为,即我们似乎收到了绘制和激活消息,但没有用户输入被路由到应用程序。当我在屏幕上有应用程序窗口并选择它以显示主窗口的消息时,
它只会显示“通用”“referesh”消息而不会显示其他信息
如果我钻得更深,并选择整个过程的所有消息,
这就是我们所看到的:
该应用程序显然只在一个隐藏的子窗口 (00CB09F0) 上处理消息,我们看到的是每秒 200 条 WM_PAINT 消息的恒定流。
通常,此子窗口根本不处理任何消息(Windows 发送消息时刷新 WM_PAINT 等除外)。它通常用作绘图区域,并且通过其父 (010A09B8) 窗口上的 WM_TIMER 消息进行绘图。(这个 WM_TIMER 消息也不会显示在挂起的应用程序上。)
进程资源管理器中显示的性能配置文件如下所示(100% 内核时间,或多或少):
delphi - 为什么表单不接收 TFrame 子级的 WM_NOTIFY 消息?
WM_NOTIFY 消息通常用于就地“工具提示”(消息气球)和其他控件通知,但如果我将控件放在 TFrame 上,则这些控件永远不会出现 WM_NOTIFY 消息。为什么这些消息不再发送到我的表单,我该怎么办?
c# - 当任务栏/开始菜单结束时,窗口消息发送到我最顶层的表单/窗口?
我在 Windows 7 中有一个 C# Windows Forms 程序,但我认为它适用于任何 Windows 程序。
我的程序的主窗体覆盖了整个屏幕,并设置了 Topmost 属性。但是,例如,当我单击“开始”键打开“开始”菜单时,任务栏和“开始”菜单会显示在“始终位于顶部”表单的顶部。
当发生这种情况并且我的表单/窗口不再是最顶层的窗口(或 Z 顺序的顶部)时,是否有窗口消息 (WM_) 发送到我的表单/窗口?我想用 WndProc 来捕捉它。
谢谢
c# - 在 WndProc 中处理 AeroSnap 消息
在我的 C# .NET 4 应用程序中,我WndProc
用来处理一些消息,主要是处理将应用程序大小调整为全屏和全屏。
现在我只是在处理SC_MAXIMIZE
并WM_NCLBUTTONDBLCLK
确定窗口是否被调整为最大化状态或从最大化状态(我知道我不需要 WndProc 来处理SC_MAXIMIZE
,但是当我双击时Form_Resize
似乎没有触发消息WM_NCLBUTTONDBLCLK
应用程序的标题栏。
现在我注意到,如果我将窗口 Aero Snap 到屏幕顶部以最大化它,则上述消息都不会发布,因此当通过 Aero Snap 最大化窗口时不会应用某些逻辑。如果窗口被捕捉到屏幕顶部而不是右侧或左侧,或者如果窗口未从最大化位置捕捉,我只想处理该消息。
我找不到任何与 Aero Snap 相关的窗口消息。有谁知道这些消息的任何参考?