LabVIEW-用win32 api關閉輸入法(上)

更新於 發佈於 閱讀時間約 4 分鐘

  Windows系統帶GUI的程式在使用時最大的困擾之一就是開啟之後輸入方式是輸入法而不是英文數字,特別是在用在工業生產時。網路上可以找到非常多關於如何用win32 api關閉輸入法的文章,但是這些方法在win10和win11有點小問題(win8未知),就是得要用滑鼠點工作列右邊的ENG才能切換回輸入法,雖然有快速鍵alt+shift可以用,但知道的人不多。在win7之前是可以直接ctrl+空白鍵直接切回輸入法,操作的流暢度差了不少。

  我另外找到一個較細膩的方法,可以直接控制目標的輸入法狀態。上篇紀錄兩種作法和所有語言都通用的流程(大概),下篇紀錄如何在LabVIEW上實現這些功能。

  一般看到關閉輸入法的流程是這樣,先取得hwnd也就是視窗控制碼,可以經由user32.dll的兩個函式之一取得:(1)取得最上層視窗,

HWND GetForegroundWindow();

或(2)取得指定title名稱的視窗(函式結尾A是ANSI,W是unicode)。

HWND FindWindowA(
[in, optional] LPCSTR lpClassName,
[in, optional] LPCSTR lpWindowName
);

  接著載入英文鍵盤配置,這邊msdn提到win8後如果目前的進程沒有擁有具有鍵盤焦點的視窗,此函式就不會有任何作用,要先用GetFocus()取得焦點。我用第一種方法得到hwnd沒遇到函式失效,但是全部的視窗鍵盤配置都一起被改變,而不是只有指定hwnd的視窗。

HKL LoadKeyboardLayoutA(
[in] LPCSTR pwszKLID,
[in] UINT Flags
);

  最後對hwnd指向的視窗傳送WM_INPUTLANGCHANGEREQUEST指令(對應的機碼是0x0050),把鍵盤配置改成英文(機碼0x0409)。

LRESULT SendMessage(
[in] HWND hWnd,
[in] UINT Msg,
[in] WPARAM wParam,
[in] LPARAM lParam
);

  要確認是否切換完成可以用GetKeyboardLayout()來確認。

  另一個方法是透過imm32.dll的函式關閉同PID的視窗的輸入法,如果要關其他PID的輸入法會更複雜點,暫時不在我的應用範圍先不管。首先一樣要取得目前視窗的控制碼hwnd,然後取得輸入法控制碼HIMC。

HIMC ImmGetContext(
HWND unnamedParam1
);

   然後設定輸入法的狀態。正確的關閉輸入法後工具列輸入法旁的icon會變成"A"或"英"。另外也可以用ImmGetOpenStatus()來取得輸入法狀態,開啟會回傳,關閉回傳0。

BOOL ImmSetOpenStatus(
HIMC unnamedParam1,
BOOL unnamedParam2
);

  這個方法在鍵盤配置為日文時也有作用,應該是通用在各種鍵盤配置。






留言
avatar-img
留言分享你的想法!
avatar-img
hls Ding的沙龍
7會員
64內容數
ktest
hls Ding的沙龍的其他內容
2025/03/06
import csv import os folder = 'D:/PROGRAMMING/PythonCode/data_arrange/' fname_sum = 'sum.csv' bump = 6 csv_filenames = [f for f in os.listdir(folde
2025/03/06
import csv import os folder = 'D:/PROGRAMMING/PythonCode/data_arrange/' fname_sum = 'sum.csv' bump = 6 csv_filenames = [f for f in os.listdir(folde
看更多
你可能也想看
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
為什麼寫這麼基本的設定呢? 剛開始打字時預設內定為微軟注音,因為沒有全部設定好,導致後續寫稿時常常打錯字,也有是因為打注音時選錯字也有關。 雖然這個很基本,但也有滿多人不知道該怎麼設定,或常被微軟裡其設定繁雜而困擾,至少我找了一陣子......。 進入畫面右下方切換中英文(右鍵),叫出IME工
Thumbnail
為什麼寫這麼基本的設定呢? 剛開始打字時預設內定為微軟注音,因為沒有全部設定好,導致後續寫稿時常常打錯字,也有是因為打注音時選錯字也有關。 雖然這個很基本,但也有滿多人不知道該怎麼設定,或常被微軟裡其設定繁雜而困擾,至少我找了一陣子......。 進入畫面右下方切換中英文(右鍵),叫出IME工
Thumbnail
前言 很多人電腦使用久了,沒有整理,桌面會非常雜亂,這一個雜亂會在你不知不覺中,消磨掉你的時間。今天我會教你用“密語”重新定義你的桌面。 Demo影片 先附上影片,讓各位看看極簡桌面效果如何 接下來,讓我一步一步開始教你怎麼操作: 第一步 建立一個存放資料夾(路徑隨意,在此以桌面為例),名字依你喜好
Thumbnail
前言 很多人電腦使用久了,沒有整理,桌面會非常雜亂,這一個雜亂會在你不知不覺中,消磨掉你的時間。今天我會教你用“密語”重新定義你的桌面。 Demo影片 先附上影片,讓各位看看極簡桌面效果如何 接下來,讓我一步一步開始教你怎麼操作: 第一步 建立一個存放資料夾(路徑隨意,在此以桌面為例),名字依你喜好
Thumbnail
這篇依然是寫給自己做備忘使用,基本上是Windows 11比較需要用到此指令,原本是在設定→個人化→佈景主題→桌面圖示設定這裡來打開它。 這個功能是來設定顯示桌面常用的圖示,被微軟隱藏起來的(註1),例如本機(註2)、控制台與網路(註2)。 註1. 因為他們覺得你不需要,他們要你直接按工作列上的資料
Thumbnail
這篇依然是寫給自己做備忘使用,基本上是Windows 11比較需要用到此指令,原本是在設定→個人化→佈景主題→桌面圖示設定這裡來打開它。 這個功能是來設定顯示桌面常用的圖示,被微軟隱藏起來的(註1),例如本機(註2)、控制台與網路(註2)。 註1. 因為他們覺得你不需要,他們要你直接按工作列上的資料
Thumbnail
  Windows 11的工具列為了模仿macOS,犧牲了使用者能將工具列設在螢幕左右邊緣的功能,原因是工程師沒有興趣幫其他位置的工具列設定動畫效果。
Thumbnail
  Windows 11的工具列為了模仿macOS,犧牲了使用者能將工具列設在螢幕左右邊緣的功能,原因是工程師沒有興趣幫其他位置的工具列設定動畫效果。
Thumbnail
調試(Debugging): 開始調試:F5 逐步執行:F10, F11 設置/刪除斷點:F9 停止調試:Shift + F5 調試視窗:Ctrl + Alt + P 調試選項:Alt + F7 編輯(Editing): 自動排版程式碼:Ctrl + K, Ctrl + D 快速註解/取消註解:Ct
Thumbnail
調試(Debugging): 開始調試:F5 逐步執行:F10, F11 設置/刪除斷點:F9 停止調試:Shift + F5 調試視窗:Ctrl + Alt + P 調試選項:Alt + F7 編輯(Editing): 自動排版程式碼:Ctrl + K, Ctrl + D 快速註解/取消註解:Ct
Thumbnail
兩種在windows系統用win32 api關閉輸入法的作法
Thumbnail
兩種在windows系統用win32 api關閉輸入法的作法
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News