>>752
おらよ。動作確認はしてない。

procedure SetAbsoluteForegroundWindow(hWindow: HWND);
var
nTargetID, nForegroundID : Integer;
sp_time : DWORD;
begin
// フォアグラウンドウィンドウを作成したスレッドのIDを取得
nForegroundID := GetWindowThreadProcessId(GetForegroundWindow(), nil);
// 目的のウィンドウを作成したスレッドのIDを取得
nTargetID := GetWindowThreadProcessId(hWindow, nil );

// スレッドのインプット状態を結び付ける
AttachThreadInput(nTargetID, nForegroundID, TRUE ); // TRUE で結び付け

// 現在の設定を sp_time に保存
SystemParametersInfo( SPI_GETFOREGROUNDLOCKTIMEOUT,0,@sp_time,0);
// ウィンドウの切り替え時間を 0ms にする
SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT,0,Pointer(0),0);

// ウィンドウをフォアグラウンドに持ってくる
SetForegroundWindow(hWindow);

// 設定を元に戻す
SystemParametersInfo( SPI_SETFOREGROUNDLOCKTIMEOUT,0,Pointer(sp_time),0);

// スレッドのインプット状態を切り離す
AttachThreadInput(nTargetID, nForegroundID, FALSE ); // FALSE で切り離し

end;