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

更新於 發佈於 閱讀時間約 3 分鐘
  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
6會員
63內容數
ktest
留言
avatar-img
留言分享你的想法!

































































你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
本文以戀愛為比喻,深入淺出地探討投資哲學,提醒讀者投資需理性評估,不可盲目跟風,並強調投資自己才是最穩健的選擇。
我用 ChatGPT 「把英文翻成中文」的時候, 遇到一個雖然 AI「翻譯錯誤」,但真的「錯得很聰明,害我差點沒發現翻錯」的狀況🤣
Thumbnail
中平跟太太都是志工,兩人還沒退休的時候,就已經利用假日做公益,習氣和慾望也漸漸淡薄,做到最後的收獲就是心開意解、無所求。兩人無怨無悔做了十五年的志工,有一天,無常來臨。 有一天,中平吃完午餐,趁天氣好驅車回山上的老家摘龍眼。中平拿了鋁梯靠在龍眼樹幹,手腳利落的他,一下子就摘了好幾簍,光開心,腳
Thumbnail
以現代文生動描繪呂布貂蟬幽會鳳儀亭 前一篇分享了用ChatGPT改寫《三國演義》「草船借箭」。 這次來試試較多人物描寫的橋段。 改寫原文出自第八回:王司徒巧使連環計,董太師大鬧鳳儀亭
本文介紹如何在LabVIEW環境中設定執行檔以允許多個實例同時運行。透過簡單的步驟修改INI檔,本文將教你如何啟用這項功能,讓你能夠更高效地使用LabVIEW的應用程式。適合需要同時運行多個LabVIEW應用的使用者。
Thumbnail
你們都用甚麼方式來螢幕截圖呢 ? 我現在最常用的是【win + shift +s】鍵, 但每次按完都要等5秒以上, 所以開始尋找其他方法~
Thumbnail
相信大家在 windows 10 時期,應該都知道只要用滑鼠左鍵點擊畫面右下角就能切回桌面,但在 windows 11 就不行了,不過其實在 win11 仍舊是可以的,本篇就來教大家如何在 win 11 找回熟悉的功能
Thumbnail
本文詳細介紹Windows cmd指令的應用,並提供了例說明及追加說明,用戶可以學習如何使用cmd指令對檔案進行處理、選取所需的內容,以及擴展運用到其他類型的檔案,最後還介紹了cmd設計完成後的應用和自動化執行方式。
Thumbnail
INI 檔案是一種配置檔案格式,常用於保存設定資料和組態資訊。 它使用簡單的鍵值對結構來組織資料,通常用於程式、應用程式或操作系統中的配置和初始化設定。 INI 檔案每個鍵值對包含一個名稱(鍵)和對應的值。 基本的檔案格式如下: [Section1] Key1 = Value1 Key2 =
Thumbnail
讓我們從程式開始看起,我們輸入的鍵都是KeY,卻在寫入ini時,都轉換成小寫了。 因為預設情況下,configparser 會將配置文件中的鍵(Key)轉換成小寫形式。也就是說,即使配置文件中鍵的寫法是大寫或混合大小寫,讀取時都會轉換成小寫。 如以下的程式範例 其中的鍵值為KeY1 KeY2
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
本文以戀愛為比喻,深入淺出地探討投資哲學,提醒讀者投資需理性評估,不可盲目跟風,並強調投資自己才是最穩健的選擇。
我用 ChatGPT 「把英文翻成中文」的時候, 遇到一個雖然 AI「翻譯錯誤」,但真的「錯得很聰明,害我差點沒發現翻錯」的狀況🤣
Thumbnail
中平跟太太都是志工,兩人還沒退休的時候,就已經利用假日做公益,習氣和慾望也漸漸淡薄,做到最後的收獲就是心開意解、無所求。兩人無怨無悔做了十五年的志工,有一天,無常來臨。 有一天,中平吃完午餐,趁天氣好驅車回山上的老家摘龍眼。中平拿了鋁梯靠在龍眼樹幹,手腳利落的他,一下子就摘了好幾簍,光開心,腳
Thumbnail
以現代文生動描繪呂布貂蟬幽會鳳儀亭 前一篇分享了用ChatGPT改寫《三國演義》「草船借箭」。 這次來試試較多人物描寫的橋段。 改寫原文出自第八回:王司徒巧使連環計,董太師大鬧鳳儀亭
本文介紹如何在LabVIEW環境中設定執行檔以允許多個實例同時運行。透過簡單的步驟修改INI檔,本文將教你如何啟用這項功能,讓你能夠更高效地使用LabVIEW的應用程式。適合需要同時運行多個LabVIEW應用的使用者。
Thumbnail
你們都用甚麼方式來螢幕截圖呢 ? 我現在最常用的是【win + shift +s】鍵, 但每次按完都要等5秒以上, 所以開始尋找其他方法~
Thumbnail
相信大家在 windows 10 時期,應該都知道只要用滑鼠左鍵點擊畫面右下角就能切回桌面,但在 windows 11 就不行了,不過其實在 win11 仍舊是可以的,本篇就來教大家如何在 win 11 找回熟悉的功能
Thumbnail
本文詳細介紹Windows cmd指令的應用,並提供了例說明及追加說明,用戶可以學習如何使用cmd指令對檔案進行處理、選取所需的內容,以及擴展運用到其他類型的檔案,最後還介紹了cmd設計完成後的應用和自動化執行方式。
Thumbnail
INI 檔案是一種配置檔案格式,常用於保存設定資料和組態資訊。 它使用簡單的鍵值對結構來組織資料,通常用於程式、應用程式或操作系統中的配置和初始化設定。 INI 檔案每個鍵值對包含一個名稱(鍵)和對應的值。 基本的檔案格式如下: [Section1] Key1 = Value1 Key2 =
Thumbnail
讓我們從程式開始看起,我們輸入的鍵都是KeY,卻在寫入ini時,都轉換成小寫了。 因為預設情況下,configparser 會將配置文件中的鍵(Key)轉換成小寫形式。也就是說,即使配置文件中鍵的寫法是大寫或混合大小寫,讀取時都會轉換成小寫。 如以下的程式範例 其中的鍵值為KeY1 KeY2