2012-05-03 51 views
3

改變語言我需要使用C++,或一些方法來阻止改變語言到方框ALT + 鍵事件。塊ALT + SHIFT事件或禁用的編程方式

在此先感謝。

+0

你說的是有關Windows?如果是這樣,請添加適當的標籤。 – Shahbaz

+4

如果你這樣做,你的用戶會激情憎恨你。你確定你想要嗎? – SigTerm

+1

是的。我做到了。謝謝 –

回答

6

我會對此有點不同。我會在啓動時捕捉當前的語言設置,而不是將其更改爲所需的語言設置。

在甚至alt + shift我只是將其設置回所需的類型再次。

它應該是仙女容易做的網絡框架。

這裏是關於操縱語言很短的文章:How to change input language programmatically

而且主類上msdna:InputLanguage documentation

要真正防止ALT + SHIFT移動到Windows系統,您必須用鉤子玩。

這裏是一篇關於blocking keystrokes before windows process them.

3

只是一個想法。您可以捕獲WM_KEYDOWN消息並撥打ActivateKeyboardLayout來切換語言。

+0

要展開,您的VNC客戶端可以查找語言更改並將其更改回來。 – Ben

1

使用C++,你可以安裝一個如一個鍵盤鉤子程序建議here和過濾器(燕子/不傳播)的鍵(一個或多個)要禁止。

1

我對MSDN的理解是,你可以假裝處理WM_INPUTLANGCHANGEREQUEST然後什麼都不做,這樣Windows就不會做任何事情,語言也不會真正改變。但一些用戶表示,這不再起作用。 http://msdn.microsoft.com/en-us/library/ms632630(VS.85).aspx

也許你可以實現ITfInputProcessorProfileActivationSink::OnActivated,當你被調用,您可以通過調用ITfInputProcessorProfiles::ActivateLanguageProfile變回以前的語言。在您的應用程序開始時,您可以撥打ITfInputProcessorProfiles::GetActiveLanguageProfile

也許你可以實現ITfLanguageProfileNotifySink::OnLanguageChange,設爲*pfAcceptFALSE並返回S_OKhttp://msdn.microsoft.com/en-us/library/windows/desktop/ms628770(v=vs.85).aspx

以上所有都有問題。如果用戶有意更改客戶端上的語言,例如通過單擊客戶端的任務欄而不是按Alt + Shift,上述方法將無法改變它們的更改。

我想知道RegisterHotKey是否允許您爲自己的窗口註冊Alt + Shift,即使系統已經定義了它。