![]() |
How to enumerate all trayicons in the taskbar
I asked this several times here on forum,is english the problem,you dont like me ?What is it?
I ask if its possible to get the icons that you see in your taskbar enumerated in a form??To get that in a form so you can interact with it? |
Re: Enumerate all icons in a panel?
If you don't get any answer it is best to clarify your question. It is most likely as no one can understand your question (not because its English) as no one likes you.
For example: the title says something "Enuemaret all icons in a panel" but in your question you mention icons in the taskbar. This may irritate some people. As the taskbar usually contains tasks instead of icons (the icons are only a visible hint to the task), your question can be read: How to enumerate all tasks in the taskbar? Try that and see what happens. |
Re: How to enumerate all trayicons in the taskbar
Basicly what i want to do is take all icons from Traynotifywnd and then show it in a form or panel,ive tried so many diffrent aproaches that i got sick of it quickly.
|
Re: How to enumerate all trayicons in the taskbar
Have a look at
![]() |
Re: How to enumerate all trayicons in the taskbar
I've tried this and it won't work in vista x64...Hook won't work.
Thanks though.. |
Re: How to enumerate all trayicons in the taskbar
Sorry im confused.
Do you really want only the icons, which you can see in the tray or do you want the icons AND the process which belongs to the specific icon and have control through it from your application? |
Re: How to enumerate all trayicons in the taskbar
i want complete tray funcionality on my form.Every icon that you see in tray
|
Re: How to enumerate all trayicons in the taskbar
Perhaps this helps...i know only there was a discussion and sourceCode to get all TrayProcesses...i didn´t tried if its work.
![]() |
Re: How to enumerate all trayicons in the taskbar
I will test it and thanks also!
|
Re: How to enumerate all trayicons in the taskbar
Zitat:
|
Re: How to enumerate all trayicons in the taskbar
Zitat:
Can somebody test this on vista for me it won't work. |
Re: How to enumerate all trayicons in the taskbar
Now i have to install 32 bit version of vista just becouse of delphi :x .Is there really no other way?
|
Re: How to enumerate all trayicons in the taskbar
Don't use Delphi then, because Delphi can't compile 64bit modules, which are required for hooks in a 64bit environment, no matter if XP or Vista.
This statement was already made here in this thread. --> ![]() |
Re: How to enumerate all trayicons in the taskbar
But if we talk wich Language is the easiest i would say its delphi.So yea ill go to vista 32.
|
Re: How to enumerate all trayicons in the taskbar
Depends on what you want to make. If you use Windows API then it really doesn't matter if you use Delphi or C++. There are the language differences, but the API calls are almost the same.
|
Re: How to enumerate all trayicons in the taskbar
I won't reformat the solution is in virtualization. :-D
|
Re: How to enumerate all trayicons in the taskbar
I got an idea what if i make the dll that contains everything to enumerate the tray in Lazerous 64 bit.Then call it from delphi 2009 would this work!
|
Re: How to enumerate all trayicons in the taskbar
why don't you use the predefined messages ?
just try to get the informations by sending --"TB_BUTTONCOUNT" (-> tells you how many "buttons" there are) --"TB_GETBUTTON" (-> moves the information to the allocated memory in the same process) to Shell_TrayWnd .-> TrayNotifyWnd .-> SysPager .-> ToolbarWindow32 :P |
Re: How to enumerate all trayicons in the taskbar
Liste der Anhänge anzeigen (Anzahl: 2)
A demo application :)
( i used some code - snippets which i got from Jonas [thx ;)] ) |
Re: How to enumerate all trayicons in the taskbar
Zitat:
|
Re: How to enumerate all trayicons in the taskbar
:S
Im using the 32 bit system and it works fine ... :gruebel: |
Re: How to enumerate all trayicons in the taskbar
Zitat:
|
Re: How to enumerate all trayicons in the taskbar
ive just edited my previous post :)
Ok the current one (that ive just uploaded) should work on 64 bit systems.. |
Re: How to enumerate all trayicons in the taskbar
No, still doesn't work. Now I see four empty rectangles, but I have five two icons in the TNA and the icons aren't displayed anyway.
|
Re: How to enumerate all trayicons in the taskbar
:S
i have no idea why it does not work on 64 bit sys. yeah i know that problem :) e.g if i open the xplorer i cann see 7 entries in my program .. here is the code if someone needs it :)
Delphi-Quellcode:
(btw. thanks jonas - again :P)
//types
type TTBBUTTON = packed record // 20 iBitmap: Integer; idCommand: Integer; fsState: Byte; fsStyle: Byte; bReserved: array[1..2] of Byte; dwData: Longint; iString: Integer; end; PTNAEntry = ^TTNAEntry; TTNAEntry = record hwnd: Cardinal; uID: Integer; uCallbackMessage: Cardinal; Unknwon1: Array[0..1] of Cardinal; hIcon: Cardinal; Unknwon2: Array[0..2] of Cardinal; uniPath: string; sTip: string; iBitmap: Cardinal; idCommand: Integer; fsState: byte; fsStyle: byte; dwData: Cardinal; iString: Cardinal; end; TTNAEntryArr = Array of TTNAEntry; // funcs function GetTNAEntries(): TTNAEntryArr; var but: TTBBUTTON; hWnd, PID, hProc: Cardinal; MEM: Pointer; Count: Cardinal; x: Cardinal; i: Integer; buf: WideChar; p: PWideChar; const TB_GETBUTTON = WM_USER+$17; //23; TB_BUTTONCOUNT = WM_USER+$18; //24; begin hWnd := FindWindowEx( FindWindowEx( FindWindowEx( FindWindow('Shell_TrayWnd',0), 0, 'TrayNotifyWnd', 0 ), 0, 'SysPager', 0 ), 0, 'ToolbarWindow32', 0 ); GetWindowThreadProcessID( hWnd, @PID ); try hProc := OpenProcess( PROCESS_ALL_ACCESS, False, PID ); MEM := VirtualAllocEx( hProc, nil, SizeOf(TTBButton), MEM_COMMIT, PAGE_EXECUTE_READWRITE ); Count := SendMessage( hWnd, TB_BUTTONCOUNT, 0, 0 ); SetLength(Result, Count); for i := 0 to Count - 1 do begin SendMessage( hWnd, TB_GETBUTTON, i, integer(MEM) ); ReadProcessMemory( hProc, MEM, @but, SizeOf(TTBBUTTON), x ); Move( but, Result[i].hwnd, sizeof(but) ); if but.iString > 0 then begin p := Pointer(but.iString); repeat ReadProcessMemory( hProc, p, @buf, 2, x ); inc(p); Result[i].sTip := Result[i].sTip + buf; until buf = #0; end; ReadProcessMemory( hProc, Pointer(but.dwData), @result[i].hwnd, 36, x ); end; finally VirtualFreeEx( hProc, MEM, SizeOf(TTBButton), MEM_DECOMMIT ); CloseHandle( hProc ); end; end; |
AW: How to enumerate all trayicons in the taskbar
Hi,
auch wenn es schon eine Weile her ist. Der Grund, warum es nicht auf 64bit funktioniert ist:
Code:
Ist zwar C++ Code, es sollte aber dennoch gut ersichtlich sein, daß die Struktur unter 64bit geringfügig anders ist. Die Struktur Deines Codes ist statisch und berücksichtigt das nicht. :thumb:
typedef struct _TBBUTTON {
int iBitmap; int idCommand; BYTE fsState; BYTE fsStyle; #ifdef _WIN64 BYTE bReserved[6] // padding for alignment #elif defined(_WIN32) BYTE bReserved[2] // padding for alignment #endif DWORD_PTR dwData; INT_PTR iString; } TBBUTTON, NEAR *PTBBUTTON *LPTBBUTTON; Oops, English required... :-) The structure on 64bit systems is slightly different (bigger). The structure you're using is static and does not consider the 64bit variant. Regards, Carsten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz