[Delphi / ActiveX] Systray nabootsen

Pagina: 1
Acties:

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
Voor een geniaal idee waar ik aan bezig ben voor m'n active desktop wil ik een eigen systray bouwen in Delphi, En hiervan elk icon kunnen hosten in een activeX object. Dat laatste moet op zich het probleem niet zijn, maar het eerste dus wel...

Ik heb gisteravond een grote zoektocht gedaan door de google nieuwsgroeps, GoT en andere sites, en ik heb in ieder geval gevonden dat de class SysTray moet heten voordat het gaat werken, maar voorderest is er echt héél weinig sample code te vinden waar ik op verder kan borduren. (95% wat je vindt gaat over het aanmaken van alleen een systray icon voor je app)

Is er iemand die dit eerder gedaan heeft, bijvoorbeeld een eigen shell gebouwd heeft, en me een paar pointers kan geven? Ik hoef dus _geen_ compleet script, ik zou alleen graag een paar zoektips willen hebben :)

Stop uploading passwords to Github!


Verwijderd

Papa Eend schreef op 11 november 2003 @ 10:30:
Voor een geniaal idee waar ik aan bezig ben voor m'n active desktop wil ik een eigen systray bouwen in Delphi, En hiervan elk icon kunnen hosten in een activeX object. Dat laatste moet op zich het probleem niet zijn, maar het eerste dus wel...

Ik heb gisteravond een grote zoektocht gedaan door de google nieuwsgroeps, GoT en andere sites, en ik heb in ieder geval gevonden dat de class SysTray moet heten voordat het gaat werken, maar voorderest is er echt héél weinig sample code te vinden waar ik op verder kan borduren. (95% wat je vindt gaat over het aanmaken van alleen een systray icon voor je app)

Is er iemand die dit eerder gedaan heeft, bijvoorbeeld een eigen shell gebouwd heeft, en me een paar pointers kan geven? Ik hoef dus _geen_ compleet script, ik zou alleen graag een paar zoektips willen hebben :)
Zelf ben ik wel eens bezig geweest om een shell extension voor de explorer te maken (in Delphi). Hierbij had ik heel veel baat bij http://msdn.microsoft.com/library/default.asp

Veel succes

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
Verwijderd schreef op 11 november 2003 @ 12:28:
[...]

Zelf ben ik wel eens bezig geweest om een shell extension voor de explorer te maken (in Delphi). Hierbij had ik heel veel baat bij http://msdn.microsoft.com/library/default.asp

Veel succes
Jaaah de msdn zit uiteraard standaard in m'n toolbox. Maar waar te beginnen in de hooiberg...

Stop uploading passwords to Github!


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

wil je gelijk een nieuwe shell bouwen .. of wat is de bedoeling? Is dit voor jezelf ter "lering ende vermaak" of denk je dat je de eerste bent hiermee en een commercieel product gaat verkopen zo (dat laatste.. tja.. eeuh er zijn al veel variaties op het thema.. met een systray alternative.. zie bijvoorbeeld geoshell..)?

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
henkleerssen schreef op 11 november 2003 @ 13:12:
wil je gelijk een nieuwe shell bouwen .. of wat is de bedoeling? Is dit voor jezelf ter "lering ende vermaak" of denk je dat je de eerste bent hiermee en een commercieel product gaat verkopen zo (dat laatste.. tja.. eeuh er zijn al veel variaties op het thema.. met een systray alternative.. zie bijvoorbeeld geoshell..)?
Mjah het wordt niet helemaal een nieuwe shell, het wordt eerder een uit z'n krachten gegroeide active desktop. Ik ben inmiddels al bezig aan een activeX object dat de programma's die op de taskbar staan list en kan showen en hiden, en vandaar dat ik ook netjes de systray items erbij wil hebben. Die wil ik in een activex objectje proppen dat je netjes absolute kan positioneren in een webpage :)

