keybd_event在activex中不起作用,postmessage没有,但无法模拟VK_BACK

时间:2011-09-29 06:34:51

标签: internet-explorer plugins activex

我正在开发一个可以与javascript交互的浏览器插件。我使用开源框架 firebreath 来开发插件,其中包含 NPAPI (非ie浏览器)插件和 activex (用于ie )在一个 dll 文件中。

以下代码在使用 NPAPI 插件的非浏览器下完美运行(“输入”,“删除”,“< strong>退格“可以正确按下键”:

//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));

奇怪的是,键的组合在ie中正常工作。例如(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 “不起作用。

0 个答案:

没有答案