< Previous article Next article >
HOWTO: Switch keyboard and font together in Word 64-bit
NOTE: This archived documentation has not been updated recently and may contain information that is no longer relevant
In Keyman 9.0, the Keyman COM API is not available for 64-bit editions. Therefore, you cannot use Keyman's COM API to switch keyboards (see KMKB0033 for an example for 32-bit editions of Word). This KB shows an example of how to switch keyboards using Windows API calls.
To create these macros, you will need to do the following:
- In Word, press Alt + F11.
- In the Project pane, double-click Normal -> Microsoft Word Objects -> ThisDocument
- Paste the functions in and change the fonts and keyboard IDs as desired. You can add additional functions for the extra keyboards you want to activate. The ShowLoadedLayouts() function lists the IDs for all loaded keyboards, which you can then place into the other functions as you desire.
You could assign hotkeys or toolbar buttons to these routines. See the following links for more details:
The macros are presented below:
'
' Keyboard switching in Visual Basic for Applications x64
' -------------------------------------------------------
'
Private Declare PtrSafe Function ActivateKeyboardLayout Lib "user32" (ByVal HKL As LongPtr, _
ByVal flags As Long) As Long
Private Declare PtrSafe Function GetKeyboardLayoutList Lib "user32" (ByVal size As Long, _
ByRef layouts As LongPtr) As Long
Sub SwitchKhmerOn()
Selection.Font.Name = "Khmer OS Content"
ActivateKeyboardLayout &H4530453, 0
End Sub
Sub SwitchKeymanOff()
Selection.Font.Name = "Arial"
ActivateKeyboardLayout &H4090C09, 0
End Sub
Sub ShowLoadedLayouts()
Dim numLayouts As Long
Dim i As Long
Dim layouts() As LongPtr
numLayouts = GetKeyboardLayoutList(0, ByVal 0&)
ReDim layouts(numLayouts - 1)
GetKeyboardLayoutList numLayouts, layouts(0)
Dim msg As String
msg = "Loaded keyboard layouts: " & vbCrLf & vbCrLf
For i = 0 To numLayouts - 1
msg = msg & Hex(layouts(i)) & vbCrLf
Next
MsgBox msg
End Sub
This method has some limitations. For example, you cannot switch between multiple keyboard layouts installed for a single language.
Applies to:
- Keyman Desktop 8.0
- Keyman Desktop 9.0