2009年5月22日金曜日

強制的に自分自身をフォアグラウンドアプリにする

http://hpcgi1.nifty.com/~kokubu/index.cgi?%B5%BB%BD%D1%A5%E1%A5%E2#i4

実は何をやってるのかよくわかっていなかったり。

------------------------------------

HWND hWnd_ = /* フォアグラウンドにするウインドウ */ ;
int fromId = GetWindowThreadProcessId(hWnd_, 0);
int toId = GetWindowThreadProcessId(GetForegroundWindow(), 0);
if (fromId == toId)
{
/* 既に自身がアクティブ ; そのままフォアグラウンド化して OK */
SetForegroundWindow(hWnd_);
}
else if (AttachThreadInput(fromId, toId, TRUE))
{
/* 違うスレッドがアクティブ ; 入力状態を共有した */
DWORD backup = 0UL;
SetActiveWindow(hWnd_);
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, &backup, 0);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)0, 0);
SetActiveWindow(hWnd_);
SetForegroundWindow(hWnd_);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, (LPVOID)backup, 0);
/* 入力状態共有を解除 */
AttachThreadInput(fromId, toId, FALSE);
}
else
{
/* 失敗 */
}

0 件のコメント:

コメントを投稿