diff --git a/meshcore/KVM/Windows/input.c b/meshcore/KVM/Windows/input.c index f82a48e..12ad366 100644 --- a/meshcore/KVM/Windows/input.c +++ b/meshcore/KVM/Windows/input.c @@ -340,13 +340,7 @@ void KVM_InitMouseCursors(void *pendingPackets) void MouseAction(double absX, double absY, int button, short wheel) { INPUT mouse; - - if (button == 0x88) - { - // Double click indication, no nothing on windows. - return; - } - + if (button == 0x88) return; // Double click indication, no nothing on windows. mouse.type = INPUT_MOUSE; mouse.mi.dx = (long)absX; mouse.mi.dy = (long)absY; @@ -359,58 +353,10 @@ void MouseAction(double absX, double absY, int button, short wheel) SendInput(1, &mouse, sizeof(INPUT)); } - -// Handling keyboard Input -// MSDN References: -// Keyboard input structure: http://msdn.microsoft.com/en-us/library/ms646271%28v=VS.85%29.aspx -// Virtual key-codes: http://msdn.microsoft.com/en-us/library/dd375731%28v=VS.85%29.aspx -BYTE kstate[255] = { 0 }; -void KeyActionEx(unsigned char keycode, int up, HKL layout) -{ - WCHAR buf[16]; - HWND windowHandle = GetForegroundWindow(); - INPUT key; - if (windowHandle == NULL) return; - SetForegroundWindow(windowHandle); - - if (keycode == VK_CAPITAL) - { - if (up == 0) - { - kstate[VK_CAPITAL] = (kstate[VK_CAPITAL] == 0xFF ? 0x00 : 0xFF); - } - } - else - { - if (up == 1) - { - kstate[keycode] = 0; - } - else - { - kstate[keycode] = 0xFF; - } - } - - ToUnicodeEx(keycode, MapVirtualKeyEx(keycode, MAPVK_VK_TO_VSC, layout), kstate, buf, 16, 0, layout); - uint32_t vc = ((uint32_t*)buf)[0]; - - key.type = INPUT_KEYBOARD; - key.ki.wVk = 0; - key.ki.dwFlags = KEYEVENTF_UNICODE; - if (up == 1) key.ki.dwFlags |= KEYEVENTF_KEYUP; // 1 = UP - //else if (up == 3) key.ki.dwFlags = KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP; // 3 = EXUP - //else if (up == 4) key.ki.dwFlags = KEYEVENTF_EXTENDEDKEY; // 4 = EXDOWN - key.ki.time = 0; - key.ki.wScan = (WORD)vc; - key.ki.dwExtraInfo = 0; - SendInput(1, &key, sizeof(INPUT)); -} - void KeyAction(unsigned char keycode, int up) { - HWND windowHandle = GetForegroundWindow(); INPUT key; + HWND windowHandle = GetForegroundWindow(); if (windowHandle == NULL) return; SetForegroundWindow(windowHandle); key.type = INPUT_KEYBOARD; @@ -421,8 +367,28 @@ void KeyAction(unsigned char keycode, int up) else if (up == 4) key.ki.dwFlags = KEYEVENTF_EXTENDEDKEY; // 4 = EXDOWN key.ki.time = 0; key.ki.wScan = (WORD)MapVirtualKey((UINT)keycode, MAPVK_VK_TO_VSC); // This is required to make RDP client work. - key.ki.dwExtraInfo = 0; + key.ki.dwExtraInfo = GetMessageExtraInfo(); SendInput(1, &key, sizeof(INPUT)); + //printf("KEY keycode: %d, up: %d, scan: %d\r\n", keycode, up, key.ki.wScan); +} + +void KeyActionUnicode(WORD unicode, int up) +{ + INPUT key; + HWND windowHandle = GetForegroundWindow(); + if (windowHandle == NULL) return; + SetForegroundWindow(windowHandle); + key.type = INPUT_KEYBOARD; + key.ki.wVk = 0; + key.ki.dwFlags = KEYEVENTF_UNICODE; + if (up == 1) key.ki.dwFlags = KEYEVENTF_KEYUP; // 1 = UP + else if (up == 3) key.ki.dwFlags = KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP; // 3 = EXUP + else if (up == 4) key.ki.dwFlags = KEYEVENTF_EXTENDEDKEY; // 4 = EXDOWN + key.ki.time = 0; + key.ki.wScan = unicode; + key.ki.dwExtraInfo = GetMessageExtraInfo(); + SendInput(1, &key, sizeof(INPUT)); + //printf("KEY unicode: %d, up: %d\r\n", unicode, up); } // Windows 8 Touch Related Support diff --git a/meshcore/KVM/Windows/input.h b/meshcore/KVM/Windows/input.h index 138750f..e828aa1 100644 --- a/meshcore/KVM/Windows/input.h +++ b/meshcore/KVM/Windows/input.h @@ -41,7 +41,7 @@ void KVM_InitMouseCursors(void* pendingPackets); void KVM_UnInitMouseCursors(); void MouseAction(double absX, double absY, int button, short wheel); void KeyAction(unsigned char keycode, int up); -void KeyActionEx(unsigned char keycode, int up, HKL layout); +void KeyActionUnicode(WORD unicode, int up); int TouchInit(); void TouchUnInit(); int TouchAction1(unsigned char id, unsigned int flags, unsigned short x, unsigned short y); diff --git a/meshcore/KVM/Windows/kvm.c b/meshcore/KVM/Windows/kvm.c index fd50ef3..b1c3ed3 100644 --- a/meshcore/KVM/Windows/kvm.c +++ b/meshcore/KVM/Windows/kvm.c @@ -374,1037 +374,6 @@ void CheckDesktopSwitch(int checkres, ILibKVM_WriteHandler writeHandler, void *r } } -// Push keyboard events to the default input desktop -// Used for remote messaging keyboard input -void kvm_keyboardInput(char* block, int blocklen) -{ - int i; - - KVMDEBUG("kvm_keyboardInput", blocklen); - - /* - HWINSTA ws1, ws2; - HDESK desktop, desktop2; - - ws2 = GetProcessWindowStation(); - ws1 = OpenWindowStation(_T("winsta0"), FALSE, - WINSTA_ACCESSCLIPBOARD | - WINSTA_ACCESSGLOBALATOMS | - WINSTA_CREATEDESKTOP | - WINSTA_ENUMDESKTOPS | - WINSTA_ENUMERATE | - WINSTA_EXITWINDOWS | - WINSTA_READATTRIBUTES | - WINSTA_READSCREEN | - WINSTA_WRITEATTRIBUTES); - if (ws1 != NULL) SetProcessWindowStation(ws1); - - // Check desktop switch - desktop2 = GetThreadDesktop(GetCurrentThreadId()); - desktop = OpenInputDesktop(0, TRUE, - DESKTOP_CREATEMENU | - DESKTOP_CREATEWINDOW | - DESKTOP_ENUMERATE | - DESKTOP_HOOKCONTROL | - DESKTOP_WRITEOBJECTS | - DESKTOP_READOBJECTS | - DESKTOP_SWITCHDESKTOP | - GENERIC_WRITE); - SetThreadDesktop(desktop); - */ - - for (i = 1; i < blocklen; i += 2) KeyAction(block[i], block[i - 1]); - - /* - if (ws1 != NULL) { SetProcessWindowStation(ws2); CloseWindowStation(ws1); } - SetThreadDesktop(desktop2); - CloseDesktop(desktop); - */ -} - -char *kvm_getKeyboardLayoutCode(char *layout, size_t layoutLength) -{ - char *val = layout; - char *ret = NULL; - if (layoutLength < 16) { return(NULL); } - - switch (((int64_t*)val)[0]) - { - case 280568361569: // ar-SA - ret = "00000401"; - break; - case 306052949858: // bg-BG - ret = "00000402"; - break; - case 357642887523: // ca-ES - ret = "00000403"; - break; - case 375074416762: // zh-TW - ret = "00000404"; - break; - case 387674108771: // cs-CZ - ret = "00000405"; - break; - case 323266371940: // da-DK - ret = "00000406"; - break; - case 297496569188: // de-DE - ret = "00000407"; - break; - case 353381477477: // el-GR - ret = "00000408"; - break; - case 357911326309: // en-US - ret = "00000409"; - break; - case 314709993830: // fi-FI - ret = "0000040B"; - break; - case 353364701798: // fr-FR - ret = "0000040C"; - break; - case 327645226344: // he-IL - ret = "0000040D"; - break; - case 366283158888: // hu-HU - ret = "0000040E"; - break; - case 357710001001: // is-IS - ret = "0000040F"; - break; - case 362004968553: // it-IT - ret = "00000410"; - break; - case 344841871722: // ja-JP - ret = "00000411"; - break; - case 353448587115: // ko-KR - ret = "00000412"; - break; - case 327729114222: // nl-NL - ret = "00000413"; - break; - case 340614013550: // nb-NO - ret = "00000414"; - break; - case 327762668656: // pl-PL - ret = "00000415"; - break; - case 353297593456: // pt-BR - ret = "00000416"; - break; - case 310364695922: // rm-CH - ret = "00000417"; - break; - case 340681125746: // ro-RO - ret = "00000418"; - break; - case 366450931058: // ru-RU - ret = "00000419"; - break; - case 353398256232: // hr-HR - ret = "0000041A"; - break; - case 323518032755: // sk-SK - ret = "0000041B"; - break; - case 327511011699: // sq-AL - ret = "0000041C"; - break; - case 297748231795: // sv-SE - ret = "0000041D"; - break; - case 310649907316: // th-TH - ret = "0000041E"; - break; - case 353599582836: // tr-TR - ret = "0000041F"; - break; - case 323467702901: // ur-PK - ret = "00000420"; - break; - case 293285487721: // id-ID - ret = "00000421"; - break; - case 280601914229: // uk-UA - ret = "00000422"; - break; - case 383362360674: // be-BY - ret = "00000423"; - break; - case 314928098419: // sl-SI - ret = "00000424"; - break; - case 297513350245: // et-EE - ret = "00000425"; - break; - case 370645235308: // lv-LV - ret = "00000426"; - break; - case 362055300204: // lt-LT - ret = "00000427"; - break; - case 353415029094: // fa-IR - ret = "00000429"; - break; - case 336453265782: // vi-VN - ret = "0000042A"; - break; - case 331805981032: // hy-AM - ret = "0000042B"; - break; - case 357642892645: // eu-ES - ret = "0000042D"; - break; - case 76159121519464: // hsb-DE - ret = "0000042E"; - break; - case 323417369453: // mk-MK - ret = "0000042F"; - break; - case 280685802611: // st-ZA - ret = "00000430"; - break; - case 280685802356: // ts-ZA - ret = "00000431"; - break; - case 280685801076: // tn-ZA - ret = "00000432"; - break; - case 280685798774: // ve-ZA - ret = "00000433"; - break; - case 280685799544: // xh-ZA - ret = "00000434"; - break; - case 280685802874: // zu-ZA - ret = "00000435"; - break; - case 280685799009: // af-ZA - ret = "00000436"; - break; - case 297546899819: // ka-GE - ret = "00000437"; - break; - case 340479799142: // fo-FO - ret = "00000438"; - break; - case 336235161960: // hi-IN - ret = "00000439"; - break; - case 362072077421: // mt-MT - ret = "0000043A"; - break; - case 340614014323: // se-NO - ret = "0000043B"; - break; - case 32196334487169401: // yi-Hebr - ret = "0000043D"; - break; - case 383546913645: // ms-MY - ret = "0000043E"; - break; - case 387808324459: // kk-KZ - ret = "0000043F"; - break; - case 306203949419: // ky-KG - ret = "00000440"; - break; - case 297614014323: // sw-KE - ret = "00000441"; - break; - case 332124744564: // tk-TM - ret = "00000442"; - break; - case 366450930804: // tt-RU - ret = "00000444"; - break; - case 336235163234: // bn-IN - ret = "00000445"; - break; - case 336235159920: // pa-IN - ret = "00000446"; - break; - case 336235165031: // gu-IN - ret = "00000447"; - break; - case 336235164271: // or-IN - ret = "00000448"; - break; - case 336235159924: // ta-IN - ret = "00000449"; - break; - case 336235160948: // te-IN - ret = "0000044A"; - break; - case 336235163243: // kn-IN - ret = "0000044B"; - break; - case 336235162733: // ml-IN - ret = "0000044C"; - break; - case 336235164513: // as-IN - ret = "0000044D"; - break; - case 336235164269: // mr-IN - ret = "0000044E"; - break; - case 336235159923: // sa-IN - ret = "0000044F"; - break; - case 336302272109: // mn-MN - ret = "00000450"; - break; - case 336134500194: // bo-CN - ret = "00000451"; - break; - case 284662004067: // cy-GB - ret = "00000452"; - break; - case 310498913643: // km-KH - ret = "00000453"; - break; - case 280450920300: // lo-LA - ret = "00000454"; - break; - case 332007307629: // my-MM - ret = "00000455"; - break; - case 357642890343: // gl-ES - ret = "00000456"; - break; - case 86076201594731: // kok-IN - ret = "00000457"; - break; - case 86076201463405: // mni-IN - ret = "00000458"; - break; - case 98213779634547: // syr-SY - ret = "0000045A"; - break; - case 323400591731: // si-LK - ret = "0000045B"; - break; - case 361937857889: // am-ET - ret = "0000045E"; - break; - case 27691691065308011: // ks-Arab - ret = "00000460"; - break; - case 344908981614: // ne-NP - ret = "00000461"; - break; - case 327729117542: // fy-NL - ret = "00000462"; - break; - case 301741208432: // ps-AF - ret = "00000463"; - break; - case 79509196663142: // fil-PH - ret = "00000464"; - break; - case 370662012516: // dv-MV - ret = "00000465"; - break; - case 78401095231842: // bin-NG - ret = "00000466"; - break; - case 78401095759206: // fuv-NG - ret = "00000467"; - break; - case 78401094443625: // ibb-NG - ret = "00000469"; - break; - case 306254278521: // yo-NG - ret = "0000046A"; - break; - case 87145649436017: // quz-BO - ret = "0000046B"; - break; - case 71855565140846: // nso-ZA - ret = "0000046C"; - break; - case 366450925922: // ba-RU - ret = "0000046D"; - break; - case 366350262892: // lb-LU - ret = "0000046E"; - break; - case 327611673707: // kl-GL - ret = "0000046F"; - break; - case 306254276457: // ig-NG - ret = "00000470"; - break; - case 306254279275: // kr-NG - ret = "00000471"; - break; - case 361937857903: // om-ET - ret = "00000472"; - break; - case 361937856884: // ti-ET - ret = "00000473"; - break; - case 383597244007: // gn-PY - ret = "00000474"; - break; - case 91625300124008: // haw-US - ret = "00000475"; - break; - case 31090208676864364: // la-Latn - ret = "00000476"; - break; - case 340697902963: // so-SO - ret = "00000477"; - break; - case 336134498665: // ii-CN - ret = "00000478"; - break; - case 16099256174666096: // pap-029 - ret = "00000479"; - break; - case 83851408732769: // arn-CL - ret = "0000047A"; - break; - case 71756780433261: // moh-CA - ret = "0000047C"; - break; - case 353364701794: // br-FR - ret = "0000047E"; - break; - case 336134498165: // ug-CN - ret = "00000480"; - break; - case 387858655597: // mi-NZ - ret = "00000481"; - break; - case 353364697967: // oc-FR - ret = "00000482"; - break; - case 353364701027: // co-FR - ret = "00000483"; - break; - case 90461363991399: // gsw-FR - ret = "00000484"; - break; - case 93811437494643: // sah-RU - ret = "00000485"; - break; - case 92664682018161: // qut-GT - ret = "00000486"; - break; - case 375040866162: // rw-RW - ret = "00000487"; - break; - case 336402935671: // wo-SN - ret = "00000488"; - break; - case 77245749359216: // prs-AF - ret = "0000048C"; - break; - case 78396800658544: // plt-MG - ret = "0000048D"; - break; - case 284661998695: // gd-GB - ret = "00000491"; - break; - case 87149942895985: // quc-CO - ret = "00000493"; - break; - case 349120066145: // ar-IQ - ret = "00000801"; - break; - case 336134498426: // zh-CN - ret = "00000804"; - break; - case 310364693860: // de-CH - ret = "00000807"; - break; - case 284662001253: // en-GB - ret = "00000809"; - break; - case 379251946341: // es-MX - ret = "0000080A"; - break; - case 297463018086: // fr-BE - ret = "0000080C"; - break; - case 310364697705: // it-CH - ret = "00000810"; - break; - case 297463016558: // nl-BE - ret = "00000813"; - break; - case 340614016622: // nn-NO - ret = "00000814"; - break; - case 362122409072: // pt-PT - ret = "00000816"; - break; - case 293352599410: // ro-MD - ret = "00000818"; - break; - case 293352600946: // ru-MD - ret = "00000819"; - break; - case 314709997171: // sv-FI - ret = "0000081D"; - break; - case 336235164277: // ur-IN - ret = "00000820"; - break; - case 76159121519460: // dsb-DE - ret = "0000082E"; - break; - case 374772428404: // tn-BW - ret = "00000832"; - break; - case 297748227443: // se-SE - ret = "0000083B"; - break; - case 297580454247: // ga-IE - ret = "0000083C"; - break; - case 336117724013: // ms-BN - ret = "0000083E"; - break; - case 293168049762: // bn-BD - ret = "00000845"; - break; - case 323400589684: // ta-LK - ret = "00000849"; - break; - case 361887526754: // bo-BT - ret = "00000851"; - break; - case 27433250048537451: // ks-Deva - ret = "00000860"; - break; - case 336235160942: // ne-IN - ret = "00000861"; - break; - case 73964394804593: // quz-EC - ret = "0000086B"; - break; - case 353347922292: // ti-ER - ret = "00000873"; - break; - case 306103284321: // ar-EG - ret = "00000C01"; - break; - case 323333482618: // zh-HK - ret = "00000C04"; - break; - case 361870746980: // de-AT - ret = "00000C07"; - break; - case 366165716581: // en-AU - ret = "00000C09"; - break; - case 357642892133: // es-ES - ret = "00000C0A"; - break; - case 280299926118: // fr-CA - ret = "00000C0C"; - break; - case 314709992819: // se-FI - ret = "00000C3B"; - break; - case 361887529572: // dz-BT - ret = "00000C51"; - break; - case 71799731285364: // tmz-MA - ret = "00000C5F"; - break; - case 76210662700401: // quz-PE - ret = "00000C6b"; - break; - case 383530136161: // ar-LY - ret = "00001001"; - break; - case 306338162810: // zh-SG - ret = "00001004"; - break; - case 366350263652: // de-LU - ret = "00001007"; - break; - case 280299925093: // en-CA - ret = "00001009"; - break; - case 361971413861: // es-GT - ret = "0000100A"; - break; - case 310364697190: // fr-CH - ret = "0000100C"; - break; - case 280283148904: // hr-BA - ret = "0000101A"; - break; - case 87197187992947: // smj-NO - ret = "0000103B"; - break; - case 387690885729: // ar-DZ - ret = "00001401"; - break; - case 340597237882: // zh-MO - ret = "00001404"; - break; - case 314810656100: // de-LI - ret = "00001407"; - break; - case 387858656869: // en-NZ - ret = "00001409"; - break; - case 353314370405: // es-CR - ret = "0000140A"; - break; - case 366350266982: // fr-LU - ret = "0000140C"; - break; - case 76223546551667: // smj-SE - ret = "0000143B"; - break; - case 280467698273: // ar-MA - ret = "00001801"; - break; - case 297580457573: // en-IE - ret = "00001809"; - break; - case 280518030181: // es-PA - ret = "0000180A"; - break; - case 289057632870: // fr-MC - ret = "0000180C"; - break; - case 87197187403123: // sma-NO - ret = "0000183B"; - break; - case 336419713633: // ar-TN - ret = "00001C01"; - break; - case 280685801061: // en-ZA - ret = "00001C09"; - break; - case 340446245733: // es-DO - ret = "00001C0A"; - break; - case 76223545961843: // sma-SE - ret = "00001C3B"; - break; - case 332040860257: // ar-OM - ret = "00002001"; - break; - case 331956973157: // en-JM - ret = "00002009"; - break; - case 297798562661: // es-VE - ret = "0000200A"; - break; - case 297731453542: // fr-RE - ret = "0000200C"; - break; - case 80565759077747: // sms-FI - ret = "0000203B"; - break; - case 297848894049: // ar-YE - ret = "00002401"; - break; - case 62887719431781: // en-029 - ret = "00002409"; - break; - case 340429468517: // es-CO - ret = "0000240A"; - break; - case 293184828006: // fr-CD - ret = "0000240C"; - break; - case 80565758750067: // smn-FI - ret = "0000243B"; - break; - case 383647576673: // ar-SY - ret = "00002801"; - break; - case 387657330277: // en-BZ - ret = "00002809"; - break; - case 297697899365: // es-PE - ret = "0000280A"; - break; - case 336402936422: // fr-SN - ret = "0000280C"; - break; - case 340546908769: // ar-JO - ret = "00002C01"; - break; - case 362189516389: // en-TT - ret = "00002C09"; - break; - case 353280815973: // es-AR - ret = "00002C0A"; - break; - case 331839533670: // fr-CM - ret = "00002C0C"; - break; - case 284745888353: // ar-LB - ret = "00003001"; - break; - case 375175081573: // en-ZW - ret = "00003009"; - break; - case 288923415397: // es-EC - ret = "0000300A"; - break; - case 314659664486: // fr-CI - ret = "0000300C"; - break; - case 374923424353: // ar-KW - ret = "00003401"; - break; - case 310582799973: // en-PH - ret = "00003409"; - break; - case 327544566629: // es-CL - ret = "0000340A"; - break; - case 327712338534: // fr-ML - ret = "0000340C"; - break; - case 297446240865: // ar-AE - ret = "00003801"; - break; - case 293285490277: // en-ID - ret = "00003809"; - break; - case 383681131365: // es-UY - ret = "0000380A"; - break; - case 280467698278: // fr-MA - ret = "0000380C"; - break; - case 310347919969: // ar-BH - ret = "00003c01"; - break; - case 323333484133: // en-HK - ret = "00003c09"; - break; - case 383597245285: // es-PY - ret = "00003c0A"; - break; - case 361988190822: // fr-HT - ret = "00003c0C"; - break; - case 280534807137: // ar-QA - ret = "00004001"; - break; - case 336235163237: // en-IN - ret = "00004009"; - break; - case 340412691301: // es-BO - ret = "0000400A"; - break; - case 383546912357: // en-MY - ret = "00004409"; - break; - case 370762675045: // es-SV - ret = "0000440A"; - break; - case 58498279633505: // ar-145 - ret = "00004801"; - break; - case 306338164325: // en-SG - ret = "00004809"; - break; - case 336218387301: // es-HN - ret = "0000480A"; - break; - case 297446239845: // en-AE - ret = "00004C09"; - break; - case 314844214117: // es-NI - ret = "00004C0A"; - break; - case 310347918949: // en-BH - ret = "00005009"; - break; - case 353532474213: // es-PR - ret = "0000500A"; - break; - case 306103283301: // en-EG - ret = "00005409"; - break; - case 357911327589: // es-US - ret = "0000540A"; - break; - case 340546907749: // en-JO - ret = "00005809"; - break; - case 62883491574629: // es-419 - ret = "0000580A"; - break; - case 374923423333: // en-KW - ret = "00005C09"; - break; - case 366199272293: // es-CU - ret = "00005C0A"; - break; - case 353599581797: // en-TR - ret = "00006009"; - break; - case 297848893029: // en-YE - ret = "00006409"; - break; - case 30525162628412258: // bs-Cyrl - ret = "0000641A"; - break; - case 31090208676868962: // bs-Latn - ret = "0000681A"; - break; - case 30525162628412019: // sr-Cyrl - ret = "00006C1A"; - break; - case 31090208676868723: // sr-Latn - ret = "0000701A"; - break; - case 7236979: // smn - ret = "0000703B"; - break; - case 30525162628414049: // az-Cyrl - ret = "0000742C"; - break; - case 7564659: // sms - ret = "0000743B"; - break; - case 26746: // zh - ret = "00007804"; - break; - case 28270: // nn - ret = "00007814"; - break; - case 29538: // bs - ret = "0000781A"; - break; - case 31090208676870753: // az-Latn - ret = "0000782C"; - break; - case 6385011: // sma - ret = "0000783B"; - break; - case 30525162628414069: // uz-Cyrl - ret = "00007843"; - break; - case 30525162628410989: // mn-Cyrl - ret = "00007850"; - break; - case 32490986339661161: // iu-Cans - ret = "0000785D"; - break; - case 32772461400254586: // zh-Hant - ret = "00007C04"; - break; - case 25198: // nb - ret = "00007C14"; - break; - case 29299: // sr - ret = "00007C1A"; - break; - case 30525162628409204: // tg-Cyrl - ret = "00007C28"; - break; - case 6452068: // dsb - ret = "00007C2E"; - break; - case 6974835: // smj - ret = "00007C3B"; - break; - case 31090208676870773: // uz-Latn - ret = "00007C43"; - break; - case 27691691065303408: // pa-Arab - ret = "00007C46"; - break; - case 29113346916445805: // mn-Mong - ret = "00007C50"; - break; - case 27691691065304179: // sd-Arab - ret = "00007C59"; - break; - case 31090208676869481: // iu-Latn - ret = "00007C5D"; - break; - case 31090208676865638: // ff-Latn - ret = "00007C67"; - break; - case 31090208676864360: // ha-Latn - ret = "00007C68"; - break; - case 8247321628869751653: // es-ES_tradnl - ret = "0000040A"; - break; - case 3273116894335166324: // tg-Cyrl-TJ - ret = "00000428"; - break; - case 3273681940383627873: // az-Latn-AZ - ret = "0000042C"; - break; - case 3273681940383627893: // uz-Latn-UZ - ret = "00000443"; - break; - case 3270024981755290739: // sd-Deva-IN - ret = "00000459"; - break; - case 8243109330706131043: - switch (((int64_t*)val)[1]) - { - case 0: // chr-Cher - ret = "00007C5C"; - break; - case 5461293: // chr-Cher-US - ret = "0000045C"; - break; - } - break; - case 3275082718046418281: // iu-Cans-CA - ret = "0000045D"; - break; - case 7089072912718461556: // tzm-Arab-MA - ret = "0000045F"; - break; - case 3273681940383621480: // ha-Latn-NG - ret = "00000468"; - break; - case 5200924699901388922: // zh-yue-HK - ret = "0000048E"; - break; - case 7308323309482173556: // tdd-Tale-CN - ret = "0000048F"; - break; - case 8461244814088890475: // khb-Talu-CN - ret = "00000490"; - break; - case 3270283422772065643: // ku-Arab-IQ - ret = "00000492"; - break; - case 7165064761224425585: - switch (((int64_t*)val)[1]) - { - case 109: // qps-plocm - ret = "000009FF"; - break; - case 97: // qps-ploca - ret = "000005FE"; - break; - case 0: // qps-ploc - ret = "00000501"; - break; - } - break; - case 7022850504597004643: // ca-ES-valencia - ret = "00000803"; - break; - case 3270580265393414506: // ja-Ploc-JP - ret = "00000811"; - break; - case 3273681940383625843: - switch (((int64_t*)val)[1]) - { - case 17741: // sr-Latn-ME - ret = "00002C1A"; - break; - case 21330: // sr-Latn-RS - ret = "0000241A"; - break; - case 16706: // sr-Latn-BA - ret = "0000181A"; - break; - case 21315: // sr-Latn-CS - ret = "0000081A"; - break; - } - break; - case 3273116894335171169: // az-Cyrl-AZ - ret = "0000082C"; - break; - case 3273116894335171189: // uz-Cyrl-UZ - ret = "00000843"; - break; - case 3270283422772060528: // pa-Arab-PK - ret = "00000846"; - break; - case 3271705078623202925: - switch (((int64_t*)val)[1]) - { - case 20045: // mn-Mong-MN - ret = "00000C50"; - break; - case 20035: // mn-Mong-CN - ret = "00000850"; - break; - } - break; - case 3270283422772061299: // sd-Arab-PK - ret = "00000859"; - break; - case 3273681940383626601: // iu-Latn-CA - ret = "0000085D"; - break; - case 7959093421278067316: - switch (((int64_t*)val)[1]) - { - case 0: // tzm-Latn - ret = "00007C5F"; - break; - case 5915693: // tzm-Latn-DZ - ret = "0000085F"; - break; - } - break; - case 3273681940383622758: // ff-Latn-SN - ret = "00000867"; - break; - case 3273116894335169139: - switch (((int64_t*)val)[1]) - { - case 17741: // sr-Cyrl-ME - ret = "0000301A"; - break; - case 21330: // sr-Cyrl-RS - ret = "0000281A"; - break; - case 16706: // sr-Cyrl-BA - ret = "00001C1A"; - break; - case 21315: // sr-Cyrl-CS - ret = "00000C1A"; - break; - } - break; - case 7453006945070185076: - switch (((int64_t*)val)[1]) - { - case 0: // tzm-Tfng - ret = "0000785F"; - break; - case 4279597: // tzm-Tfng-MA - ret = "0000105F"; - break; - } - break; - case 3273681940383626082: // bs-Latn-BA - ret = "0000141A"; - break; - case 3273116894335169378: // bs-Cyrl-BA - ret = "0000201A"; - break; - case 3270580265393418849: // ar-Ploc-SA - ret = "00004401"; - break; - } - - - - return(ret); -} - // Feed network data into the KVM. Return the number of bytes consumed. // This method consumes a single command. @@ -1430,34 +399,18 @@ int kvm_server_inputdata(char* block, int blocklen, ILibKVM_WriteHandler writeHa switch (type) { - case MNG_KVM_KEY_WITHLAYOUT: - if (size != 22) { break; } - char *klayout = kvm_getKeyboardLayoutCode(block + 6, 22); - if (klayout != NULL) - { - char current[KL_NAMELENGTH + 1]; - if (GetKeyboardLayoutNameA(current) != 0 && strcmp(current, klayout) == 0) - { - // Current keyboard layour matches the intended layout - KeyAction(block[5], block[4]); - } - else - { - HKL kb = LoadKeyboardLayoutA(klayout, KLF_ACTIVATE | KLF_REORDER); - if (kb != NULL) - { - KeyActionEx(block[5], block[4], kb); - UnloadKeyboardLayout(kb); - } - } - } - break; case MNG_KVM_KEY: // Key { if (size != 6) break; KeyAction(block[5], block[4]); break; } + case MNG_KVM_KEY_UNICODE: // Unicode key + { + if (size != 7) break; + KeyActionUnicode(((((unsigned char)block[5]) << 8) + ((unsigned char)block[6])), block[4]); + break; + } case MNG_KVM_MOUSE: // Mouse { double x, y;