目前,我正在使用以下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 键的生成可能永远不会到达我的浏览器窗口。
基本上我需要:
- 首先在用户事件 A 上显示 HTML 文件。
- 再次在用户事件 A 上修改 HTML 文件。
- 如果文件已经显示,只需刷新窗口。
没有winapi可以帮助我做到这一点吗?我需要尊重用户偏好,如默认关联、选项卡行为等。我查看了IWebBrowser2
界面,但并没有留下太多印象,因为它似乎只支持 Internet Explorer。
有人可以告诉我更好的方法吗?