我正在开发一个可以与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 “不起作用。