Zitat von
alleinherrscher:
kann man denn irgendetwas in delphi schreiben, dass dafür sorgt, dass die taskleiste und desktop wieder geholt werden, ohne dass der focus von dem Programm auf die Taskleiste gesetzt wird?
Hallo,
wenn gar nicht anders, dann könntest du ja ein Timer oder einen Hook laufen lassen, der wenn das Fenster nach vorne kommt, es wieder hinter die Taskleiste setzt.
Delphi-Quellcode:
function CheckPosition(hWnd: THandle; hWin: PCardinal): Boolean; stdcall;
begin
Result:= false;
hWin^:= hWnd;
end;
function SetWinPos(hWnd: THandle; hWin: PCardinal): Boolean; stdcall;
var
ClName: array[0..64] of Char;
begin
Result := true;
if IsWindowVisible(hWnd) then
begin
windows.GetClassName(hWnd, ClName, SizeOf(ClName));
if string(ClName)= 'Shell_TrayWnd'then//Taskleiste
begin
SetWindowPos(hWin^, hwnd, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
Result := false;
end;
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var
hFremdesFenster, hGetForeground : HWND;
begin
hFremdesFenster := ...;
hGetForeground:= hFremdesFenster;
EnumWindows(@CheckPosition, cardinal(@hGetForeground));
if hGetForeground= hFremdesFenster then
EnumWindows(@SetWinPos, cardinal(@hFremdesFenster));
end;
Das
Handle des Fensters kannst du eventuell mit FindWindow() bekommen.
Oder das Fenster ganz nach hinten setzen
SetWindowPos(..., HWND_BOTTOM, 0, 0, 0, 0, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);