<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>AHK on 第七曜变异点</title><link>https://86c9071e.7luminaries.pages.dev/tags/ahk/</link><description>Recent content in AHK on 第七曜变异点</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Mon, 10 Nov 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://86c9071e.7luminaries.pages.dev/tags/ahk/index.xml" rel="self" type="application/rss+xml"/><item><title>Using AutoHotkey to Quickly Switch Between Multiple Input Languages</title><link>https://86c9071e.7luminaries.pages.dev/p/using-autohotkey-to-quickly-switch-between-multiple-input-languages/</link><pubDate>Mon, 10 Nov 2025 00:00:00 +0000</pubDate><guid>https://86c9071e.7luminaries.pages.dev/p/using-autohotkey-to-quickly-switch-between-multiple-input-languages/</guid><description>&lt;blockquote>
&lt;p>提示: 本文英文译文由 LLM（大语言模型）辅助翻译，可能存在不准确之处，请以中文原文为准。&lt;br>
Note: The English translation in this post was assisted by an LLM and may contain inaccuracies.&lt;br>&lt;/p>&lt;/blockquote>
&lt;hr>
&lt;h2 id="why-abandon-windows-native-switching">Why Abandon Windows&amp;rsquo; Native Switching?
&lt;/h2>&lt;p>Windows&amp;rsquo; default input language switching hotkeys become painfully inefficient once you have more than two languages. I regularly type in three languages, and using the default shortcut to cycle through them was frustrating. So I used AutoHotkey to repurpose a few spare keys on my keyboard to switch directly to a specific input language/keyboard layout. This turns sequential (cycling) switching into deterministic switching: press one key and land on the language you want.&lt;/p>
&lt;h2 id="my-personal-solution">My Personal Solution
&lt;/h2>&lt;p>My keyboard is a 108-key model with four built-in multimedia keys. I rarely use these keys, so I chose them as my language switching keys. With AutoHotkey, I mapped each key to switch directly to a specific input language/keyboard layout.&lt;/p>
&lt;p>My mappings are as follows:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Key&lt;/th>
&lt;th>Switch to&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>Mute&lt;/code>&lt;/td>
&lt;td>&lt;code>English Input&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Volume -&lt;/code>&lt;/td>
&lt;td>&lt;code>Chinese Input&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>Volume +&lt;/code>&lt;/td>
&lt;td>&lt;code>Japanese Input&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="implementation-logic">Implementation Logic
&lt;/h3>&lt;p>I use the &lt;code>PostMessage&lt;/code> function to send a system input-language change request to the active window. The target language&amp;rsquo;s LCID is included in the parameters, which is what makes the switch deterministic.&lt;/p>
&lt;p>The specific code is as follows:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-ahk" data-lang="ahk">&lt;span class="line">&lt;span class="cl">&lt;span class="n">#Requires&lt;/span> &lt;span class="n">AutoHotkey&lt;/span> &lt;span class="n">v2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="c1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">; Force only one script instance to run.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">; If the script is already running, launching it again will automatically replace the old instance.
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">; This is convenient when you tweak the script and want the changes to take effect immediately.&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="nb">#SingleInstance&lt;/span> &lt;span class="n">Force&lt;/span>&lt;span class="c1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">; --- Key Mapping Section ---
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">; Logic: Intercept media keys -&amp;gt; Call switch function -&amp;gt; Pass the corresponding language ID (LCID)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">; Note: The original media functions of these keys (mute / volume control) will be completely overridden.&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">Volume_Mute::&lt;/span>&lt;span class="n">SwitchToLang&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mh">0x0409&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="c1"> ; 0x0409 = English (United States)&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="nl">Volume_Down::&lt;/span>&lt;span class="n">SwitchToLang&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mh">0x0804&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="c1"> ; 0x0804 = Chinese (Mainland China)&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="nl">Volume_Up::&lt;/span>&lt;span class="n">SwitchToLang&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mh">0x0411&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="c1"> ; 0x0411 = Japanese
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">; --- Core Function ---&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="n">SwitchToLang&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">LangID&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="c1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"> ; PostMessage: Places a message into the target window&amp;#39;s message queue (returns immediately, fast)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"> ; Parameter details:
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"> ; 1. 0x50 : Message code WM_INPUTLANGCHANGEREQUEST (request an input language change)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"> ; 2. 0 : wParam (system flag). 0 means &amp;#34;use default behavior&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"> ; 3. LangID : lParam (language identifier), e.g., 0x0409 passed in above
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"> ; 4. (empty): Control (control name). Left empty since we send to the whole window
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"> ; 5. &amp;#34;A&amp;#34; : The currently active window&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">PostMessage&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mh">0x50&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">LangID&lt;/span>&lt;span class="p">,,&lt;/span> &lt;span class="s">&amp;#34;A&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="common-lcid-reference">Common LCID Reference
&lt;/h3>&lt;p>You can replace the LCIDs according to your needs.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Language/Layout&lt;/th>
&lt;th>LCID&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Chinese (Simplified)&lt;/td>
&lt;td>&lt;code>0x0804&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>English (United States)&lt;/td>
&lt;td>&lt;code>0x0409&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Japanese&lt;/td>
&lt;td>&lt;code>0x0411&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Korean&lt;/td>
&lt;td>&lt;code>0x0412&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Chinese (Traditional - Taiwan)&lt;/td>
&lt;td>&lt;code>0x0404&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Chinese (Traditional - Hong Kong)&lt;/td>
&lt;td>&lt;code>0x0C04&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="scope-of-application--limitations">Scope of Application &amp;amp; Limitations
&lt;/h3>&lt;p>This method switches the &lt;strong>input language / keyboard layout&lt;/strong>. It works best when each language maps to a single input method:&lt;/p>
&lt;ul>
&lt;li>✅ Suitable: One language → one IME/layout (e.g., Chinese only uses Microsoft Pinyin, Japanese only uses Microsoft Japanese, English only uses the US keyboard)&lt;/li>
&lt;li>❌ Not ideal: One language → multiple IMEs (e.g., Chinese has both Rime and Microsoft Pinyin). If you want to switch to a specific IME within the same language, this approach is usually not enough.&lt;/li>
&lt;/ul>
&lt;p>In the second case, you typically need to use &lt;strong>HKL&lt;/strong> to target a specific input method. I haven&amp;rsquo;t needed that, so I won&amp;rsquo;t expand on it here.&lt;/p>
&lt;h2 id="how-to-find-key-names-to-customize-your-mappings">How to Find Key Names to Customize Your Mappings?
&lt;/h2>&lt;p>Use AutoHotkey&amp;rsquo;s built-in &lt;strong>Key History and Script Info&lt;/strong> window.&lt;/p>
&lt;ol>
&lt;li>First run the script above (or any AutoHotkey script)&lt;/li>
&lt;li>Find the AutoHotkey icon in the taskbar&lt;/li>
&lt;li>Right-click and select &lt;code>Open&lt;/code> or &lt;code>Help&lt;/code> (may vary by version)&lt;/li>
&lt;li>In the window that opens, click &lt;code>View&lt;/code> at the top&lt;/li>
&lt;li>Select &lt;code>Key history and script info&lt;/code>&lt;/li>
&lt;li>Press the key you want to bind, then refresh the page (default: F5). You&amp;rsquo;ll see the corresponding name in the log.&lt;/li>
&lt;/ol>
&lt;p>Once you know the key name, you can modify the code above (like this):&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-ahk" data-lang="ahk">&lt;span class="line">&lt;span class="cl">&lt;span class="nl">YourKeyName::&lt;/span>&lt;span class="n">SwitchToLang&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mh">0x0409&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="how-to-set-up-auto-start-on-boot">How to Set Up Auto-Start on Boot?
&lt;/h2>&lt;p>There are two methods below: placing it in the Startup folder, or using Task Scheduler.&lt;/p>
&lt;h3 id="method-1-place-in-the-startup-folder">Method 1: Place in the Startup Folder
&lt;/h3>&lt;ol>
&lt;li>Press &lt;code>Win + R&lt;/code>&lt;/li>
&lt;li>Enter &lt;code>shell:startup&lt;/code>&lt;/li>
&lt;li>Drop a shortcut to your &lt;code>.ahk&lt;/code> script into that folder&lt;/li>
&lt;/ol>
&lt;p>This method is very simple. However, in some apps/windows, administrator privileges may be required for the script to work.&lt;/p>
&lt;h3 id="method-2-task-scheduler">Method 2: Task Scheduler
&lt;/h3>&lt;p>If you find that some apps/windows can&amp;rsquo;t use this script, you may need to run the AutoHotkey script with administrator privileges.&lt;/p>
&lt;p>General approach:&lt;/p>
&lt;ol>
&lt;li>Use Windows search to find &lt;strong>Task Scheduler&lt;/strong>, then open it&lt;/li>
&lt;li>Select &lt;strong>Create Task&lt;/strong> (not &lt;strong>Create Basic Task&lt;/strong>)&lt;/li>
&lt;li>Name it whatever you want&lt;/li>
&lt;li>In the &lt;strong>General&lt;/strong> tab → &lt;strong>Security options&lt;/strong>, check &lt;strong>Run only when user is logged on&lt;/strong>, and check &lt;strong>Run with highest privileges&lt;/strong>&lt;/li>
&lt;li>Switch to the &lt;strong>Actions&lt;/strong> tab, click &lt;strong>New&lt;/strong>, and set the program/script to your &lt;code>.ahk&lt;/code> file path&lt;/li>
&lt;/ol>
&lt;blockquote>
&lt;p>&lt;strong>Pro tip:&lt;/strong> There&amp;rsquo;s a &lt;strong>Hidden&lt;/strong> option in the &lt;strong>General&lt;/strong> tab. If you check it, Task Scheduler will start the task without popping up a UAC confirmation window.&lt;/p>&lt;/blockquote>
&lt;h2 id="potential-risks">Potential Risks
&lt;/h2>&lt;p>Tools like AutoHotkey may be flagged as cheating tools by anti-cheat systems in certain games. If your game uses aggressive anti-cheat, it&amp;rsquo;s safer not to use AutoHotkey scripts—or exit AutoHotkey while playing.&lt;/p></description></item><item><title>使用 AHK 来实现多语言输入法快捷切换</title><link>https://86c9071e.7luminaries.pages.dev/p/%E4%BD%BF%E7%94%A8-ahk-%E6%9D%A5%E5%AE%9E%E7%8E%B0%E5%A4%9A%E8%AF%AD%E8%A8%80%E8%BE%93%E5%85%A5%E6%B3%95%E5%BF%AB%E6%8D%B7%E5%88%87%E6%8D%A2/</link><pubDate>Wed, 05 Nov 2025 00:00:00 +0000</pubDate><guid>https://86c9071e.7luminaries.pages.dev/p/%E4%BD%BF%E7%94%A8-ahk-%E6%9D%A5%E5%AE%9E%E7%8E%B0%E5%A4%9A%E8%AF%AD%E8%A8%80%E8%BE%93%E5%85%A5%E6%B3%95%E5%BF%AB%E6%8D%B7%E5%88%87%E6%8D%A2/</guid><description>&lt;h2 id="为何抛弃-windows-原生切换">为何抛弃 Windows 原生切换？
&lt;/h2>&lt;p>Windows 默认的输入法切换键位在超过两种语言时，切换效率会变得极其低下。俺是有三种语言的输入需求，使用默认的切换键位痛苦不已。便借助 AutoHotKey 实现了使用键盘上多余的键位来进行输入法切换的功能。从“轮询切换”变为“确定性切换”。&lt;/p>
&lt;h2 id="个人的解决方法">个人的解决方法
&lt;/h2>&lt;p>俺的键盘是 108 键的，它自带了 4 个多媒体按键。这几个按键对于我来说是低频按键，因此我选择它们作为我的语言切换按键。俺使用了 AutoHotKey 将这几个键位映射为了不同输入法的切换键。&lt;/p>
&lt;p>俺的映射如下：&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>按键&lt;/th>
&lt;th>切换到&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>静音&lt;/code>&lt;/td>
&lt;td>&lt;code>英文输入&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>音量 -&lt;/code>&lt;/td>
&lt;td>&lt;code>中文输入&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>音量 +&lt;/code>&lt;/td>
&lt;td>&lt;code>日语输入&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="实现逻辑">实现逻辑
&lt;/h3>&lt;p>使用 &lt;code>PostMessage&lt;/code> 函数，直接伪装成系统，向窗口发送一条切换输入语言的消息。并在参数里面附带目标语言的 LCID。这样就可以做到确定性的切换。&lt;/p>
&lt;p>具体代码如下。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-ahk" data-lang="ahk">&lt;span class="line">&lt;span class="cl">&lt;span class="n">#Requires&lt;/span> &lt;span class="n">AutoHotkey&lt;/span> &lt;span class="n">v2&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="c1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">; 强制只运行一个脚本实例。
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">; 如果脚本已经在运行，再次启动会自动替换旧实例，方便修改代码后直接生效。&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="nb">#SingleInstance&lt;/span> &lt;span class="n">Force&lt;/span>&lt;span class="c1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">; --- 键位映射区域 ---
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">; 逻辑：拦截媒体键 -&amp;gt; 调用切换函数 -&amp;gt; 传入对应的语言 ID (LCID)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">; 注意：这些键的原始媒体功能（静音/调节音量）将被完全覆盖。&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nl">Volume_Mute::&lt;/span>&lt;span class="n">SwitchToLang&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mh">0x0409&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="c1"> ; 0x0409 = 英语 (美国)&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="nl">Volume_Down::&lt;/span>&lt;span class="n">SwitchToLang&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mh">0x0804&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="c1"> ; 0x0804 = 中文 (中国大陆)&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="nl">Volume_Up::&lt;/span>&lt;span class="n">SwitchToLang&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mh">0x0411&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="c1"> ; 0x0411 = 日语
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">; --- 核心功能函数 ---&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="n">SwitchToLang&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">LangID&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>&lt;span class="c1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"> ; PostMessage: 将消息放入目标窗口的消息队列中（不等待结果直接返回，速度快）
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"> ; 参数详解：
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"> ; 1. 0x50 : 消息代码 WM_INPUTLANGCHANGEREQUEST (请求切换输入语言)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"> ; 2. 0 : wParam (系统标志位)，0 表示使用默认行为
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"> ; 3. LangID : lParam (语言标识符)，即上面传入的 0x0409 等
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"> ; 4. (空) : Control (控件名)，此处留空因为是对整个窗口发送
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"> ; 5. &amp;#34;A&amp;#34; : 当前活动窗口&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">PostMessage&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mh">0x50&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">LangID&lt;/span>&lt;span class="p">,,&lt;/span> &lt;span class="s">&amp;#34;A&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="err">&lt;/span>&lt;span class="p">}&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="常用的-lcid-参考如下">常用的 LCID 参考如下
&lt;/h3>&lt;p>可以根据自己的需求替换其中的 LCID。&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>语言/布局&lt;/th>
&lt;th>LCID&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>中文 (简体)&lt;/td>
&lt;td>&lt;code>0x0804&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>英文 (美国)&lt;/td>
&lt;td>&lt;code>0x0409&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>日文&lt;/td>
&lt;td>&lt;code>0x0411&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>韩文&lt;/td>
&lt;td>&lt;code>0x0412&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>中文 (繁体 - 台湾)&lt;/td>
&lt;td>&lt;code>0x0404&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>中文 (繁体 - 香港)&lt;/td>
&lt;td>&lt;code>0x0C04&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="适用范围--局限">适用范围 &amp;amp; 局限
&lt;/h3>&lt;p>这个方法切的是“语言/键盘布局”，所以在下面这种情况下体验最好：&lt;/p>
&lt;ul>
&lt;li>✅ 适合：一个语言对应一个输入法的情况（例如：中文只有微软拼音、日语只有微软日语、英文只有美式键盘）&lt;/li>
&lt;li>❌ 不太适合：同一种语言下有多个输入法的情况（例如：中文有小狼毫、微软拼音两种输入法。然后你想指定切换到小狼毫的话，这个方法就不太适合）&lt;/li>
&lt;/ul>
&lt;p>如果是上面第二种情况的话，通常需要用 HKL 去定位到具体的输入法。我没有遇到这个需求，所以也不展开讲了。&lt;/p>
&lt;h2 id="如何找按键名称方便自己该映射">如何找“按键名称”方便自己该映射？
&lt;/h2>&lt;p>用 AHK 自带的 Key history and script info。&lt;/p>
&lt;ol>
&lt;li>先运行上面的脚本（或者随便一个 AHK 的脚本）&lt;/li>
&lt;li>在任务栏中找到 AHK 图标&lt;/li>
&lt;li>右键选择 &lt;code>Open&lt;/code> 或 &lt;code>Help&lt;/code>（不同版本可能有差异）&lt;/li>
&lt;li>然后在打开的界面顶部选择 &lt;code>View&lt;/code>&lt;/li>
&lt;li>选择其中的 &lt;code>Key history and script info&lt;/code>&lt;/li>
&lt;li>然后按下你想绑定的按键，再刷新页面（默认是 F5）。就能看到界面日志里面对应的名称。&lt;/li>
&lt;/ol>
&lt;p>知道名称之后，你就可以修改上面的代码（像下面这样）：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-ahk" data-lang="ahk">&lt;span class="line">&lt;span class="cl">&lt;span class="nl">YourKeyName::&lt;/span>&lt;span class="n">SwitchToLang&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mh">0x0409&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="err">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="如何设置开机自启动">如何设置开机自启动？
&lt;/h2>&lt;p>下面有两种方式。一种是直接放入启动文件夹。另一种是利用任务计划程序。&lt;/p>
&lt;h3 id="方式-1放入启动文件夹">方式 1：放入启动文件夹
&lt;/h3>&lt;ol>
&lt;li>&lt;code>Win + R&lt;/code>&lt;/li>
&lt;li>弹出的窗口输入 &lt;code>shell:startup&lt;/code>&lt;/li>
&lt;li>把 &lt;code>.ahk&lt;/code> 脚本快捷方式丢进去就行&lt;/li>
&lt;/ol>
&lt;p>这个方法非常简单。但在有些程序的窗口下，可能需要管理员权限才能够使用 AHK 脚本。&lt;/p>
&lt;h3 id="方式-2任务计划程序">方式 2：任务计划程序
&lt;/h3>&lt;p>如果你发现有些软件或窗口无法使用这个脚本，可能需要以管理员权限运行 AHK 脚本。&lt;/p>
&lt;p>大致思路：&lt;/p>
&lt;ol>
&lt;li>直接用 Windows 自带的搜索，搜「任务计划程序」。然后打开它&lt;/li>
&lt;li>选择 &lt;strong>创建任务&lt;/strong>，不要选择 &lt;strong>创建基本任务&lt;/strong>&lt;/li>
&lt;li>名称随便取&lt;/li>
&lt;li>在「常规」页中找到「安全选项」，勾选其中的「只在用户登录时运行」，勾选「使用最高权限运行」&lt;/li>
&lt;li>将界面切到「操作」页，选择「新建」，将你的 AHK 脚本路径填进去&lt;/li>
&lt;/ol>
&lt;blockquote>
&lt;p>&lt;strong>PS：&lt;/strong>「常规」页中有一个「隐藏」的选项。如果勾选这个选项的话，启动是不会弹那个需要手动确认管理员权限的窗口。&lt;/p>&lt;/blockquote>
&lt;h2 id="可能的风险">可能的风险
&lt;/h2>&lt;p>AHK 这类工具在某些游戏环境里可能会被反作弊系统判定为作弊程序。如果你游玩的游戏反作弊比较激进，建议不要使用 AHK 脚本或在游戏时退出 AHK 程序。&lt;/p></description></item></channel></rss>