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 キーの生成がブラウザー ウィンドウに到達しない可能性があるため、このアプローチが予期せず失敗することはわかっています。
基本的に私はする必要があります:
- ユーザー イベント A で最初に HTML ファイルを表示します。
- ユーザー イベント A で、HTML ファイルを再度変更します。
- ファイルが既に表示されている場合は、ウィンドウを更新してください。
これを行うのに役立つwinapiはありませんか? デフォルトの関連付け、タブの動作などのユーザー設定を尊重する必要があります。IWebBrowser2
インターフェイスを見ましたが、Internet Explorer のみをサポートしているように見えたので、あまり感銘を受けませんでした。
誰かが私にもっと良い方法を教えてもらえますか?