目前,我正在使用以下SendInput
hack刷新浏览器窗口:
void GenerateKey ( int vk , BOOL bExtended)
{
KEYBDINPUT kb={0};
INPUT Input={0};
// generate down
if ( bExtended )
kb.dwFlags = KEYEVENTF_EXTENDEDKEY;
kb.wVk = vk;
Input.type = INPUT_KEYBOARD;
Input.ki = kb;
::SendInput(1,&Input,sizeof(Input));
// generate up
::ZeroMemory(&kb,sizeof(KEYBDINPUT));
::ZeroMemory(&Input,sizeof(INPUT));
kb.dwFlags = KEYEVENTF_KEYUP;
if ( bExtended )
kb.dwFlags |= KEYEVENTF_EXTENDEDKEY;
kb.wVk = vk;
Input.type = INPUT_KEYBOARD;
Input.ki = kb;
::SendInput(1,&Input,sizeof(Input));
}
我用它像:
browserHandle = CWnd::FindWindow(NULL, "MyTitle - <insert browser name here>");
browserHandle->SetForegroundWindow();
GenerateKey(VK_F5, FALSE);
我认为这是一种非常不稳定的方法,而且非常难以预测。我知道这种方法会无法预测地失败,因为用户可能在文本编辑器中快速键入内容并且F5密钥生成可能永远不会到达我的浏览器窗口。
基本上我需要:
有没有winapi可以帮我这么做?我需要尊重用户首选项,如默认关联,标签行为等。我查看了IWebBrowser2
interface但是没有太深刻印象,因为它似乎只支持Internet Explorer。
有人可以告诉我一个更好的方法吗?