On Apr 27, 2009, at 7:46 PM, kvic...@pobox.com wrote:
in my app, i allow the user to specify keyboard shortcuts for menu
items (in a manner similar to xcode). for the string passed to -
[MenuItem setKeyEquivalent], i pass the string obtained from the
current event via [NSEvent charactersIgnoringModifiers]. this works
fine almost all the time. however, for some keyboard presses it
doesn't work properly, namely for shift and some of the number keys,
eg., command-! (command exclamation mark) doesn't work as a keyboard
equivalent, but shift-command-1 (shift command one) does work. thus,
i would like a reliable way to go from virtual keycode to the non-
shifted character.
in searching the archives, this topic has come up several times, but
all proposed solutions that i've found make use of one or more
deprecated (in leopard) api calls. eg., LMGetKBDType or
GetScriptManagerVariable, etc.
does anyone have a solution that doesn't rely on any deprecated api
calls?
You can use TISCopyCurrentKeyboardLayoutInputSource to get the current
keyboard input source. Then, you can query it using
TISGetInputSourceProperty with kTISPropertyUnicodeKeyLayoutData to get
the 'uchr' data for that keyboard layout. With that, you can call
UCKeyTranslate.
By the way, LMGetKbdType is not deprecated, at least according to its
declaration in the headers. It is documented on a page which is, as a
whole, marked as a legacy document. However, I don't know of a way to
obtain the keyboard type otherwise (except in the context of a Carbon
event).
Cheers,
Ken
_______________________________________________
Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com
This email sent to arch...@mail-archive.com