2015-07-12 3 views
4

Как я могу отправить весь код Unicode в 'keybd_event'. , ?Как отправить (keybd_event) Unicode Keys с C#

Я нашел 'Alt + Unicode (Десятичный код)' методы и код C++ ниже

Но я не смог попробовать в C#. ,

void TypingMessageFromCodePage(TCHAR* Message, UINT CodePage=0) 
{ 
    TCHAR Word[2]; 
    TCHAR WordCode[64]; 
    char MultiByte[64]; 

    static const BYTE NumCode[10]={0x2D, 0x23, 0x28, 0x22, 0x25, 0x0C, 0x27, 0x24, 0x26, 0x21}; 
    int Length = wcslen(Message); 

    for(int i=0; i<Length; i++) 
    { 
     Word[0] = Message[i]; 
     Word[1] = L'\0'; 

     WideCharToMultiByte(CodePage, 0, Word, -1, MultiByte, 64, NULL, NULL); 
     _itow((int)(((~MultiByte[0])^0xff)<<8)+((~MultiByte[1])^0xff), WordCode, 10); 

     keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0); 

     for(int j=0; j<wcslen(WordCode); j++) 
     { 
      keybd_event(NumCode[(int)WordCode[j]-48], MapVirtualKey(NumCode[(int)WordCode[j]-48], 0), 0, 0); 
      keybd_event(NumCode[(int)WordCode[j]-48], MapVirtualKey(NumCode[(int)WordCode[j]-48], 0), KEYEVENTF_KEYUP, 0); 
     } 
     keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0); 
    } 
} 

ответ

4

Не использовать keybd_event(). Вместо этого используйте SendInput(). Он имеет флаг KEYEVENTF_UNICODE для этой цели. Вы можете отправлять с него фактические кодовые модули UTF-16 (каждый char в .NET String кодируется как кодовый UTF-16). Не нужно моделировать Alt + xxxx коды вообще. Например:

https://stackoverflow.com/a/30630477/65863

https://stackoverflow.com/a/15442914/65863

https://stackoverflow.com/a/8885228/65863

+0

Ищете решение. SendInput() не работал для меня. –

+0

Тогда вы, вероятно, не используете его правильно. Он работает. –

+0

Большое спасибо Реми. Я не мог сделать это легко. Прочитав ваш ответ пару раз, выяснилось, что мне нужно делать. Большое спасибо. –

Смежные вопросы