できました!
というか、社内の別の人が組んでくれました。一応ご参考までに。
procedure SetForeWnd(hWnd:HWND);
var
dwID,dwForeID: DWORD;
begin
dwID := GetWindowThreadProcessId(hWnd, nil);
dwForeID := GetWindowThreadProcessId(GetForegroundWindow, nil);
if dwID = dwForeID then
begin
BringWindowToTop(hWnd);
end
else
begin
AttachThreadInput(dwID, dwForeID, True);
SetActiveWindow(hWnd);
AttachThreadInput(dwID, dwForeID, False);
BringWindowToTop(hWnd);
end;
end;

アクティブにしたいウィンドウのハンドルと現在アクティブなウィンドウのハンドルを比べ
異なるようであればアタッチして、ウィンドウをアクティブにし、再び切り離してる・・・ようです。