Stop uploading passwords to Github!


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Klinkt interessant! Klinkt ook nieuw.. tja.. als ik wat meer wist over delphi .. dan kon ik je misschien helpen.. nu wist kan ik alleen maar te zeggen dat je niet het wiel nog een keer moet uitvinden..

Verwijderd

Wil je dat het bij jouw active automatisch terecht komt, of wil je gewoon checken wat er in de normale systray staat, en dit 'zeg maar' kopieeren??

Hier wat aan:
Bron: Unclutter Your System Tray (pcmag.com 1999)
Hooking Tray Messages
For TrayManager to control tray applications, I needed a way to intercept messages as they're sent to the Windows tray. This would allow me to extract information such as a tray item's icon, ToolTip text, and window handle. My first step in reaching this goal was to determine the message that Windows uses to exchange data between a task and the tray. I guessed that Windows might be using the WM_COPYDATA message. This provides simple interprocess communication (IPC) between Windows tasks, using file mapping to make the data referred to in the message's lParam addressable by both the receiving and calling task. I verified my hunch using the utility Spy++, provided with Visual C++, to trace messages sent to the tray.

Next I needed to determine the format of the data contained in the WM_COPYDATA message. I speculated that the data portion of the WM_COPYDATA message might be a NOTIFYICONDATA structure, since this structure is normally used in conjunction with the Windows API function Shell_NotifyIcon to add, modify, and delete tray items. As it turned out, the data portion of the WM_COPYDATA message did point to a structure that contained a NOTIFYICONDATA structure, plus an integer field indicating the type of operation to perform on the tray item. This value could be either NIM_ADD, NIM_DELETE, or NIM_MODIFY.

Now that I had determined the type of message and its format, my one remaining task was to figure out a way to intercept the messages in real time as they're sent to the tray. Since WM_COPYDATA messages are sent to window procedures, I needed a system hook to intercept messages as they're sent to a window procedure. Calling the SetWindowsHook API function with a hook type of WH_CALLWNDPROC let me do this. System hook callback procedures must be placed in DLLs so the code can be shared among all tasks. I developed Tmhook.dll to handle TrayManager's system hook requirements.

Using a system hook had an additional advantage. TrayManager uses module names to identify each tray application uniquely. Since the system hook is called in each task, it allowed me to use GetModuleFileName to retrieve each module's name as it sends the WM_COPYDATA message.

[ Voor 94% gewijzigd door Verwijderd op 11-11-2003 14:46 ]


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
Verwijderd schreef op 11 november 2003 @ 14:34:
Wil je dat het bij jouw active automatisch terecht komt, of wil je gewoon checken wat er in de normale systray staat, en dit 'zeg maar' kopieeren??

Hier wat aan:
Bron: Unclutter Your System Tray (pcmag.com 1999)


[...]
Ja! da's de bedoeling ja :)
Ik ga vandeweek thuis eens kijken of ik dit kan implementeren, m'n delphi is een beetje roestig na 2 jaar, maar het gaat wel lukken hoop ik :)

Stop uploading passwords to Github!


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02-2025
Vet! :D ik heb zojuist de source gevonden van traymanager v2 (die het dus óók in winnt/2k/xp doet \o/ ) . Ik link er hier maar niet naar, ivm de licensie die er op die sourcecode zit, maar met wat creatief googlen komt iemand die ook interesse heeft in de source er wel uit :)

I'll keep u guys posted :)

Stop uploading passwords to Github!


Verwijderd

ik heb ook nog zitten zoeken, je moet zover ik het zie beginnen met een systemwide hook, die alle messages afvangt. (ben nu bezig met m'n linux bak, dus ff verder geen tijd).

maar ik heb het vermoeden dat deze:
http://17slon.com/gp/gp/gpsyshook.htm

een boel moet helpen

[ Voor 25% gewijzigd door Verwijderd op 11-11-2003 23:31 ]

Pagina: 1