问题标签 [wndproc]

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 回答
360 浏览

winforms - 为什么 SAPI 的 ISpNotifySource::SetNotifyWindowMessage() 不向我的 WndProc() 发送通知?

我正在使用 WinForms,并且试图让 SetNotifyWindowMessage() 向 WndProc 发送消息,但它没有这样做。

函数调用:

WndProc:

注意:initSAPI() 在鼠标点击事件上被调用。

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 投票
1 回答
1329 浏览

c# - .Net 中奇怪的 WndProc 错误。VB.Net 更具体地说

ETA:我使用Visual Studio 2008 Express Edition。

如果我重写 WndProc 并以某种方式搞砸了,我通常会通过注释掉代码来回溯,直到它再次工作。

不过,WndProc 的奇怪之处在于您可以将其简化为:

它仍然抛出错误。

我必须删除代码并重新输入以重置错误。

还有其他人经历过吗?

预计到达时间:

克里斯哈斯在下面回答。

我没有意识到,但这个问题一定只有在我使用反射器的代码时才会发生。反射器错误地转换为 vb.net 并将额外的括号插入到对 WndProc 基础的调用中。

0 投票
1 回答
599 浏览

c# - 处理由外部程序创建的窗口的消息的示例源代码?

我知道我必须将 SetWindowLongPtr 与 GWLP_WNDPROC 一起使用,并创建自己的 WndProc 来处理我想要的消息(例如 WM_GETMINMAXINFO 并修改 MINMAXINFO 结构)。但是,因为我想为另一个程序(如 notepad.exe)创建的窗口执行此操作,所以我无法从我的 C#/WinForms 程序执行此操作,我必须创建一个必须注入的本机 C/C++ DLL在创建窗口的过程中。

您能否提供一个链接或示例代码来执行此操作(本机 C++ DLL 以及从 C# 调用它并将其注入外部进程的方式)?

谢谢

0 投票
1 回答
845 浏览

c# - 到 WndProc 的消息是否将值从 32 位操作系统更改为 64 位操作系统?

当在 .NET 中覆盖以下方法时,我似乎在 32 位和 64 位操作系统中收到不同的消息:es。这是真的吗?

protected override void WndProc(ref Message m)

我想了解以下内容:private const int WM_LBUTTONDBLCLK = 0x0203;WM_LBUTTONBLCLK在我的 Windows 2003 64 位安装中似乎有另一个“Id”,而不是在我的 Windows XP 32 位上。

建议?

0 投票
1 回答
620 浏览

wpf - 如何使用自定义 WM_GETMINMAXINFO 逻辑在 Win7 上处理 Win+Shift+LEft/Right?

我在 WM_GETMINMAXINFO 挂钩的 WPF 应用程序中有一个自定义窗口实现,如下所示:

这一切都是一种享受,它允许我最大化一个无边界窗口而无需将它放在任务栏上,这很棒,但它真的不喜欢使用新的 Win7 键盘快捷键在显示器之间移动。

每当使用 Win+Shift+Left/Right 移动应用程序时,都会收到 WM_GETMINMAXINFO 消息,正如我所料,但 MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST) 返回应用程序刚刚从中移动的监视器,而不是它正在移动的监视器TO,因此,如果显示器具有不同的分辨率,则窗口最终大小错误。

我不确定是否还有其他我可以调用的东西,除了 MonitorFromWindow,或者是否有一个“移动监视器”消息我可以在 WM_GETMINMAXINFO 之前挂钩。我假设有一种方法可以做到这一点,因为“普通”窗口工作得很好。

0 投票
2 回答
1724 浏览

c# - C# 将 WndProc 消息从一个窗体传递到另一个窗体

我正在开发具有两个 Windows 窗体的 C# 应用程序。两种形式都是全屏的,一种形式位于另一种形式的顶部作为透明覆盖。底部表单包含一个网络浏览器(也是全屏浏览器)。我正在跟踪透明覆盖表单上的触摸输入,以便在屏幕上捕获手势并绘制按钮和其他控件。我需要做的是将覆盖表单在其 WndProc 函数中获取的所有 Windows 消息发送到下面的表单(或表单中的 Web 浏览器控件,因为基本上所有较低的表单都用于包含)。

基本上我只需要处理叠加层上的手势,所有鼠标消息仍需要传输到 Web 浏览器以提供某些功能。

鉴于来自叠加层的消息,我尝试了仅调用较低形式的 WndProc 方法的天真方法。(同样,我尝试将其进一步传递给浏览器控制窗口的 WndProc)。这些方法都不起作用。我还尝试在尝试此操作时将 Message 对象的 HWnd 参数简单地交换为较低表单/浏览器的句柄,但这也没有奏效。

那么,是否有人能够想出更多尝试的方法,或者可能是在表单之间传递 Windows 消息的正确方法?

谢谢,亚历克斯

0 投票
1 回答
1804 浏览

windows - DefWindowProc 处理哪些消息?

是否有任何文档由 DefWindowProc 处理哪些消息,以及如何处理?

我最近偶然发现 WM_SETFONT/WM_GETFONT 没有被处理,我不确定我的代码是否有错误,或者这是预期的行为,所以我尝试了以下 WinMain:


0 投票
2 回答
722 浏览

multithreading - Delphi 6:在非 VCL 线程上触发的断点停止主线程重绘

我有一个多线程的 Delphi 6 Pro 应用程序,我目前正在大量工作。如果我在主线程(VCL 线程)上下文中运行的任何代码上设置断点,我没有任何问题。但是,如果在我的其他线程之一中的任何代码上触发了断点,则在我从断点继续应用程序之后,对主线程(包括主窗体)上的 VCL 组件的所有重绘都不会再发生。应用程序没有死,因为其他后台代码一直在运行,只是主线程。就好像 Windows 消息调度程序已损坏或处于休眠状态。

注意,在这个应用程序中,我通过主窗体上的 allocateHwnd() 分配了我自己的 WndProc(),因为我需要捕获某些已注册的消息。我从那个 WndProc() 发送我处理的任何自定义消息,如果我的代码没有处理当前消息,我通过调用主窗体的继承 WndProc() 来传递消息。如果我确实处理了当前消息,我只需从 WndProc() 返回并将 Msg.Result 设置为 1,以告诉调度程序该消息已被处理。我不能简单地覆盖 TForm WndProc() 而不是分配我自己的 WndProc() 因为由于某种原因 Delphi VCL 不通过使用 Windows API RegisterWindowMessage() 调用实例化的注册消息。

有没有人在类似的情况下遇到过这种情况,如果有,你做了什么来解决它?

——罗舍尔

0 投票
1 回答
350 浏览

c# - 为什么在 ButtonBase WndProc 方法中检查所有事件,.Net WinForms

我正在为从 Control 继承而不是 ButtonBase 的按钮创建一个基类。
我正在使用反射器查看 ButtonBase 以确保我不会忽略任何重要的内容,并且我对 WndProc 方法的内容感到困惑。
那里检查按钮向上、单击和捕获更改等内容,据我所知,这些都在类的相关“On”方法中处理。

有谁知道他们为什么在里面?