直前にフォーカスを持っていたウィンドウへペーストする方法

[戻る]
キット 2006/10/01(日) 22:09:41
現在ホットキー動作で動くアプリケーションを作って居ます。

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を行うときちんとペーストされる事からクリップ
ボードには正常に収まっている様です。

よろしくお願いいたします。

キット 2006/10/01(日) 22:59:20
あ、何か変

> この後、CopyFilesToClipBoard でファイルをクリップボードに入れて

は自作関数ですね...SetClipboardDataでセットしてます CF_HDROPを。
いずれにせよ、クリップボードは本質ではないので、詳細割愛します。
変なわき道ですみません。失礼しました。

古いスレッドには追加発言できません。