我有一個主程序,啟動後1分鐘將會用showmodal彈出一個dialog。我先把這個主程序最小化,然後打開其它程序,例如IE,一分鐘後將會自動彈出dialog,我想這個dialog在所有窗口前顯示并獲得焦點,我查了一些代碼,都一一試過,但還是不行。以下是我的代碼,在 dialog 的 onshow 事件中,我加入SetForegroundWindow( Self.Handle ); // 將本窗體移到前景
SetWindowPos( Self.Handle, HWND_TOPMOST, Self.Left, Self.Top, Self.Width, Self.Height, SWP_NOMOVE or SWP_NOSIZE); // 把它移到最前
SetFocus( Self.Handle ); // 使它獲得焦點這段代碼可以將dialog移到最前面,但還是獲取不了焦點,不知如何解決
SetWindowPos( Self.Handle, HWND_TOPMOST, Self.Left, Self.Top, Self.Width, Self.Height, SWP_NOMOVE or SWP_NOSIZE); // 把它移到最前
SetFocus( Self.Handle ); // 使它獲得焦點這段代碼可以將dialog移到最前面,但還是獲取不了焦點,不知如何解決
var
hForegdWnd: THandle;
dwCurID: THandle;
dwForeID: THandle;
begin
hForegdWnd := GetForegroundWindow();
if hForegdWnd <> Handle then
begin
if IsIconic(Application.Handle) then
Application.Restore;
dwCurID := GetCurrentThreadId();
dwForeID := GetWindowThreadProcessId(hForegdWnd, nil);
AttachThreadInput(dwCurID, dwForeID, TRUE);
SetForegroundWindow(Handle);
AttachThreadInput(dwCurID, dwForeID, FALSE);
end;
end;