unit u_FrmTopMostActive; interface uses Winapi.Windows; implementation // 窗体置顶 procedure SetXwForegroundWindow(AHandle: Thandle); var hFgWin: Thandle; hFgThread: Thandle; begin ShowWindow(AHandle, SW_NORMAL); hFgWin := GetForegroundWindow; hFgThread := GetWindowThreadProcessID(hFgWin, nil); if AttachThreadInput(GetCurrentThreadID, hFgThread, true) then begin SetForegroundWindow(AHandle); AttachThreadInput(GetCurrentThreadID, hFgThread, false); end else SetForegroundWindow(AHandle); end; // 激活窗体 function SetSysFocus(AHandle: Thandle): boolean; var hThreadId: Thandle; hFgThreadId: Thandle; begin result := false; if not IsWindow(AHandle) then exit; hThreadId := GetWindowThreadProcessID(AHandle, nil); hFgThreadId := GetWindowThreadProcessID(GetForegroundWindow, nil); if AttachThreadInput(hThreadId, hFgThreadId, true) then begin SetFocus(AHandle); AttachThreadInput(hThreadId, hFgThreadId, false); end else SetFocus(AHandle); result := true; end; end.
使用方式
uses U_FrmTopmostActive;
//自己需要的处理完后调用,句柄测试为本窗体的句柄
SetXwForegroundWindow(Self.Handle);
SetSysFocus(Self.Handle);
感谢 晓不得2013老师 提供的代码并耐心指导(群:59129236)