掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
SetForegroundWindow でアクティブにならない場合には? (ID:111750)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
まず、SDKでSetForegroundWindowについて調べてみてください。 フォアグラウンドウィンドウを設定可能な条件が書かれています。 Win95/NT4までは、SetForegroundWindowだけでフォアグラウンドウィンドウを 切り替えられましたが、Win98/2000移行では、切り替え可能なプロセスは、 システムにより制限されるようになっています。 # メニュー選択や文字の入力中に、勝手にウィンドウが切り替えられてしまい、 # 作業中の処理が中断してしまうことを防ぐための仕様変更です。 で。処理の流れとしては、おそらくこんな感じになると思います。 手元にVB6が無いので、デバッグしておらず、処理のイメージだけでしか 書けませんが、特攻隊長まるるうさんなら、感じは掴めるかと思います。 '========================= '現在ユーザーが作業しているウィンドウを取得 h = GetForegroundWindow() 'フォアグラウンドウィンドウを作成したスレッドのIDを取得 ThreadID1 = GetWindowThreadProcessId(h, ByVal 0&) '目的のウィンドウを作成したスレッドのIDを取得 ThreadID2 = GetCurrentThreadId() '現在の入力状態を目的のスレッドにアタッチ AttachThreadInput ThreadID2, ThreadID1, 1 '現在の[フォアグラウンド ロック タイムアウト]の設定を取得 SystemParametersInfo SPI_GETFOREGROUNDLOCKTIMEOUT, 0, VarPtr(buf), 0 '設定を 0ms に変更 SystemParametersInfo SPI_SETFOREGROUNDLOCKTIMEOUT, 0, ByVal 0&, 0 'ようやく、本命の処理のお出まし SetForegroundWindow hWnd '設定を元に戻して… SystemParametersInfo SPI_SETFOREGROUNDLOCKTIMEOUT, 0, VarPtr(buf), 0 'デタッチしておしまい AttachThreadInput ThreadID2, ThreadID1, 0
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.