2011-03-10 48 views
2

在我的應用程序中,我需要將快捷鍵映射到鍵盤上「1」鍵左側的鍵。在標準的美式鍵盤上,這將是反碼字符(「`」),它是鍵碼號碼50.不幸的是,國際鍵盤(例如法語鍵盤)與1鍵左側正斜槓鍵「/」),因此對關鍵代碼進行硬編碼會導致不使用美式鍵盤的用戶出現意想不到的結果。爲國際鍵盤轉換CGKeyCode

有沒有什麼辦法可以在運行時將美國密鑰代碼轉換爲國際鍵盤的密鑰代碼,或者通過編程的方式來確定基於鍵盤上密鑰位置的密鑰代碼?

+0

糾正我,如果我錯了,但這聽起來像一個Objective-C問題,而不是C問題。重新標記爲(並固定'obejctive-c'的拼寫)。 – 2011-03-10 01:52:05

+0

我將它標記爲兩者,因爲Carbon文本輸入API是用C編寫的,但Objective-C中也可能有解決方案。 – indragie 2011-03-10 23:52:10

+0

碳是否被支持? http://en.wikipedia.org/wiki/Carbon_(API)聽起來像答案是'不'。 – 2011-03-11 05:50:02

回答

3

字符對於左邊的「1」在不同的鍵盤佈局上有所不同,但虛擬鍵碼應該是相同的。如果你看看HIToolbox/Events.h,你可以看到常量kVK_ANSI_Grave,它代表你正在談論的關鍵;在常量列表之上,有一條評論表明,在虛擬鍵碼級別,等同意味着物理鍵值是相同的,儘管掃描碼可能不同並且發出的字母可能不同。

換句話說:鍵盤驅動程序從掃描代碼映射到虛擬鍵代碼,並且鍵盤佈局(您可以在系統預置中更改)從虛擬鍵代碼映射到字符。

這一切都可能是錯的;我沒有用於驗證這些斷言的非美國鍵盤。

+0

這給我帶來的問題是,碳鍵盤事件API使用的關鍵代碼基於上面提到的虛擬代碼?還是他們被硬編碼爲特定的角色? – indragie 2011-03-14 05:01:41

+0

我相信'CGKeyCode'實際上是與Mac OS X中幾乎無處不在的相同的虛擬鍵碼。該列表和您的觀察結果都使用小數點後50代表嚴重鍵的事實是一個積極的信號。 – 2011-03-14 05:06:07

+0

問題是,我在一個裝運應用程序中使用了這個關鍵代碼,並且我有幾個錯誤報告,它實際上只是將它映射到'字符而不是鍵盤上鍵的位置。 – indragie 2011-03-14 14:04:10