Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

[module] Tray 2.1


  • Please log in to reply
30 replies to this topic
majkinetor
  • Moderators
  • 4512 posts
  • Last active: May 20 2019 07:41 AM
  • Joined: 24 May 2006
T r a y

Tray icons monitor & controller


Download           Documentation


Notes
- How to automate tray icon menu selection reliably.
- See Appbar for one real life usage example.

Posted Image

Andreone
  • Members
  • 257 posts
  • Last active: Mar 19 2008 05:30 PM
  • Joined: 20 Jul 2007
Great :D Thank you very much.
It's good to know that we are not limited with the number of tray icons anymore.

Dragonscloud
  • Members
  • 96 posts
  • Last active: Jul 21 2010 08:33 PM
  • Joined: 16 Jul 2005
I will find this useful. Thanks. Looks pretty easy to use. :D
“yields falsehood when preceded by its quotation” yields falsehood when preceded by its quotation.

Junyx
  • Members
  • 124 posts
  • Last active: Nov 01 2015 06:37 PM
  • Joined: 11 Jul 2005
this piece of soft is very interesting!

@majkinetor:
is there a way to attach different menus to the tray icons?
with your test script every created icon shares the same menu.

i tried different things but wasn't able to do it the right way™.

regards...
Junyx

majkinetor
  • Moderators
  • 4512 posts
  • Last active: May 20 2019 07:41 AM
  • Joined: 24 May 2006
Yes, something like:

hIcon1 := Tray_Add(...)
hIcon2 := Tray_Add(...)

OnTrayIcon(wparam, lparam) {
	local msg
	static LBUTTONDOWN=0x201, LBUTTONUP=0x202, LBUTTONDBLCLK=203, RBUTTONDOWN=0x204, ....
	msg := lparam & 0xFFFF

	if (msg != RBUTTONUP)
		return

	if (wparam = hIcon1)
  	    ShowMenu(menu1)

	if (wparam = hIcon2)
  	    ShowMenu(menu2)
}

Posted Image

Junyx
  • Members
  • 124 posts
  • Last active: Nov 01 2015 06:37 PM
  • Joined: 11 Jul 2005
thanks, man!
will try it on weekend.
i thought my "solution" looked similar but didn't work out as expected...

Joy2DWorld
  • Members
  • 562 posts
  • Last active: Jun 30 2014 07:48 PM
  • Joined: 04 Dec 2006
interesting.

glanced at code but did not see, is there a reason is placing only lo-res version of icons ?
Joyce Jamce

majkinetor
  • Moderators
  • 4512 posts
  • Last active: May 20 2019 07:41 AM
  • Joined: 24 May 2006
LOL... well, there is a reason.
I am totaly bored by that topic (icons in the menus) and didn't find the way back then (while developing MMenu) to 1) load shell icons in any other size then 32 or 16, 2) make them hi res.

I beleive lexikos answered both of those questions, so perhaps we can summon him here for help instead of taking it hard way and browsing his Menu function.
Posted Image

Junyx
  • Members
  • 124 posts
  • Last active: Nov 01 2015 06:37 PM
  • Joined: 11 Jul 2005

hIcon1 := Tray_Add(...)
hIcon2 := Tray_Add(...)
OnTrayIcon(wparam, lparam) {
	local msg
	static LBUTTONDOWN=0x201, LBUTTONUP=0x202, LBUTTONDBLCLK=203, RBUTTONDOWN=0x204, ....
	msg := lparam & 0xFFFF
	if (msg != RBUTTONUP)
		return
	if (wparam = hIcon1)
  	    ShowMenu(menu1)
	if (wparam = hIcon2)
  	    ShowMenu(menu2)
}

i tried the code (merged it with your _Test.ahk) - but i won't work.
menu2 will be displayed, but not only for tray icon no. 2.
instead both tray menus will be set to menu2.

did you try your code yourself?

majkinetor
  • Moderators
  • 4512 posts
  • Last active: May 20 2019 07:41 AM
  • Joined: 24 May 2006
you didn't do something correctly.

This example works:

#NoTrayIcon
#SingleInstance force

	Gui,  +LastFound
	hwnd := WinExist()

	menus =
	(LTrim
			[TrayMenu1]
			11
			12

			[TrayMenu2]
			21
			22
			23
	)

	h1 := Tray_Add( hwnd, "OnTrayIcon", "res\new.ico")
	h2 := Tray_Add( hwnd, "OnTrayIcon", "res\new.ico")
return

TrayMenu1:
	msgbox Hi from menu1
return

TrayMenu2:
	msgbox Hi from menu2
return

OnTrayIcon(wparam, lparam) {
	local msg
	static LBUTTONDOWN=0x201, LBUTTONUP=0x202, LBUTTONDBLCLK=203, RBUTTONDOWN=0x204, RBUTTONUP=0x205, RBUTTONDBLCLK=0x206, MBUTTONDOWN=0x207, MBUTTONUP=0x208, MBUTTONDBLCLK=0x209
	msg := lparam & 0xFFFF

	if (msg != RBUTTONUP)
		return


	if (wparam=h1)
		 ShowMenu(menus, "TrayMenu1")
	else ShowMenu(menus, "TrayMenu2")
}

#include Tray.ahk
#include res\ShowMenu.ahk

Posted Image

Junyx
  • Members
  • 124 posts
  • Last active: Nov 01 2015 06:37 PM
  • Joined: 11 Jul 2005
okay, thanks. your last code worked for me.

Junyx

majkinetor
  • Moderators
  • 4512 posts
  • Last active: May 20 2019 07:41 AM
  • Joined: 24 May 2006
v1.0
<!-- m -->https://ahknet.autoh.../Tray/Tray.html<!-- m -->

majkinetor
  • Moderators
  • 4512 posts
  • Last active: May 20 2019 07:41 AM
  • Joined: 24 May 2006
v2.0a

- All globals removed.
- Module can now examine and modify 3thd pardy icons. See about for more information about the code.
- Add function now accepts icon resources.
- Several other APIs added.
- New samples.
- Docs updated.
Posted Image

majkinetor
  • Moderators
  • 4512 posts
  • Last active: May 20 2019 07:41 AM
  • Joined: 24 May 2006
* v2.1 *
+ Tray_Click - you can now send click to any tray icon (even hidden ones) and generally totally automate tray area
+ Tray_Disable -allows you to totally disable notification area.
+ Tray_Focus - allows you to focus tray icon or tray area. You can then use keyboard to launch menus or move around.
+ Tray_Rect - get coordiantes of the icon, screen or relative.
+ Sample updated - clicking on icon will now send click to icon, use shift left click to dbl left click the icon.
Posted Image

majkinetor
  • Moderators
  • 4512 posts
  • Last active: May 20 2019 07:41 AM
  • Joined: 24 May 2006
This is small example of how to select particular item from the menu of 3td party tray icon.

Program CCC.exe holds ATI video driver tray menu. I am selecting second item of the first submenu with the following code:

	BlockInput, on
	pos := Tray_Define("CCC.exe", "i")
	Tray_Click(pos, "R")
	WinWait, ahk_class #32768
;	WinHide, ahk_class #32768            ;this and next line are to hide the menu.
;	WinKill, ahk_class SysShadow
	ControlSend,,{Down}{Down}{Right}{Down}{ENTER},ahk_class #32768
	BlockInput, off
	ExitApp

This code is very reliable because it doesn't depend on Taskbar settings (if its hidden, on non-default position, disabled, etc...) and notification area settings (for instance, if icon is moved to the hidden icons)
Posted Image