2007. július 25., szerda
How to keep your application focused at all times
Problem/Question/Abstract:
I want my application to keep focus at any time. So, if someone clicks another window, I want my application to retrieve back focus.
Answer:
Solve 1:
To get your application into the foreground in W98, ME, W2K and XP, instead of using SetForegroundWindow, try this:
procedure ShowMe;
var
Th1, Th2: Cardinal;
begin
Th1 := GetCurrentThreadId;
Th2 := GetWindowThreadProcessId(GetForegroundWindow, nil);
AttachThreadInput(Th2, Th1, true);
try
SetForegroundWindow(Application.Handle);
finally
AttachThreadInput(Th2, Th1, false);
end;
end;
Solve 2:
As well as the SetForegroundWindow (if you are using Win9X and not WinNT/2000), you could trick the system that your application is a running screensaver. In this case it will not loose focus, for screensavers by design maintain focus.
{ ... }
var
old: Bool;
begin
{Make it a Screensaver}
SystemParametersInfo(SPI_SCREENSAVERRUNNING, Word(True), @old, 0);
or
{Make it not a Screensaver}
SystemParametersInfo(SPI_SCREENSAVERRUNNING, Word(False), @old, 0);
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése