keybd_event не работает в activex, postmessage работает, но не может имитировать VK_BACK - PullRequest
2 голосов
/ 29 сентября 2011

Я разрабатываю плагин для браузера, который будет взаимодействовать с JavaScript.Я использовал фреймворк с открытым исходным кодом firebreath для разработки плагина, который бы упаковывал плагин NPAPI (не для браузеров) и activex (используемый в ie) в одном dll file.

Следующий код отлично работает в браузерах, отличных от ie, которые используют плагин NPAPI (" enter ", " delete"," backspace"можно нажимать правильно):

//VKey stands for the key users pressed like "VK_RETURN","VK_BACK","VK_DELETE",etc
 keybd_event(Vkey,0, KEYEVENTF_EXTENDEDKEY | 0,0);

Но если я запускаю плагин в т.е. , ничего не происходит.Я пробовал SendInput тоже, но все равно ничего не происходит:

    KEYBDINPUT kb={0}; 
    INPUT Input={0};  
    kb.wScan = VK_BACK; 
    kb.dwFlags = KEYEVENTF_UNICODE;  
    Input.type = INPUT_KEYBOARD; 
    Input.ki = kb;      
    ::SendInput(1,&Input,sizeof(Input));

Что странно, если комбинация клавиш работает правильно, т.е.например (ctrl + x):

>   keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL,0), 0 ,0);
>   keybd_event(bCharKey,(BYTE)0, 0 ,0);    
>   Sleep(10);
>   keybd_event(bCharKey,(BYTE)0, KEYEVENTF_KEYUP,0);
>   keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL,0),
>   KEYEVENTF_KEYUP,0);

Поэтому я изменяю keybd_event на PostMessage:

    ::PostMessage(hbrowser,WM_KEYDOWN,vKey,1); //vKey stands for key pressed    
    ::PostMessage(hbrowser,WM_KEYUP,vKey,1);

" VK_TAB ", " VK_DELETE"," VK_RETURN"," VK_TAB"," VK_SPACE"работает, но" VK_BACK"не работает.

...