Apple Wireless Keyboard Helperを使ってApple Wireless KeyboardのキーバインドをWindows向けに書き変える
Apple Wireless Keyboard(JIS版)はMAC向けのキー配置なわけですが、以下のような違いがあるようです。
Apple Wireless Keyboard | 一般的なWindows Keyboard |
---|---|
commandキー | windowsキー |
commandキー+スペースキー | 半角・全角漢字キー |
deleteキー | backspaceキー |
これに加えて、
- ctrlキーとcapslockキーの位置が逆
- fnキーが使えない
といった違いがあり、前者はWindows環境であえてctrlキーとcapslockキーのキーバインドを逆にして使っていた私としては何も問題にはならなかったのですが、後者は大きな問題でした。しかしながら、既にこの問題に取り組んでくれた方がいるようで、WindowsでApple Wireless Keyboardのfnキーを使えるようにするApple Wireless Keyboard Helperというすばらしいツールがあるようです。これを適用することで、
Apple Wireless Keyboard | 一般的なWindows Keyboard |
---|---|
英数キー、かなキー | 半角・全角漢字キー |
fnキー+deleteキー | deleteキー |
fnキー+F7/F8/F9 | iTunesを操作 |
fnキー+F10/F11/F12 | 音量を調節 |
ejectキー | ディスク取出 |
のようにfnキーを活用できるようになりました。なお、このとき、Apple Wireless Keyboard Helperで使用するpythonスクリプトは以下のようになります。
import clr from System import * from System.Diagnostics import Process from System.Runtime.InteropServices import Marshal from System.Windows.Forms import * from Misuzilla.Applications.AppleWirelessKeyboardHelper import Program, Util # Master Volume Control clr.AddReferenceByPartialName("MasterVolumeControlLibrary") from MasterVolumeControlLibrary import MasterVolumeControl volControl = MasterVolumeControl.GetControl() def OnLoad(sender, e): pass def OnUnload(sender, e): volControl.Dispose() Program.Load += OnLoad Program.Unload += OnUnload """ Power Button """ def OnDown_Power(): # Lock desktop Process.Start("rundll32.exe", "user32.dll,LockWorkStation") """ Eject Button """ def OnDown_Eject(): Util.Eject("E"); """ Alpha Numeric(eisu) (JIS only) """ def OnUp_JISAlphaNumeric(): Util.SendInput(Keys.HanjaMode) # IME on/off """ Kana Key (JIS only) """ def OnUp_JISKana(): Util.SendInput(Keys.IMEConvert) # IME Convert """ Fn + F1 ... F12 (OnDown_Fn_[KeyName]) """ def OnDown_Fn_F1(): pass # MessageBox.Show('Fn+F1') # System.Windows.Forms.MessageBox def OnDown_Fn_F2(): pass # Program.ShowBalloonTip('Fn+F2') # ShowBalloonTip(str) or ShowBalloonTip(str, System.Windows.Forms.ToolTipIcon) def OnDown_Fn_F3(): if Environment.OSVersion.Version.Major >= 6: Process.Start("rundll32.exe", "DwmApi #105") # 3D Filp else: toggleDesktop() # Show Desktops def OnDown_Fn_F4(): pass # Util.SendInput(Keys.PrintScreen) # System.Windows.Forms.Keys def OnDown_Fn_F5(): pass def OnDown_Fn_F6(): pass def OnDown_Fn_F7(): # iTunes / Previous Track execiTunes(lambda it: it.PreviousTrack()) def OnDown_Fn_F8(): # iTunes / PlayPause execiTunes(lambda it: it.PlayPause()) def OnDown_Fn_F9(): # iTunes / PlayPause execiTunes(lambda it: it.NextTrack()) def OnDown_Fn_F10(): volControl.Mute = not volControl.Mute def OnDown_Fn_F11(): volControl.VolumeDown() def OnDown_Fn_F12(): volControl.VolumeUp() """ Fn+BackSpace -> Delete """ def OnDown_Fn_Back(): Util.SendInput(Keys.Delete) """ Fn+Delete -> VolumeUp (for F12 replaced by Delete) """ def OnDown_Fn_Delete(): volControl.VolumeUp() """ Fn+Up/Down -> PageUp/PageDown """ def OnDown_Fn_Up(): Util.SendInput(Keys.PageUp) def OnDown_Fn_Down(): Util.SendInput(Keys.PageDown) """ Fn+Left/Right -> Home/End """ def OnDown_Fn_Left(): Util.SendInput(Keys.Home) def OnDown_Fn_Right(): Util.SendInput(Keys.End) # ---- # Create COM Object def createObject(progID): t = Type.GetTypeFromProgID(progID) return Activator.CreateInstance(t) # iTunes Helper functions def execiTunes(f): it = createObject('iTunes.Application') f(it) Marshal.ReleaseComObject(it) # Show desktop def toggleDesktop(): shell = createObject('Shell.Application') shell.ToggleDesktop() Marshal.ReleaseComObject(shell)