<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>SendLevel</h1> <p>控制热键和热字串是否忽略模拟的键盘和鼠标事件.</p> <pre class="Syntax"><span class="func">SendLevel</span> Level</pre> <h2 id="Parameters">参数</h2> <dl> <dt>Level</dt> <dd> <p>类型: <a href="../Concepts.htm#numbers">整数</a></p> <p>介于 0 和 100 之间的整数.</p> </dd> </dl> <h2 id="Return_Value">返回值</h2> <p>整数: <a href="../Concepts.htm#numbers">整数</a></p> <p>函数返回以前的设置.</p> <h2 id="Remarks">备注</h2> <p>默认情况下, <a href="_UseHook.htm">钩子</a><a href="../Hotkeys.htm">热键</a>和<a href="../Hotstrings.htm">热字串</a>会忽略由任何 AutoHotkey 脚本生成的键盘和鼠标事件. 在某些情况下, 你可能希望覆盖这种行为; 例如, 可使用重映射键来触发其他热键. SendLevel 和 <a href="_InputLevel.htm">#InputLevel</a> 提供了实现此目的的方法.</p> <p>SendLevel 设置由当前<a href="../misc/Threads.htm">脚本线程</a>生成的事件级别, 而 #InputLevel 设置在它下面的所有热键或热字串的级别. 要让脚本生成的事件触发钩子热键或热字串, 则此事件的发送级别必须高于热键或热字串的输入级别.</p> <p>兼容性:</p> <ul> <li><a href="Send.htm#SendPlayDetail">SendPlay</a> 不受 SendLevel 影响.</li> <li><a href="Send.htm#SendInputDetail">SendInput</a> 会受 SendLevel 影响, 但在 SendInput 执行时其所在脚本中的钩子热键无法激活, 因为它会让钩子暂时失效. 但是, 当 Send 或 SendInput <a href="Send.htm#SendInputUnavail">恢复为 SendEvent</a>, 它可以激活脚本自己的热键.</li> <li>使用 <a href="ListHotkeys.htm">"reg"</a> 方法实现的<a href="../Hotkeys.htm">热键</a>不能区分物理和模拟输入, 所以不会受 SendLevel 的影响. 然而, 级别高于 0 的热键总是使用了键盘或鼠标钩子.</li> <li><a href="../Hotstrings.htm">热字串</a>仅使用 #InputLevel 来确定最后一个键入的字符是否应该触发热字串. 例如, 无论 #InputLevel 设置如何, 热字串 <code>::btw::</code> 都可以通过级别为 1 或更高级别的发送 <code>btw</code> 和物理输入<a href="../Hotstrings.htm#EndChars">结束字符</a>来触发. 这是因为热字串识别的工作原理是将除 0 级以外的所有级别的输入收集到单个全局缓冲区中.</li> <li>自动替换型<a href="../Hotstrings.htm">热字串</a>生成事件的级别始终为 0, 因为通常在替换文本时不希望触发其他热字串或热键. 要解决此问题, 请使用非自动替换型热字串和 SendEvent 函数.</li> <li>即使使用了 SendLevel, 通过 <a href="Send.htm#asc">ASC (Alt+nnnnn)</a> 方法发送字符也不能触发热字串.</li> <li>通过 SendEvent 的 <a href="Send.htm#SendText">{Text}</a> 模式, <a href="Send.htm#Unicode">{U+nnnn}</a> 或 <a href="Send.htm#characters">Unicode fallback method</a> 发送字符可以触发热字串.</li> </ul> <p>内置变量 <strong>A_SendLevel</strong> 包含了当前设置.</p> <p>每个新启动的热键或热字串<a href="../misc/Threads.htm">线程</a>都以一个等于热键或热字串<a href="_InputLevel.htm">输入级别</a>的发送级别开始. 每个新启动的其他线程(例如, <a href="Menu.htm">自定义菜单项</a>或<a href="SetTimer.htm">计时</a>子程序) 会以其默认设置开始, 一般为 0, 不过可以在<a href="../Scripts.htm#auto">脚本启动</a>中使用此函数进行改变.</p> <p>如果在<a href="../Scripts.htm#auto">脚本启动</a>中使用 SendLevel, 它还会影响<a href="../misc/Remap.htm">键盘和鼠标的重映射</a>.</p> <h2 id="Related">相关</h2> <p><a href="_InputLevel.htm">#InputLevel</a>, <a href="Send.htm">Send</a>, <a href="Click.htm">Click</a>, <a href="MouseClick.htm">MouseClick</a>, <a href="MouseClickDrag.htm">MouseClickDrag</a></p> <h2 id="Examples">示例</h2> <div class="ex" id="ExBasic"> <p><a class="ex_number" href="#ExBasic"></a> SendLevel 允许触发另一个脚本的热键和热字符串, 而通常情况下是不会的.</p> <pre> SendLevel 1 SendEvent "btw{Space}" <em>; 生成 "by the way ".</em> <em>; 这可以在单独的脚本中定义:</em> ::btw::by the way </pre> </div> <a href="https://dftg.net">dftg</a></body> </html>