Wordのキーバインド一覧を作る

Excelキーバインド一覧を調べる方法が分からなくて悔しかったので、RubyでWordのキーバインド一覧を作ってみました。

require 'excel_lib'
require 'pp'

class Word < Excel_Wrapper
  def initialize(visible=true)
    begin
      @raw_object = WIN32OLE.connect('Word.Application')
      @connected = true
    rescue
      @raw_object = WIN32OLE.new('Word.Application')
    end
    WIN32OLE.my_const_load(@raw_object, Word)
    @raw_object.visible = visible
    if block_given?
      yield self
      quit unless @connected
    end
  end
  def find_key(*a)
    findKey(buildKeyCode(*a.map {|k| Word.const_get(k)})) rescue nil
  end
  def keybindings
    keys = Word.constants.grep(/WdKey/i).sort
    ret = []
    keys.each do |k|
      0.upto(7) do |m|
        a = [k]
        a << 'WdKeyShift'   if (m & 1) > 0
        a << 'WdKeyControl' if (m & 2) > 0
        a << 'WdKeyAlt'     if (m & 4) > 0
        if (b = find_key(*a)) && !((c = b.command).empty?)
          ret << [b.keyString, c]
        end
      end
    end
    ret
  end
end

if $0 == __FILE__
  Word.new do |app|
    pp app.keybindings
  end
end

excel_libはhttp://www.tech-notes.dyndns.org/excel_lib/です。

実行結果です。

