用hwnd = GetForegroundWindowhCurThread = GetWindowThreadProcessId(hwnd, ByVal 0&)得到活動窗口的線程句柄然后不知道怎么辦了LoadKeyboardLayout這個方法似乎只能設置當前線程的。請求幫助圖片之家答題隊:您說的是控制本進程里本線程的輸入法狀態。我的意思是控制其他進程的輸入法。例如,我打開記事本后,我的程序能把記事本的輸入法改成西班牙語,控制別的程序的輸入法。我試過SendMessage(hwnd, WM_IME_SELECT, True, "0000040A"),好像沒用
2 回答

莫回無
TA貢獻1865條經驗 獲得超7個贊
使用LoadKeyboardLayout函數可以改變輸入法的順序,只要在第一個參數中傳遞目標輸入法的KeyboardlayoutName,第二個參數用KLF_REORDER就可以了。
例如,aa = LoadKeyboardLayout(〃00000409〃, KLF_REORDER) 使英文變成第一。那怎樣獲得KeyboardlayoutName呢?因為使用GetKeyboardLayoutname可以返回當前輸入法的KeyboardlayoutName,所以我們可以先用GetKeyboardLayoutList 函數來取得所有輸入法,再用activateKeyboardlayout()函數設置當前輸入法,最后就可以得到它的KeyboardlayoutName了

不負相思意
TA貢獻1777條經驗 獲得超10個贊
建議試下先用AttachThreadInput附加至目標線程再用activateKeyboardlayout設置輸入法。
*****************************************************************
首先需要指出的是你給的那個代碼是C的不是Java的。
然后他用的消息不是你的WM_IME_SELECT而是WM_INPUTLANGCHANGEREQUEST,其他的代碼你照他的代碼搬過來就是了。
我這里沒有VB不好測試。
添加回答
舉報
0/150
提交
取消