Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Shell Ersatz - Tray Icons (https://www.delphipraxis.net/136703-shell-ersatz-tray-icons.html)

schwa226 6. Jul 2009 12:48


Shell Ersatz - Tray Icons
 
Hi,

nun habe ich wieder einmal eine Spezielle Frage!

Ich bin gerade dabei mich mit einem kleinen Shell Ersatz zu spielen!
D.H. Explorer.exe wird nicht geladen, sondern mein Programm.exe.

So wie ich gemerkt habe werden Services usw trotzdem Automatisch gestartet.
Die Programme die man im Autostart Ordner hatte muss man manuel starten.

Nun ist meine Frage:
Wenn ich so ein Programm lade und es hat ein Tray Icon ist dieses ja nicht sichtbar (Explorer.exe ist ja ncht geladen, also keine Taskleiste).

Wie finde ich das heraus ob ein Tray Icon bei dem geladenen Programm mit dabei ist? Wenn ich weis das es ein Tray Icon hat kann ich das ja aus der gestarteten EXE heraus holen und als Image auf eine Form legen. Dann müsste nur noch mit dem Click auf das Icon die Funktionen ausgeführt werden, was sonst auch in der Taskleiste ausgeführt wird.

Bin im Moment sehr ratlos wie man das machen könnte!?

:gruebel: :gruebel:

Kann da einer Helfen!?

schwa226 7. Jul 2009 14:43

Re: Shell Ersatz - Tray Icons
 
Keine einer eine Idee?

Auch hätte ich noch eine Frage wegen Globalen Hooks und Shell!

Ich mache in einer DLL einen globalen Keyboard Hook um meine Form anzeigen zu können:
Delphi-Quellcode:
function SetHookKeyBoard(WinHandle: HWND; MsgToSend: Integer;KeyBoardArray : Array of TKeyBoard): Boolean; stdcall;
var
  i : Integer;
begin
  Result := False;
  if (MMFDataKeyBoard = nil) and (MMFHandleKeyBoard = 0) then
  begin
    MMFHandleKeyBoard := CreateMMF(MMFNameKeyBoard, SizeOf(TMMFDataKeyBoard));
    if MMFHandleKeyBoard <> 0 then
    begin
      MMFDataKeyBoard := MapMMF(MMFHandleKeyBoard);
      if MMFDataKeyBoard <> nil then
      begin
        MMFDataKeyBoard.WinHandle := WinHandle;
        MMFDataKeyBoard.MsgToSend := MsgToSend;

        //get Array for shortcuts from the application
        for i := 0 to High(KeyBoardArray) do begin
          MMFDataKeyBoard.HandleHook[i].car1 := KeyBoardArray[i].car1;
          MMFDataKeyBoard.HandleHook[i].car2 := KeyBoardArray[i].car2;
          MMFDataKeyBoard.HandleHook[i].car3 := KeyBoardArray[i].car3;
        end;

        MMFDataKeyBoard.NextHook := SetWindowsHookEx(WH_GETMESSAGE, MsgFilterFuncKeyBoard, HInstance, 0);

        if MMFDataKeyBoard.NextHook = 0 then
          UnMapAndCloseMMFKeyBoard
        else
          Result := True;
      end
      else
      begin
        CloseMMF(MMFHandleKeyBoard);
        MMFHandleKeyBoard := 0;
      end;
    end;
  end;
end;
Das funktioniert so ganz gut, aber....

Wenn nun meine EXE als Shell geladen wird und kein Programm Fenster (egal ob Notepad, Taskmanager,...) sichtbar ist geht der Hook nicht!?

Sozusagen bei ganz leeren Desktop (nur Hintergrund zu sehen). Öffne ich dann den Taskmanager geht der Hook wieder!?

:wall: :wall:

himitsu 19. Jul 2009 06:04

Re: Shell Ersatz - Tray Icons
 
1. nur eine Frage pro Thread

2.
Zitat:

Zitat von schwa226
Nun ist meine Frage:
Wenn ich so ein Programm lade und es hat ein Tray Icon ist dieses ja nicht sichtbar (Explorer.exe ist ja ncht geladen, also keine Taskleiste).

ich vermute mal, da keine TNA existiert, daß auch keine Icons exisieren (die wurden von der API MSDN-Library durchsuchenShell_NotifyIcon einfach nicht erstellt)

schwa226 22. Jul 2009 08:42

Re: Shell Ersatz - Tray Icons
 
Danke!

Es haben sich mit der Zeit schon fast alle beide Fragen beantwortet!

Ich erzeuge eine eigene TNA und bekomme auch die Tray-Icons + WM_COPYDATA der Anwendungen!

Auch das mit dem Hook habe ich über einen HotKey gelößt. Nun geht es auch wenn kein Fenster sichtbar ist!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz