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
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
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
<iostream> ​在之前的文章有提到過,<iostream> 是專門處理程式的輸入 (input) 以及輸出 (output) 的函式庫。輸入輸出的對象是以電腦作為主角: 輸入指的是「把資料給電腦」,輸出指的是「從電腦那邊取得資料」。 在這個系列的文章中,程式輸入指的都是從鍵盤輸入資料給電
Thumbnail
過年前在LINE社群有網友提出一個問題。 🥹網友:在報導確認的A欄儲存格輸入員工qr會跳出視窗顯示員工的資料 🥹網友:主要是跳出視窗的VBA我不確定要怎麼下手比較好~ 😎我:為什麼要跳出來視窗? 這樣每輸入一次就跳一個 要一直關視窗誒 🥹網友:想給人員看並確認的,要辦活動
Thumbnail
與電腦溝通之方法說明 不須使用任何程式軟體工具,能與電腦溝通,使用Command line執行後,將依自己設定之條件,直接將結果選出,提供後續運用
Thumbnail
在一般情況我們可以使用 Windows 的 UI 介面來變更網路卡的名稱、IP 等等。但在要使用到 python 或其他程式控制時就不太合用了,所以這邊介紹使用 command 的方式來變更 Windows 中的網卡設定: 打開 Command Prompt(管理員權限): 按下Win,輸入
Thumbnail
在C#的視窗應用程式中,右鍵選單(Context Menu)是一個方便的使用者介面元素。當中的項目可以包含各種功能,而有時我們可能需要在使用者點擊右鍵選單中的某個項目時,取得該項目的值。以下是一個簡單的教學,教你如何在C#中實現這個功能。
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
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
<iostream> ​在之前的文章有提到過,<iostream> 是專門處理程式的輸入 (input) 以及輸出 (output) 的函式庫。輸入輸出的對象是以電腦作為主角: 輸入指的是「把資料給電腦」,輸出指的是「從電腦那邊取得資料」。 在這個系列的文章中,程式輸入指的都是從鍵盤輸入資料給電
Thumbnail
過年前在LINE社群有網友提出一個問題。 🥹網友:在報導確認的A欄儲存格輸入員工qr會跳出視窗顯示員工的資料 🥹網友:主要是跳出視窗的VBA我不確定要怎麼下手比較好~ 😎我:為什麼要跳出來視窗? 這樣每輸入一次就跳一個 要一直關視窗誒 🥹網友:想給人員看並確認的,要辦活動
Thumbnail
與電腦溝通之方法說明 不須使用任何程式軟體工具,能與電腦溝通,使用Command line執行後,將依自己設定之條件,直接將結果選出,提供後續運用
Thumbnail
在一般情況我們可以使用 Windows 的 UI 介面來變更網路卡的名稱、IP 等等。但在要使用到 python 或其他程式控制時就不太合用了,所以這邊介紹使用 command 的方式來變更 Windows 中的網卡設定: 打開 Command Prompt(管理員權限): 按下Win,輸入
Thumbnail
在C#的視窗應用程式中,右鍵選單(Context Menu)是一個方便的使用者介面元素。當中的項目可以包含各種功能,而有時我們可能需要在使用者點擊右鍵選單中的某個項目時,取得該項目的值。以下是一個簡單的教學,教你如何在C#中實現這個功能。