Entwickler-Ecke

Windows API - Shell_TrayWnd Position ändern


crncpz - Fr 09.05.08 10:39
Titel: Shell_TrayWnd Position ändern
Hallo

ich versuche gerade den tray Bereich in mein programm zu verschieben, das klappt auch mit der folgenden anweisung


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.Button1Click(Sender: TObject);
begin
  h := FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'TrayNotifyWnd', nil);
  Windows.SetParent(h, form1.Handle);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  h := FindWindowEx(form1.Handle, 0, 'TrayNotifyWnd', nil);
  Windows.SetParent(h, FindWindow('Shell_TrayWnd', nil));
end;


Mein Problem ist jetzt allerdings, das die leftposition beibehalten wird, die es in der Taskleiste hatte. Also ganz weit rechts.
Ich habe schon rum probiert, bekomme es aber nicht hin das ich left:=0 für das Shell_TrayWnd setzen kann.

vielen Dank für eure Hilfe


BenBE - Mo 12.05.08 16:46

SetWindowPos ;-)


crncpz - Mi 14.05.08 16:18

danke das klingt so als ob es funktionieren würde.

wenn ich das auf form1 anwende klappt das auch super und das fenster wird verschoben.

Delphi-Quelltext
1:
setwindowpos(form1.handle,HWND_TOPMOST,0,0,200,50,SWP_NOACTIVATE);                    


wenn ich aber versuche das auf den TrayNotifyWnd Bereich an zu wenden macht es überhaupt nichts?

Delphi-Quelltext
1:
2:
3:
4:
h := FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'TrayNotifyWnd', nil);
windows.SetParent(h,form1.Handle);
h := FindWindowEx(form1.Handle, 0, 'TrayNotifyWnd', nil);
setwindowpos(h,HWND_TOPMOST,0,0,200,50,SWP_NOACTIVATE);


hat jemand eine idee woran das liegen kann das sich TrayNotifyWnd nicht verschieben lässt?


BenBE - Mi 14.05.08 21:00

Der zweite FindWindow-Befehl ist überflüssig, da H zu dem Zeitpunkt schon das richtige Handle ist.


crncpz - Fr 16.05.08 12:52

ok das könnte man weglassen, aber die position wird leider noch immer nicht geändert.