[["Ctrl+0", "OpenOrCloseUpPara"],
 ["Ctrl+1", "SpacePara1"],
 ["Alt+!", "ShowHeading1"],
 ["Alt+Ctrl+1", "ApplyHeading1"],
 ["Alt+Ctrl+!", "!"],
 ["Ctrl+2", "SpacePara2"],
 ["Alt+\"", "ShowHeading2"],
 ["Alt+Ctrl+2", "ApplyHeading2"],
 ["Ctrl+3", "LockFields"],
 ["Alt+#", "ShowHeading3"],
 ["Alt+Ctrl+3", "ApplyHeading3"],
 ["Ctrl+4", "UnlockFields"],
 ["Alt+$", "ShowHeading4"],
 ["Ctrl+5", "SpacePara15"],
 ["Alt+%", "ShowHeading5"],
 ["Ctrl+6", "UnlinkFields"],
 ["Alt+&", "ShowHeading6"],
 ["Alt+'", "ShowHeading7"],
 ["Alt+(", "ShowHeading8"],
 ["Alt+)", "ShowHeading9"],
 ["Ctrl+A", "EditSelectAll"],
 ["Ctrl+Shift+A", "AllCaps"],
 ["Alt+Shift+A", "ShowAllHeadings"],
 ["Ctrl+B", "Bold"],
 ["Ctrl+Shift+B", "Bold"],
 ["Ctrl+\\", "ToggleMasterSubdocs"],
 ["Ctrl+Backspace", "DeleteBackWord"],
 ["Alt+Backspace", "EditUndo"],
 ["Alt+Shift+Backspace", "EditRedo"],
 ["Ctrl+C", "EditCopy"],
 ["Ctrl+Shift+C", "CopyFormat"],
 ["Alt+Shift+C", "ClosePane"],
 ["Alt+Ctrl+C", "c"],
 ["Ctrl+]", "GrowFontOnePoint"],
 ["Ctrl+<", "ShrinkFont"],
 ["Ctrl+D", "FormatFont"],
 ["Ctrl+Shift+D", "DistributePara"],
 ["Alt+Shift+D", "InsertDateField"],
 ["Alt+Ctrl+D", "InsertEndnoteNow"],
 ["Del", "EditClear"],
 ["Shift+Del", "EditCut"],
 ["Ctrl+Del", "DeleteWord"],
 ["Ctrl+E", "CenterPara"],
 ["Ctrl+Shift+E", "ToolsRevisionMarksToggle"],
 ["Alt+Shift+E", "MailMergeEditDataSource"],
 ["Alt+Ctrl+E", "?"],
 ["End", "EndOfLine"],
 ["Shift+End", "EndOfLineExtend"],
 ["Ctrl+End", "EndOfDocument"],
 ["Ctrl+Shift+End", "EndOfDocExtend"],
 ["Alt+End", "EndOfRow"],
 ["Alt+Shift+End", "EndOfRow"],
 ["Ctrl++", "Superscript"],
 ["Alt++", "OutlineExpand"],
 ["Esc", "Cancel"],
 ["Ctrl+F", "EditFind"],
 ["Ctrl+Shift+F", "Font"],
 ["Alt+Shift+F", "InsertMergeField"],
 ["Alt+Ctrl+F", "InsertFootnoteNow"],
 ["F1", "Help"],
 ["Shift+F1", "HelpTool"],
 ["Alt+F1", "NextField"],
 ["Alt+Shift+F1", "PrevField"],
 ["Alt+Ctrl+F1", "MicrosoftSystemInfo"],
 ["F10", "MenuMode"],
 ["Ctrl+F10", "DocMaximize"],
 ["Ctrl+Shift+F10", "WW2_RulerMode"],
 ["Alt+F10", "AppMaximize"],
 ["F11", "NextField"],
 ["Shift+F11", "PrevField"],
 ["Ctrl+F11", "LockFields"],
 ["Ctrl+Shift+F11", "UnlockFields"],
 ["Alt+F11", "ViewVBCode"],
 ["Alt+Shift+F11", "MicrosoftScriptEditor"],
 ["F12", "FileSaveAs"],
 ["Shift+F12", "FileSave"],
 ["Ctrl+F12", "FileOpen"],
 ["Ctrl+Shift+F12", "FilePrint"],
 ["F2", "MoveText"],
 ["Shift+F2", "CopyText"],
 ["Ctrl+F2", "FilePrintPreview"],
 ["Alt+Shift+F2", "FileSave"],
 ["Alt+Ctrl+F2", "FileOpen"],
 ["F3", "InsertAutoText"],
 ["Shift+F3", "ChangeCase"],
 ["Ctrl+F3", "Spike"],
 ["Ctrl+Shift+F3", "InsertSpike"],
 ["Alt+F3", "CreateAutoText"],
 ["F4", "EditRedoOrRepeat"],
 ["Shift+F4", "RepeatFind"],
 ["Ctrl+F4", "DocClose"],
 ["Alt+F4", "FileCloseOrExit"],
 ["F5", "EditGoTo"],
 ["Shift+F5", "GoBack"],
 ["Ctrl+F5", "DocRestore"],
 ["Ctrl+Shift+F5", "EditBookmark"],
 ["Alt+F5", "AppRestore"],
 ["F6", "OtherPane"],
 ["Shift+F6", "OtherPane"],
 ["Ctrl+F6", "NextWindow"],
 ["Ctrl+Shift+F6", "PrevWindow"],
 ["Alt+F6", "NextWindow"],
 ["Alt+Shift+F6", "PrevWindow"],
 ["F7", "ToolsProofing"],
 ["Shift+F7", "ToolsThesaurus"],
 ["Ctrl+F7", "DocMove"],
 ["Ctrl+Shift+F7", "UpdateSource"],
 ["Alt+F7", "NextMisspelling"],
 ["Alt+Shift+F7", "ToolsDictionary"],
 ["F8", "ExtendSelection"],
 ["Shift+F8", "ShrinkSelection"],
 ["Ctrl+F8", "DocSize"],
 ["Ctrl+Shift+F8", "ColumnSelect"],
 ["Alt+F8", "ToolsMacro"],
 ["F9", "UpdateFields"],
 ["Shift+F9", "ToggleFieldDisplay"],
 ["Ctrl+F9", "InsertFieldChars"],
 ["Ctrl+Shift+F9", "UnlinkFields"],
 ["Alt+F9", "ViewFieldCodes"],
 ["Alt+Shift+F9", "DoFieldClick"],
 ["Ctrl+G", "EditGoTo"],
 ["Ctrl+H", "EditReplace"],
 ["Ctrl+Shift+H", "Hidden"],
 ["Home", "StartOfLine"],
 ["Shift+Home", "StartOfLineExtend"],
 ["Ctrl+Home", "StartOfDocument"],
 ["Ctrl+Shift+Home", "StartOfDocExtend"],
 ["Alt+Home", "StartOfRow"],
 ["Alt+Shift+Home", "StartOfRow"],
 ["Alt+Ctrl+Home", "BrowseSel"],
 ["Ctrl+-", "\037"],
 ["Ctrl+=", "Subscript"],
 ["Alt+=", "OutlineCollapse"],
 ["Alt+Ctrl+-", "ToolsCustomizeRemoveMenuShortcut"],
 ["Alt+Ctrl+=", "ToolsCustomizeAddMenuShortcut"],
 ["Ctrl+I", "Italic"],
 ["Ctrl+Shift+I", "Italic"],
 ["Alt+Ctrl+I", "FilePrintPreview"],
 ["Insert", "Overtype"],
 ["Shift+Insert", "EditPaste"],
 ["Ctrl+Insert", "EditCopy"],
 ["Ctrl+J", "JustifyPara"],
 ["Ctrl+K", "InsertHyperlink"],
 ["Ctrl+Shift+K", "SmallCaps"],
 ["Alt+Shift+K", "MailMergeCheck"],
 ["Alt+Ctrl+K", "FormatAutoFormat"],
 ["Ctrl+L", "LeftPara"],
 ["Ctrl+Shift+L", "ApplyListBullet"],
 ["Alt+Shift+L", "OutlineShowFirstLine"],
 ["Alt+Ctrl+L", "InsertListNumField"],
 ["Ctrl+M", "Indent"],
 ["Ctrl+Shift+M", "UnIndent"],
 ["Alt+Shift+M", "MailMergeToPrinter"],
 ["Alt+Ctrl+M", "InsertAnnotation"],
 ["Ctrl+N", "FileNew"],
 ["Ctrl+Shift+N", "DemoteToBodyText"],
 ["Alt+Shift+N", "MailMergeToDoc"],
 ["Alt+Ctrl+N", "ViewNormal"],
 ["Alt+Shift+Num +", "OutlineExpand"],
 ["Alt+Ctrl+Num +", "ToolsCustomizeKeyboardShortcut"],
 ["Ctrl+Num /", "EditSelectAll"],
 ["Alt+Num /", "TableSelectTable"],
 ["Alt+Shift+Num /", "NormalStyle"],
 ["Ctrl+Num -", "?"],
 ["Alt+Shift+Num -", "OutlineCollapse"],
 ["Alt+Ctrl+Num -", "?"],
 ["Ctrl+O", "FileOpen"],
 ["Alt+Shift+O", "MarkTableOfContentsEntry"],
 ["Alt+Ctrl+O", "ViewOutline"],
 ["Ctrl+[", "ShrinkFontOnePoint"],
 ["Ctrl+P", "FilePrint"],
 ["Ctrl+Shift+P", "FontSizeSelect"],
 ["Alt+Shift+P", "InsertPageField"],
 ["Alt+Ctrl+P", "ViewPage"],
 ["PageDown", "PageDown"],
 ["Shift+PageDown", "PageDownExtend"],
 ["Ctrl+PageDown", "BrowseNext"],
 ["Alt+PageDown", "EndOfColumn"],
 ["Alt+Shift+PageDown", "EndOfColumn"],
 ["Alt+Ctrl+PageDown", "EndOfWindow"],
 ["Alt+Ctrl+Shift+PageDown", "EndOfWindowExtend"],
 ["PageUp", "PageUp"],
 ["Shift+PageUp", "PageUpExtend"],
 ["Ctrl+PageUp", "BrowsePrev"],
 ["Alt+PageUp", "StartOfColumn"],
 ["Alt+Shift+PageUp", "StartOfColumn"],
 ["Alt+Ctrl+PageUp", "StartOfWindow"],
 ["Alt+Ctrl+Shift+PageUp", "StartOfWindowExtend"],
 ["Ctrl+>", "GrowFont"],
 ["Alt+Ctrl+.", "\201c"],
 ["Ctrl+Q", "ResetPara"],
 ["Ctrl+Shift+Q", "SymbolFont"],
 ["Ctrl+R", "RightPara"],
 ["Alt+Shift+R", "FormatHeaderFooterLink"],
 ["Alt+Ctrl+R", "R"],
 ["Shift+Enter", "\v"],
 ["Ctrl+Enter", "InsertPageBreak"],
 ["Ctrl+Shift+Enter", "InsertColumnBreak"],
 ["Alt+Enter", "EditRedoOrRepeat"],
 ["Ctrl+S", "FileSave"],
 ["Ctrl+Shift+S", "Style"],
 ["Alt+Ctrl+S", "DocSplit"],
 ["Ctrl+*", "ShowAll"],
 ["Alt+Ctrl+?", "?"],
 ["Ctrl+Space", "ResetChar"],
 ["Ctrl+Shift+Space", "?"],
 ["Ctrl+T", "IndentFirstChar"],
 ["Ctrl+Shift+T", "UnIndentFirstChar"],
 ["Alt+Shift+T", "InsertTimeField"],
 ["Alt+Ctrl+T", "?"],
 ["Ctrl+Tab", "\t"],
 ["Ctrl+U", "Underline"],
 ["Ctrl+Shift+U", "Underline"],
 ["Alt+Shift+U", "UpdateFields"],
 ["Alt+Ctrl+U", "TableUpdateAutoFormat"],
 ["Ctrl+V", "EditPaste"],
 ["Ctrl+Shift+V", "PasteFormat"],
 ["Alt+Ctrl+V", "InsertAutoText"],
 ["Ctrl+W", "DocClose"],
 ["Ctrl+Shift+W", "WordUnderline"],
 ["Ctrl+X", "EditCut"],
 ["Alt+Shift+X", "MarkIndexEntry"],
 ["Ctrl+Y", "EditRedoOrRepeat"],
 ["Alt+Ctrl+Y", "RepeatFind"],
 ["Ctrl+Z", "EditUndo"],
 ["Ctrl+Shift+Z", "ResetChar"],
 ["Alt+Ctrl+Z", "GoBack"]]