> Uspeo sam da odredim da li je aplikacija aktivna pretrazivanjem procesa i to radi mnogo bolje
> nego FindWindow, ali nikako ne mogu da pomocu handle-a koji dobijam od tog procesa toj aplikaciji dam fokus...
Evo ti primer koji aktivira tekući program, samo zameni Application.Handle sa željenim prozorom.
Code:
procedure ActivateApplication;
var
ActiveThreadId, CurrentThreadId: DWORD;
begin
if GetForegroundWindow <> Application.Handle then
begin
ActiveThreadId := GetWindowThreadProcessId(GetForegroundWindow, nil);
CurrentThreadId := GetCurrentThreadId;
AttachThreadInput(CurrentThreadId, ActiveThreadId, True);
SetForegroundWindow(Application.Handle);
AttachThreadInput(CurrentThreadId, ActiveThreadId, False);
BringWindowToTop(Application.Handle);
end;
end;
> U cemu moze biti problem? Ima li neko neki predlog ili resenje za ovaj moj problem?
Windows od W2K (koliko se sećam), promenu aktivnog prozora sa SetForegrounWindow dozvoljava samo ako se izvršava iz procesa/threada koji je povezan sa trenutno aktivnim prozorom. ActivateApplication radi na tom principu.