0

SendInput現在、次のハックを使用してブラウザー ウィンドウを更新しています。

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