windows 能做到應用程序不需要輸入文字的地方就自動忽略輸入法輸入么?

舉例的環境:Windows 10 RS1 14393

如圖,開啟 Photoshop,Edge瀏覽器,作為 Windows 傳統應用和商店應用的代表。

如圖所示,在處於文字編輯狀態(有游標閃爍,輸入的文字會上屏)時,皆大歡喜,我輸入的就是我想要的,100分!

然後退出文字編輯狀態(比如 Ps 不再用文字工具了,Edge 我正在愉快的刷知乎中)

  1. 聰明的你一定會發現,輸入法狀態還是「中文」

  2. 於是我也愉快的按了一下快捷鍵,輸入法馬上就響應了我的操作,太感動了!!!

  3. 然後我意識到現在還是再中文輸入狀態呢!於是順手又要按一下 ctrl+ 空格 切回英文。

  4. 終於可以正常使用快捷鍵了!

應該有很多同學玩遊戲的時候也遇到過這種問題,一陣狂按發現沒反應,原來是輸入法切成中文了。

突然腦洞打開,微軟家出品的代表先進生產力的軟體大概沒有這種煩惱吧?

於是我打開了最強大的中文文字處理軟體 Word 2013……

中文打字好像工作得挺不錯……

來個 windows 標誌的 Alt + 字母 快捷鍵,一切正常,同時注意到:輸入法切成了英文

執行完一個命令之後會有兩種情況:

執行的命令沒有彈出窗口的,完美,回到編輯狀態還是中文。

執行的命令有彈出窗口的,回來之後就是英文了……

問題時間:

  1. 在應用程序已經處於「非編輯狀態時」,windows 的輸入法為什麼還要繼續工作?這是設計缺陷,還是有意為之?如果是設計問題,是輸入法的問題,還是 OS 的問題?

  2. 據我的實際體驗,在 OSX 上,只要程序不處於「編輯狀態」,無論輸入法是什麼文,都是可以愉快的跟英文狀態一樣的,按什麼有什麼。
  3. windows 能做到應用程序不需要輸入文字的地方就自動忽略輸入法輸入么?


是否出於編輯狀態這個問題只有應用程序自己才能準確回答。當然你說最簡單的情況,使用標準win32窗口控制項,如果當前焦點在一個TextBox上就是編輯狀態,那麼可能可以由系統自動得知。但是很多情況下系統是不可能知道的,比如你這個TextBox如果是自己用GDI畫的而不是標準的控制項怎麼辦?或者說極端情況,整個程序的窗口全是用D3D畫的,那操作系統怎麼可能知道什麼算編輯狀態。

我怎麼知道你這個遊戲敲個回車就可以打字聊天啊?


Windows 10可以調整成不同app不同輸入法,然後默認英文輸入法,剩下的Windows API都提供了充足的函數讓每一個app自己去決定,自己的什麼地方可以用輸入法,什麼地方不能用。


我也和題主一樣,有在軟體中大量使用快捷鍵的需求,因此對輸入法和快捷鍵的衝突怨念頗深。

實際的情況應該確實如輪子哥所說,Windows 是提供了函數讓軟體自己決定。題主如正在使用較新版本的 Chrome 瀏覽器就可以觀察到:當激活的控制項為編輯框時,中文輸入法可以正常輸入;當激活的控制項不是編輯框時,中文輸入法被切換到「已禁用」的狀態(此時可以直接使用快捷鍵,比如知乎自帶的 J/K 快捷鍵),分別如下二圖所示。

(正常輸入狀態)

(輸入法被自動禁用狀態)

我曾嘗試編寫 AutoHotkey 腳本來實現自動切換,目前已經實現運行特定的軟體時切換到指定的輸入法/輸入法狀態。但是苦於大量軟體並沒有使用標準的 Windows 編輯框控制項,暫時無法做到如題主所說的「無編輯框時默認禁用輸入法,出現編輯框時正常輸入」這種最適合使用的方案。

腳本地址:AllinOneShortcuts/IME.ahk

因為非專業碼農,如果有大牛有方法獲取到當前是否處於編輯狀態,還煩請大牛指點。


2016年8月15日測試:Edge+微軟拼音輸入法,在輸入框以外的地方輸入法並不會啟用。


@vczh

win10默認英文輸入法的話所有應用都會弄成英文版,生活在國外的你與微軟工程師似乎看不到這個問題。


需要應用程序自己去決定


理論上:能,但不是windows自己就能搞定。而是定義出一套標準介面,然後由應用程序和輸入法實現。至少包括:

應用程序,要及時通知系統自己現在要不要輸入法

而輸入法,要及時接收系統轉達的信息,藉此決定自己的輸入狀態

如果沒有標準介面,那開發基本靠試,對輸入法來說基本不可行。

比如判斷在不在輸入框,那想在【我的電腦】里通過輸入來定位漢字開頭的文件就傻眼了

比如工具條接受漢字快捷鍵,這個Ribbon尤為常見,輸入法還要強識別各種Ribbon控制項咯?


深有體會, 有些老遊戲,特別單機遊戲. shift應該是加速奔跑, ctrl是潛行.

總會激活windows10輸入法, 真是日了狗.

後來我想了個方法, 遊戲不能切換就自己切換.

```

所有設置 - 時間和語言 - 區域和語言 - 添加語言按鈕

// 我添加了 English 美國 的語言

```

玩遊戲前,我就點擊右下角 圖標為M 的來切換到 English輸入法, 這樣就不會切換到中文了,

當然也有缺點,我玩的都不需要輸入中文, 需要輸入中文時就在切換回來.


這不是windows能做到的

這是application該做的事


這個應該是由程序/網頁確定的

比如在知乎里,當你沒有點擊可以輸入文本的地方(比如搜索框)時,是不會激活輸入法的(看任務欄的輸入法圖標)

然後點擊輸入文本的地方,激活輸入法

如果一直沒有點擊其他不能輸入的地方,輸入法就一直保持激活狀態,那麼按鍵盤時輸入法當然有響應了

系統要判別你是否要輸入真的挺難的,比如我點了一下評論,然後我回到網頁頂部看看,那麼這時系統應該怎麼做呢?因為我有可能等會還會評論,也有可能就這麼留著


推薦閱讀:

在物理內存充足的情況下,是否需要禁用虛擬內存?
Windows 為什麼不開源?
Windows下用過之後就離不開的冷門軟體?
Windows:當我選擇『兼容性模式』的時候,究竟發生了什麼?
win8.1如果不分區,應該注意什麼?

TAG:微軟Microsoft | MicrosoftWindows | 輸入法 |