2014-10-29 66 views
1

在Cocoa程序上的物理按鍵,給這個例子NSString找出一個給定的字符被表示爲鍵盤鍵(Mac OS X)

Héllö 

有沒有辦法知道哪些字是不是代表通過鍵盤上的物理鍵或組合鍵(Shift/Ctrl)?

例如,在美式佈局的鍵盤上,鍵「é」和「ö」不是用鍵表示,而是在法式鍵盤上有一個「é」鍵,在德式鍵盤上有一個「ö」鍵。

基本上,我需要將輸入字符串減少到只有那些不能使用當前物理鍵盤佈局鍵入的字符。

我認爲Text Input Source Services Framework可能是正確的路要走,但我卡在那裏。

注:我知道,一些字符可以通過按Option-E/N/I產生。

+0

您可以很容易在美國英語鍵盤上輸入重音符號。對於「ö」,按住「o」直到出現菜單,然後選擇具有分音功能的那個。或者鍵入選項-u,然後鍵入「o」。不知道這些事情是否會影響您的要求... – rickster 2014-10-29 07:09:10

+0

@rickster是的,我意識到這一點,但我仍然需要識別字符串中的這些字符(它們在UI中的其他地方使用) – Mark 2014-10-29 11:30:21

回答

0

我認爲,唯一的辦法就是對倉庫uchr。

您可以使用TISGetInputSourceProperty()獲取輸入源屬性並將kTISPropertyUnicodeKeyLayoutData作爲屬性名稱。您將獲得uchr格式的鍵盤佈局,其格式爲here

我從來沒有嘗試過,但對我來說,它看起來像預期的方式。

0

您可以使用策略從這個問題鍵盤字符轉換爲CGKeyCode

How to convert ASCII character to CGKeyCode?

CGKeyCode你回來將參照鍵盤上的物理按鍵。使用常量從event.h上看到這些秋季美國QWERTY鍵盤上:kVK_ANSI_AkVK_ANSI_SkVK_ANSI_D

Where can I find a list of Mac virtual key codes?

我想象(但沒有測試),一個德國鍵盤將返回kVK_ANSI_Semicolonö鍵被按下。 (與美國QWERTY鍵盤上的;位置相同)。這將證明該鍵是德國鍵盤上的物理鍵。

當您嘗試使用美國QWERTY佈局相同,ö可能會返回UINT16_MAX,這是從第一個鏈接的keyCodeForChar()功能缺省的/錯誤的返回值。這將證明ö不是美國QWERTY鍵盤佈局中的物理鍵。

我不太確定當面對與美國QWERTY鍵盤上的按鍵物理上不同的按鍵時,這將如何工作。例如,在歐洲常見的z左側的附加字母鍵。我希望那個關鍵字也能得到kVK_ANSI_的常數,在這種情況下,這個策略應該是有效的。

相關問題