0

目前,我正在使用以下SendInputhack 刷新浏览器窗口:

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 键的生成可能永远不会到达我的浏览器窗口。

基本上我需要:

  1. 首先在用户事件 A 上显示 HTML 文件。
  2. 再次在用户事件 A 上修改 HTML 文件。
  3. 如果文件已经显示,只需刷新窗口。

没有winapi可以帮助我做到这一点吗?我需要尊重用户偏好,如默认关联、选项卡行为等。我查看了IWebBrowser2界面,但并没有留下太多印象,因为它似乎只支持 Internet Explorer。

有人可以告诉我更好的方法吗?

4

0 回答 0