ApothiX
06-27-2006, 07:05 AM
http://en.wikipedia.org/wiki/Scancode
http://en.wikipedia.org/wiki/Scancode
Edit: Received a PM from the maker of the thread requesting more information, and not just a link with "someone else's words" on it.
A simple method of determining what key has what scancode can be scripted. This script does just that (In old-gscript for compatibility with the editor, it's not likely that you'd want to upload something like this to a server.)
//#CLIENTSIDE
if(created) timeout = 0.05;
if(timeout) {
for(i=0;i<256;i++) {
if(keydown2(i,true)) {
setplayerprop #c,Scancode: #v(i);
}
}
timeout = 0.05;
}
That will tell you which key has which scancode, you can then go ahead and use the onKeyDown event as follows:
function ControlName.onKeyDown(keycode, keystring, scancode) {
if(scancode == 65) {
player.chat = "The a key was pressed while ControlName had focus.";
}
}
a more simpler method of this, as scancodes change depending on the keyboard layout (I believe, could be wrong though) would be to just check for the character.
function ControlName.onKeyDown(keycode, keystring, scancode) {
if(keystring == "a" || keystring == "A") {
player.chat = "The a key was pressed while ControlName had focus.";
}
}
I'm not sure what the 'keycode' is exactly, but it probably has something to do with the standard game controls, like keydown().
keydown( key ) the specified key is pressed (0..10: up,left,down,right,S,A,D,M,tab,Q,P)
Edit again: <_< Now that I re-read it, keycode and scancode may be mixed up in those examples. I haven't done this for awhile so you may want to double check that. Scancode can still be determined using a method similiar to this, although all scancodes are shown on the wiki page I linked to.
ApothiX
06-28-2006, 01:53 AM
And seeing as how I have nothing else better to do, I took the liberty of converting that header file into an enum supported by gscript2.
enum {
VK_LBUTTON = 0x01,
VK_RBUTTON,
VK_CANCEL,
VK_MBUTTON,
VK_XBUTTON1,
VK_XBUTTON2,
VK_BACK = 0x08,
VK_TAB,
VK_CLEAR = 0x0C,
VK_RETURN,
VK_SHIFT = 0x10,
VK_CONTROL,
VK_MENU,
VK_PAUSE,
VK_CAPITAL,
VK_KANA,
VK_HANGEUL = 0x15,
VK_HANGUL = 0x15,
VK_JUNJA = 0x17,
VK_FINAL,
VK_HANJA,
VK_KANJI = 0x19,
VK_ESCAPE = 0x1B,
VK_CONVERT = 0x1C,
VK_NONCONVERT,
VK_ACCEPT,
VK_MODECHANGE,
VK_SPACE,
VK_PRIOR,
VK_NEXT,
VK_END,
VK_HOME,
VK_LEFT,
VK_UP,
VK_RIGHT,
VK_DOWN,
VK_SELECT,
VK_PRINT,
VK_EXECUTE,
VK_SNAPSHOPT,
VK_INSERT,
VK_DELETE,
VK_HELP,
VK_0,
VK_1,
VK_2,
VK_3,
VK_4,
VK_5,
VK_6,
VK_7,
VK_8,
VK_9,
VK_A = 0x41,
VK_B,
VK_C,
VK_D,
VK_E,
VK_F,
VK_G,
VK_H,
VK_I,
VK_J,
VK_K,
VK_L,
VK_M,
VK_N,
VK_O,
VK_P,
VK_Q,
VK_R,
VK_S,
VK_T,
VK_U,
VK_V,
VK_W,
VK_X,
VK_Y,
VK_Z,
VK_LWIN,
VK_RWIN,
VK_APPS,
VK_SLEEP = 0x5F,
VK_NUMPAD0,
VK_NUMPAD1,
VK_NUMPAD2,
VK_NUMPAD3,
VK_NUMPAD4,
VK_NUMPAD5,
VK_NUMPAD6,
VK_NUMPAD7,
VK_NUMPAD8,
VK_NUMPAD9,
VK_MULTIPLY,
VK_ADD,
VK_SEPARATOR,
VK_SUBTRACT,
VK_DECIMAL,
VK_DIVIDE,
VK_F1,
VK_F2,
VK_F3,
VK_F4,
VK_F5,
VK_F6,
VK_F7,
VK_F8,
VK_F9,
VK_F10,
VK_F11,
VK_F12,
VK_F13,
VK_F14,
VK_F15,
VK_F16,
VK_F17,
VK_F18,
VK_F19,
VK_F20,
VK_F21,
VK_F22,
VK_F23,
VK_F24,
VK_NUMLOCK = 0x90,
VK_SCROLL,
VK_OEM_NEC_EQUAL,
VK_OEM_FJ_JISHO = 0x92,
VK_OEM_FJ_MASSHOU,
VK_OEM_FJ_TOUROKU,
VK_OEM_FJ_LOYA,
VK_OEM_FJ_ROYA,
VK_LSHIFT = 0xA0,
VK_RSHIFT,
VK_LCONTROL,
VK_RCONTROL,
VK_LMENU,
VK_RMENU,
VK_BROWSER_BACK,
VK_BROWSER_FORWARD,
VK_BROWSER_REFRESH,
VK_BROWSER_STOP,
VK_BROWSER_SEARCH,
VK_BROWSER_FAVORITES,
VK_BROWSER_HOME,
VK_VOLUME_MUTE,
VK_VOLUME_DOWN,
VK_VOLUME_UP,
VK_MEDIA_NEXT_TRACK,
VK_MEDIA_PREV_TRACK,
VK_MEDIA_STOP,
VK_MEDIA_PLAY_PAUSE,
VK_LAUNCH_MAIL,
VK_LAUNCH_MEDIA_SELECT,
VK_LAUNCH_APP1,
VK_LAUNCH_APP2,
VK_OEM_1 = 0xBA,
VK_OEM_PLUS,
VK_OEM_COMMA,
VK_OEM_MINUS,
VK_OEM_PERIOD,
VK_OEM_2,
VK_OEM_3,
VK_OEM_4 = 0xDB,
VK_OEM_5,
VK_OEM_6,
VK_OEM_7,
VK_OEM_8,
VK_OEM_AX = 0xE1,
VK_OEM_102,
VK_ICO_HELP,
VK_ICO_00,
VK_PROCESSKEY,
VK_ICO_CLEAR,
VK_PACKET,
VK_OEM_RESET = 0xE9,
VK_OEM_JUMP,
VK_OEM_PA1,
VK_OEM_PA2,
VK_OEM_PA3,
VK_OEM_WSCTRL,
VK_OEM_CUSEL,
VK_OEM_ATTN,
VK_OEM_FINISH,
VK_OEM_COPY,
VK_OEM_AUTO,
VK_OEM_ENLW,
VK_OEM_BACKTAB,
VK_ATTN,
VK_CRSEL,
VK_EXSEL,
VK_EREOF,
VK_PLAY,
VK_ZOOM,
VK_NONAME,
VK_PA1,
VK_OEM_CLEAR
};
Please note, I did this all by hand, retyped all that crap. So I may have made a typo or two somewhere. If you spot something wrong with this, please tell me and I will correct it.
vBulletin® v3.8.11, Copyright ©2000-2024, vBulletin Solutions Inc.