<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-1632085368384154" crossorigin="anonymous"></script><script src="https://autohotkey.top/gtag.js"></script></head> <body> <h1>OnNotify</h1> <p>注册一个函数或方法, 当通过 <a href="https://learn.microsoft.com/windows/win32/controls/wm-notify">WM_NOTIFY</a> 消息接收到控制通知时调用.</p> <pre class="Syntax"><a href="GuiControl.htm">GuiCtrl</a>.<span class="func">OnNotify</span>(NotifyCode, Callback <span class="optional">, AddRemove</span>)</pre> <h2 id="Parameters">参数</h2> <dl> <dt>NotifyCode</dt> <dd> <p>类型: <a href="../Concepts.htm#numbers">整数</a></p> <p>要监控的控件定义的通知代码.</p> </dd> <dt>Callback</dt> <dd> <p>类型: <a href="../Concepts.htm#strings">字符串</a>或<a href="../misc/Functor.htm">函数对象</a></p> <p>事件发生时要调用的函数, 方法或对象.</p> <p>如果 GUI 有事件接收器(即, 如果指定了 <a href="Gui.htm#Call">Gui()</a> 的 <em>EventObj</em> 参数), 那么这个参数可能是属于事件接收器的方法的名称.</p> <p>否则, 这个参数必须是一个<a href="../misc/Functor.htm">函数对象</a>.</p> </dd> <dt>AddRemove</dt> <dd> <p>类型: <a href="../Concepts.htm#numbers">整数</a></p> <p>如果省略, 则默认为 1(在任何先前注册的回调之后调用回调). 否则, 指定下列数字之一:</p> <ul> <li>1 = 在任何先前注册的回调之后调用回调.</li> <li>-1 = 在任何先前注册的回调之前调用回调.</li> <li>0 = 不调用该回调.</li> </ul> </dd> </dl> <h2 id="WM_NOTIFY">WM_NOTIFY</h2> <p>每当发生要监控事件或控件需要从程序中获取信息时, 某些类型的控件就会发送一条 <a href="https://learn.microsoft.com/windows/win32/controls/wm-notify">WM_NOTIFY</a> 消息. 该消息的 <em>lParam</em> 参数包含一个指向包含通知信息的结构的指针. 结构的类型取决于通知代码和触发通知的控件类型, 但总是基于 <a href="https://learn.microsoft.com/windows/win32/api/richedit/ns-richedit-nmhdr">NMHDR</a>.</p> <p>要确定哪些通知是可用的(如果有的话), 它们提供的结构类型以及它们如何解释返回值, 请参考控件的文档. <a href="https://learn.microsoft.com/windows/win32/controls/individual-control-info">Control Library (Microsoft Docs)</a> 包含了每个 Windows 常用控件的链接. 通知代码(编号) 可以在 Windows SDK 中找到, 或者在互联网上搜索.</p> <p>AutoHotkey 使用 <em>idFrom</em> 和 <em>hwndFrom</em> 字段来识别是哪个控件发送的通知, 以便将其派遣到相应的对象. <em>code</em> 字段包含通知代码. 由于这些字段必须与用于注册回调的 <em>GuiControl</em> 和 <em>NotifyCode</em> 相匹配, 所以它们对脚本很少有用.</p> <h2 id="Callback_Parameters">Callback 参数</h2> <p><a href="GuiOnEvent.htm#Callback_Parameters">OnEvent</a> 中关于 <code>this</code> 和绑定函数的说明, 也适用于 OnNotify.</p> <p>回调接收两个参数:</p> <pre class="Syntax"><i>Callback</i>(GuiControl, lParam)</pre> <p>如上所述, <em>lParam</em> 是 <a href="https://learn.microsoft.com/windows/win32/api/richedit/ns-richedit-nmhdr">NMHDR</a> 导出的通知结构的地址. 它的确切类型取决于控件和通知代码的类型. 如果该结构包含了关于通知的附加信息, 回调可以用 <a href="../lib/NumGet.htm">NumGet</a> 和/或 <a href="../lib/StrGet.htm">StrGet</a> 检索它.</p> <h2 id="Callback_Return_Value">Callback 返回值</h2> <p>如果一个事件已经注册了多个回调, 回调可以返回一个非空值, 以防止任何剩余的回调被调用.</p> <p>根据通知的不同, 返回值可能有额外的意义. 例如, 如果回调返回 TRUE(1), ListView 通知 <a href="https://learn.microsoft.com/windows/win32/controls/lvn-beginlabeledit">LVN_BEGINLABELEDIT</a>(-175 或 -105) 会阻止用户编辑标签.</p> <h2 id="Related">相关</h2> <p><a href="GuiOnEvent.htm">OnEvent</a> 的说明也适用于 OnNotify: <a href="GuiOnEvent.htm#Threads">线程</a>, <a href="GuiOnEvent.htm#Destroying_the_GUI">销毁 GUI</a>.</p> <p><a href="GuiOnCommand.htm">OnCommand</a> 可以用于作为 WM_COMMAND 消息发送的通知.</p> <a href="https://dftg.net">dftg</a><!-- Cloudflare Pages Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "d5a9c4fcb9b6482fa53ce820d892f969"}'></script><!-- Cloudflare Pages Analytics --><script defer src="https://static.cloudflareinsights.com/beacon.min.js/vcd15cbe7772f49c399c6a5babf22c1241717689176015" integrity="sha512-ZpsOmlRQV6y907TI0dKBHq9Md29nnaEIPlkf84rnaERnq6zvWvPUqr2ft8M1aS28oN72PdrCzSjY4U6VaAw1EQ==" data-cf-beacon='{"rayId":"95b9a31829d336fb","version":"2025.6.2","r":1,"serverTiming":{"name":{"cfExtPri":true,"cfEdge":true,"cfOrigin":true,"cfL4":true,"cfSpeedBrain":true,"cfCacheStatus":true}},"token":"51750bb5dc4f40cc91a5ec55c63bbc01","b":1}' crossorigin="anonymous"></script> </body> </html>