Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
EnumTrayIcons Error
#1
There exist cases than I get the following run-time error in EnumTrayIcons:
Error (RT) in "EnumTrayIcons /522"oEnumTrayIcons: cannot get shared memory address

After executing : TBBUTTON* be=share(hwnd)

I would appreciate any suggenstions

Regards
#2
NOTE: Look for updated function in
EnumTrayIcons Error
or
Collected QM apps, functions, samples

Did you notice some specific conditions when it happens? For example, only when computer is busy, or only when some program is running.
Is it on Vista? If yes, is QM running as User (Options -> General).
How if you replace EnumTrayIcons code to this:

Function EnumTrayIcons
Code:
Copy      Help
;/
function hwnd ARRAY(TRAYICON)&a

;Gets tray icon data for all icons. The data contains button id, tooltips and visible/hidden state.

;hwnd - tray toolbar control handle or 0.

;EXAMPLE
;out
;type TRAYICON str'tooltip !hidden idCommand
;ARRAY(TRAYICON) a
;EnumTrayIcons 0 a
;int i
;for i 0 a.len
,;if(!a[i].hidden)
,,;out a[i].tooltip


a.redim
if(!hwnd) hwnd=child("" "ToolbarWindow32" "+Shell_TrayWnd" 0x1)
int i n=SendMessage(hwnd TB_BUTTONCOUNT 0 0)
if(!n) ret

TBBUTTON* bq=share
for i 0 1000
,TBBUTTON* be=share(hwnd)
,err if(i=999) end ES_FAILED; else 0.01; continue
,break
word* tq=bq+sizeof(TBBUTTON)
word* te=be+sizeof(TBBUTTON)

for i 0 n
,if(!SendMessage(hwnd TB_GETBUTTON i be)) continue
,if(SendMessage(hwnd TB_GETBUTTONTEXTW bq.idCommand te)<0) continue
,TRAYICON& ti=a[]
,ti.tooltip.ansi(tq)
,ti.hidden=bq.fsState&TBSTATE_HIDDEN!0
,ti.idCommand=bq.idCommand
#3
Thanks for this reply. I will try the suggested code and I will let you know accordingly.

Concerning the conditions requested :
1. It is not Vista, but XP-SP2
2. Yes, it happens when the computer is rather busy.
#4
3. The code proposed worked, but with an increased delay (0.05).
#5
Thank you, it will help me to find and fix this bug in share().
#6
Function EnumTrayIcons
Code:
Copy      Help
;/
function hwnd ARRAY(TRAYICON)&a

;Gets tray icon data for all icons. The data contains button id, tooltips and visible/hidden state.

;hwnd - tray toolbar control handle or 0.

;EXAMPLE
;out
;type TRAYICON str'tooltip !hidden idCommand
;ARRAY(TRAYICON) a
;EnumTrayIcons 0 a
;int i
;for i 0 a.len
,;if(!a[i].hidden)
,,;out a[i].tooltip
,,
;2nd example        
;out
;type TRAYICON str'tooltip !hidden idCommand
;ARRAY(TRAYICON) a
;EnumTrayIcons 0 a
;int i
;for i 0 a.len
,;out "%i - %i - %i - %s" i a[i].hidden a[i].idCommand a[i].tooltip



a.redim
if(!hwnd) hwnd=child("" "ToolbarWindow32" "+Shell_TrayWnd" 0x1)
int i n=SendMessage(hwnd TB_BUTTONCOUNT 0 0)
if(!n) ret

__ProcessMemory m.Alloc(hwnd 1000)
TBBUTTON b

str s

for i 0 n
,if(!SendMessage(hwnd TB_GETBUTTON i m.address)) continue
,m.Read(&b sizeof(b))
,int t=SendMessage(hwnd TB_GETBUTTONTEXTW b.idCommand m.address+100)
,if(t<=0) continue
,TRAYICON& ti=a[]
,m.ReadStr(s t*2 100 1)
,ti.tooltip=s
,ti.idCommand=b.idCommand
,ti.hidden=b.fsState&TBSTATE_HIDDEN!0

I welcome any comments and/or upgrading instructions
#7
Hello,

For me, it works well for the icons visible, but dont shows me the icons hidden!

Tried both examples, but no sucess.

Im using windows 7 64bits.

Any advice?
#8
Windows 7 shows hidden icons in a separate temporary window. This function cannot get them.
#9
OK.

I will explain my ideia and ask some help on this.

The final file is a generated exe.

At run time, i add a tray icon using 'AddTrayIcon' function to know that the program is running.
In a regular way, i want to show some messages using the ballon tooltip, pointing to the icon created by the exe.

It works ok if the icon is visible, but if the icon is hidden, the code to show the ballon, fails because dont find the icon.

i tried to 'force' the icon to show before send the message, using 'HideTrayIcon "dialog name" 0 ', but it seams its not working either!!

Any ideas?
#10
When fails to find icon, handle the error and show balloon above clock.
#11
Thanks.

I did it pointing to the arrow that you click when you want to view all the tray icons Smile


Forum Jump:


Users browsing this thread: 2 Guest(s)