Hallo,
kannst ja mal meinen Code testen:
Delphi-Quellcode:
uses TLHelp32;
procedure SetForeGround(ExeName: AnsiString);
type
ProcIdList = array of cardinal;
PProcIdList = ^ProcIdList;
function EnumWin(hWnd: THandle; PIdList: PProcIdList): Boolean; stdcall;
var
i: integer;
ProcId: cardinal;
begin
Result := True;
if IsWindowVisible(hWnd) then//and boolean(GetWindowLong(hWnd, GWL_HWNDPARENT)) then
begin
for i := low(PIdList^) to high(PIdList^) do
begin
GetWindowThreadProcessID(hWnd, ProcId);
if PIdList^[i] = ProcId then
SetForeGroundWindow(hWnd);
end;
end;
end;
var
hSnapShot: THandle;
ProcEntry: TProcessEntry32;
ProcList: ProcIdList;
begin
ExeName := UpperCase(ExeName);
hSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
try
ProcEntry.dwSize := SizeOf(ProcEntry);
if Process32First(hSnapShot, ProcEntry) then
repeat
if UpperCase(ExtractFileName(ProcEntry.szExeFile)) = ExeName then
begin
SetLength(ProcList,length(ProcList) + 1);
ProcList[high(ProcList)] := ProcEntry.th32ProcessID;
end;
until not Process32Next(hSnapShot, ProcEntry);
finally
CloseHandle(hSnapShot);
end;
EnumWindows(@EnumWin, integer(@ProcList));
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SetForeGround('notepad.exe');//Fenster vom Editor nach vorne bringen
end;
Wie Mazel es schon gesagt hat, kann eine Anwendung mehrere Fenster haben und das Programm kann mehrmals gestartet worden sein. Dann kann es sein, dass es dann nicht so funktioniert wie mann es möchte.