直前にフォーカスを持っていたウィンドウへペーストする方法 – プログラミング – Home

直前にフォーカスを持っていたウィンドウ...
 
通知
すべてクリア

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


キット
 キット
(@キット)
ゲスト
結合: 18年前
投稿: 14
Topic starter  

現在ホットキー動作で動くアプリケーションを作って居ます。

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

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


引用解決済
トピックタグ
キット
 キット
(@キット)
ゲスト
結合: 18年前
投稿: 14
Topic starter  

あ、何か変

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました