現在ホットキー動作で動くアプリケーションを作って居ます。
WindowProc() にてWM_HOTKEYを捕まえ、
m_PrevWndHandle = ::GetForegroundWindow();
SetForegroundWindow();
の様に直前のウィンドウのHWNDを保持しています。
この後、CopyFilesToClipBoard でファイルをクリップボードに入れて
::SetForegroundWindow( m_PrevWndHandle );
while( ::GetForegroundWindow() == m_PrevWndHandle ){
PumpMessages(); // <= 自作のポンプ関数
}
Sleep( 200 ); // <= 適当に待って見る・・・。
PumpMessages();
keybd_event( VK_CONTROL, 0, 0, 0 );
keybd_event( 'V', 0, 0, 0 );
keybd_event( 'V', 0, KEYEVENTF_KEYUP, 0 );
keybd_event( VK_CONTROL, 0, KEYEVENTF_KEYUP, 0 );
の様に実装しています。
***
現象としては、時々狙い通りにファイルが直前のウィンドウにペーストされる
のですが、5回に1回程度しか成功せず、残り4回はクリップボードにはコピー
されているのですが、ペーストに失敗している様に見えます。
確実にペーストする為に、何か良い知恵は無いでしょうか?
::SetForegroundWindow() を ::BringWindowToTop( m_PrevWndHandle );等に
変えたり色々試したのですがどうも上手く行きません。
ウィンドウフォーカスはきちんと前のウィンドウに戻っていますし、暫く待った
後キーボード動作にて Ctrl+Vを行うときちんとペーストされる事からクリップ
ボードには正常に収まっている様です。
よろしくお願いいたします。
あ、何か変
> この後、CopyFilesToClipBoard でファイルをクリップボードに入れて
は自作関数ですね...SetClipboardDataでセットしてます CF_HDROPを。
いずれにせよ、クリップボードは本質ではないので、詳細割愛します。
変なわき道ですみません。失礼しました。