问题标签 [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 投票
7 回答
506 浏览

.net - 为什么通过菜单项的单击事件打开的模式对话框会处理所有窗口消息?

所以在过去的一天左右,我一直在修复一个由模式对话框引起的错误。我在一个通过 Windows 消息泵与服务器通信的应用程序上工作。当我使用 ShowDialog() 显示模态表单时,消息泵被阻止并且我的任何消息都没有被处理,但它们确实在队列中建立(预期行为)。

但是,我最近注意到,如果通过菜单项的单击事件打开模式窗体,则消息将被泵送到主窗体并进行处理。有谁知道为什么当通过菜单项的单击事件显示模态表单时这些消息没有被阻止?

编辑:我应该注意到我正在使用 C#。这个怎么样; 如果没有人能回答这个问题,谁能告诉我如何自己调查这个问题?我唯一能想到的就是查看调用堆栈。不幸的是,这还没有告诉我任何事情。

0 投票
7 回答
7465 浏览

delphi - 寻找进程间通信中使用的 windows 消息的替代方案

我有一个多线程应用程序 (MIDAS),它使用 Windows 消息与自身通信。

主要形式

主窗体接收 RDM LogData('DataToLog') 发送的 windows 消息

因为使用了 windows 消息,所以它们具有以下属性

  1. 收到的消息是不可分割的
  2. 收到的消息按发送顺序排列

问题:

你能建议一个更好的方法来做到这一点而不使用 Windows 消息吗?

主格式代码

RDM 代码

编辑:

为什么我想摆脱 Windows 消息:

  • 我想将应用程序转换为 Windows 服务
  • 当系统繁忙时——windows消息缓冲区已满,速度变慢
0 投票
3 回答
1225 浏览

windows - 确定当前是否正在移动给定窗口

基本上,我正在寻找 IsWindowMoving(HWND) Win32 API 调用。我需要知道用户当前是否正在移动窗口。

该窗口不属于我,因此无法监听 WM_SYSCOMMAND / SC_MOVE 或 WM_MOVING(由于 32/64 互操作,我不想子类化或挂钩)。

0 投票
4 回答
2711 浏览

winforms - Firefox/Gecko 控件干扰 Windows 窗体按键

编辑:除了赏金,我们愿意支付 250 美元在 Firefox/Gecko 代码库中修复这个错误。这是一个重现问题的简单测试项目(Visual Studio 2008 C#)。

编辑 #2我们愿意支付 600 美元来修复这个错误。有关重现问题的示例项目,请参见上文。

我们的 C# Windows 窗体上有一个 Firefox (Gecko) ActiveX 控件来显示 HTML。

当这个 Firefox ActiveX 控件出现在我们的表单上时,大约 2-3% 的按键无法通过。或者更确切地说,发送不同的 Windows 消息:

我们按住 TAB 键在 3 个常规 WinForms 文本框之间切换。它将在 97% 的时间内正确运行。Spy++ 告诉我们 WM_KEYDOWN 消息已正确发送:

正常行为 http://judahhimango.com/images/normaltab.jpg

但是随机,可能有 2-3% 的时间,tab 键(或其他键)没有被正确处理。Spy++ 告诉我们正在发送 WM_CHAR:

奇怪的行为 http://judahhimango.com/images/screwytab.png

当出现奇怪的行为时,要么根本没有处理密钥,要么处理不正确(例如将 '\t' 字符插入不支持制表符的文本框中。

仅当 Firefox ActiveX 控件在我们的表单上时才会发生这种情况。

我们的问题是:Firefox/Gecko 引擎是否安装了某种可能导致这些副作用的键盘挂钩?或者更好的是,我们如何解决这个问题?

0 投票
1 回答
115 浏览

winapi - 发布窗口消息需要满足哪些条件?

我已经使用以下方法成功注册了一个窗口类RegisterClassEx并创建了一个窗口CreateWindowEx

关联的窗口过程接收到消息36、129、131、1,返回HWND不为空。但是,当我后来PostMessage(从另一个线程)调用时:

即使 bPosted 为真,窗口过程也不会被调用。我正在努力弄清楚为什么会这样。窗口过程是MSDN 示例中的一个- 一旦我确认消息通过,我打算添加另一个案例。

发布窗口消息需要满足哪些条件?

0 投票
2 回答
9561 浏览

delphi - Delphi MDI - 处理打开/关闭/激活子窗体

我正在开发 MDI 应用程序,它为每个创建的 MDI 子项分配一个选项卡。我需要在主(父)表单代码中“捕获”子表单的 OnActivate、OnCreate 和 OnDestroy 事件。简单地以子窗体调用代码对我来说是不可能的,因为有许多窗体的类用作 MDI 子窗体,插件也可以加载它自己的窗体...

所以,我的问题是:如何在不使用子表单事件的情况下捕获 MDI 子表单已被激活/停用?

0 投票
2 回答
1643 浏览

delphi - Delphi 2009 - 通过双击 SysMenu 恢复窗口时的处理?

当用户通过双击标题栏恢复表单时,我需要处理。我尝试处理 WM_SYSCOMMAND 窗口消息,但这仅在用户通过单击系统菜单中的恢复按钮恢复表单时才有效。

如果这很重要,我正在使用 DevExpress 功能区表单组件。

谢谢。

0 投票
2 回答
1022 浏览

windows - 是否可以告诉 Scintilla 忽略某些击键并将它们传递给父窗口?

我希望 Scintilla 忽略某些组合键,例如 Ctrl+Enter 或 Ctrl+D,并在输入它们时通知父窗口。我通读了文档,无法弄清楚如何做到这一点。这可能吗?

0 投票
1 回答
868 浏览

security - “App.exe”和“App.vshost.exe”与WndProc的执行区别

我正在尝试调整在 VS 2008/C# 中开发的应用程序,该应用程序通过使用 Control.WndProc 方法侦听另一个应用程序的 WM_ 消息。当“app.exe”版本运行时,WM_USER 消息可见并被处理;但是,当运行“app.vshost.exe”版本时,这些相同的消息对应用程序不再可见,因此不会被处理。似乎“.exe”和“vshost.exe”版本都收到了其他 WM_ 消息(通过在 WndProc 上放置一个中断,但是 WM_USER 消息不能被困在“vshost.exe”版本中。应用程序的安全设置设置为“完全信任的应用程序”。

更令人困惑的是,当我将相同的源代码移动到另一台计算机时,第二台计算机能够看到并处理“app.exe”和“app.vshost.exe”版本的 WM_USER 消息,这导致了我相信这是我的开发计算机中的环境问题。

谁能指导我了解我的开发环境有什么独特之处可以解释 WM_USER 消息的可见性差异?

0 投票
3 回答
397 浏览

c++ - 在线程之间发送窗口消息时出现 ESP 错误

我有一个观察者类和一个订阅者类。
出于测试目的,观察者创建了一个生成虚假消息和调用的线程,CServerCommandObserver::NotifySubscribers()如下所示:

订阅者是一个CDialog派生类,它也继承自CServerCommandSubscriber.

在派生类中,我添加了一个消息映射条目,它将服务器命令路由到订阅者类处理程序。

问题是,我在 HandleServerCommand() 方法中看到了奇怪的崩溃:

它看起来像这样:

调试错误!

程序:c:\myprogram.exe
模块:
文件:i386\chkesp.c
行:42

ESP 的值未在函数调用中正确保存。这通常是调用使用一种调用约定声明的函数和使用另一种调用约定声明的函数指针的结果。

我检查了 AfxBeginThread() 想要的函数指针:

对我来说,这看起来很兼容,不是吗?

我不知道,我还需要寻找什么。有任何想法吗?

我做了另一个奇怪的观察,这可能是相关的:在NotifySubscribers方法中,我调用IsWindow()以检查句柄指向的窗口是否存在。显然是的。但是调用会CWnd::FromHandlePermanent()返回一个 NULL 指针。