ioa747 Posted January 2, 2023 Posted January 2, 2023 (edited) TrayTipGUI.au3 is a custom GUI to send a message to the tray from other script ... and can accept multiple messages which remain on the screen without the script waiting for the shown time can also use any icon from an external file or internally from registered libraries TrayTipGUI.au3 expandcollapse popup;https://www.autoitscript.com/forum/topic/209408-traytipgui-to-send-a-message-to-the-tray/ #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7 ;TrayTipGUI.au3 ; custom GUI to send a message to the tray #NoTrayIcon #include <MsgBoxConstants.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <Array.au3> #include <WinAPIProc.au3> #include <WinAPISys.au3> Local $MinY Local $iParams = $CmdLine[0] If Not $iParams Then ; examle if no parameters Local $iParams[5] = [4, " * This is an example...", _ "This means that you have run the " & @CRLF _ & " --> " & @ScriptName & " <-- " & @CRLF & @CRLF _ & " without command line parameters." & @CRLF _ & " and for this reason act as demo.", 10, 2061] Else $iParams = $CmdLine EndIf TrayTipGUI($iParams[1], $iParams[2], $iParams[3], $iParams[4]) Exit Func TrayTipGUI($Title, $Msg, $Timeout = 5, $Icon = 0) ;Colors for the TrayMsg GUI. 0x14171b; 0xFFFFFF; 0xBBBBBB; Local $BackColor = 0x14171b, $TitleColor = 0xFFFFFF, $MsgColor = 0xBBBBBB ;Get DeskTop size Local $DTs = WinGetPos("[CLASS:Shell_TrayWnd]") ConsoleWrite("X=" & $DTs[0] & " Y=" & $DTs[1] & " W=" & $DTs[2] & " H=" & $DTs[3] & @CRLF) ; X=0 Y=1040 W=1920 H=40 * <--- main value $MinY = $DTs[1] ;get the cnt of @TrayTipGUI Local $WinCnt = GetTrayCnt() + 1 ConsoleWrite("$WinCnt=" & $WinCnt & @CRLF) ;GUI ;~ Local $hGUI = GUICreate("@TrayTipGUI", 450, 150, @DesktopWidth - 460, @DesktopHeight, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST)) Local $hGUI = GUICreate("@TrayTipGUI", 450, 150, $DTs[2] - 460, $DTs[1] + $DTs[3], $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST)) GUISetBkColor($BackColor) WinSetTrans($hGUI, "", 245) ; * <-- transparency seting range 0 - 255 ;Exit button Local $idExit = GUICtrlCreateButton("X", 427, 3, 20, 20) GUICtrlSetFont(-1, 10, 800, 0, "Arial") GUICtrlSetBkColor(-1, $BackColor) GUICtrlSetColor(-1, $TitleColor) ;Title GUICtrlCreateLabel($Title, 10, 10, 410, 35) GUICtrlSetFont(-1, 11, 600, 0, "Arial") GUICtrlSetColor(-1, $TitleColor) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ;Msg Local $idMsg = GUICtrlCreateLabel($Msg, 80, 50, 360, 95) GUICtrlSetFont(-1, 11, 600, 0, "Arial") GUICtrlSetColor(-1, $MsgColor) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) ;~ ************ Icons Library ************************** ;~ C:\Windows\System32\imageres.dll $cnt = 334 --> 0000 ;~ C:\Windows\system32\shell32.dll $cnt = 329 --> 1000 ;~ C:\Windows\SysWOW64\wmploc.dll $cnt = 159 --> 2000 ;~ C:\Windows\System32\ddores.dll $cnt = 149 --> 3000 ;~ C:\Windows\System32\mmcndmgr.dll $cnt = 129 --> 4000 ;~ C:\Windows\system32\ieframe.dll $cnt = 103 --> 5000 ;~ C:\Windows\System32\compstui.dll $cnt = 101 --> 6000 ;~ C:\Windows\System32\setupapi.dll $cnt = 62 --> 7000 Switch $Icon Case 1 To 334 ; icon from C:\Windows\System32\imageres.dll $cnt = 334 GUICtrlCreateIcon("imageres.dll", $Icon * -1, 10, 43, 64, 64) Case 1001 To 1329 ; icon from C:\Windows\system32\shell32.dll $cnt = 329 $Icon -= 1000 GUICtrlCreateIcon("shell32.dll", $Icon * -1, 10, 43, 64, 64) Case 2001 To 2159 ; icon from C:\Windows\SysWOW64\wmploc.dll $cnt = 159 $Icon -= 2000 GUICtrlCreateIcon("wmploc.dll", $Icon * -1, 10, 43, 64, 64) Case 3001 To 3149 ; icon from C:\Windows\System32\ddores.dll $cnt = 149 $Icon -= 3000 GUICtrlCreateIcon("shell32.dll", $Icon * -1, 10, 43, 64, 64) Case 4001 To 4129 ; icon from C:\Windows\System32\mmcndmgr.dll $cnt = 129 $Icon -= 4000 GUICtrlCreateIcon("mmcndmgr.dll", $Icon * -1, 10, 43, 64, 64) Case 5001 To 5103 ; icon from C:\Windows\system32\ieframe.dll $cnt = 103 $Icon -= 5000 GUICtrlCreateIcon("ieframe.dll", $Icon * -1, 10, 43, 64, 64) Case 6001 To 6101 ; icon from C:\Windows\System32\compstui.dll $cnt = 101 $Icon -= 6000 GUICtrlCreateIcon("compstui.dll", $Icon * -1, 10, 43, 64, 64) Case 7001 To 7062 ; icon from C:\Windows\System32\setupapi.dll $cnt = 62 $Icon -= 7000 GUICtrlCreateIcon("setupapi.dll", $Icon * -1, 10, 43, 64, 64) Case Else Local $tmp = StringSplit($Icon, ",") If $tmp[0] = 1 Then ; single icon file If $tmp[1] = 0 Then ; if no icon maximize the msg GUICtrlSetPos($idMsg, 10, 48, 440, 97) ; 80, 50, 360, 90 Else ; single icon file GUICtrlCreateIcon($tmp[1], -1, 10, 43, 64, 64) EndIf ElseIf $tmp[0] = 2 Then ; if .dll file with icon index GUICtrlCreateIcon($tmp[1], $tmp[2] * -1, 10, 43, 64, 64) Else ; unknown situation MsgBox(0, "Else unknown situation", $Icon) EndIf EndSwitch GUISetState(@SW_SHOW, $hGUI) ;shows up the GUI Local $WPos = WinGetPos($hGUI) ;[0]=X; [1]=Y; [2]=Width; [3]=Height WinMove($hGUI, "", $WPos[0], $MinY - 150 - 10, $WPos[2], $WPos[3], 5) ; Begin the timer and store the handle Local $hTimer, $fDiff $hTimer = TimerInit() ;******************************************* Do ; Loop until the TimerDiff > $Timeout Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $idExit ExitLoop EndSwitch Sleep(100) ;Find the difference in time from the previous call of TimerInit $fDiff = TimerDiff($hTimer) Until $fDiff > $Timeout * 1000 ;******************************************* ;disappear the GUI WinMove($hGUI, "", $WPos[0], @DesktopHeight, $WPos[2], $WPos[3], 5) ;Delete the previous GUI and all controls. GUIDelete($hGUI) EndFunc ;==>TrayTipGUI ;---------------------------------------------------------------------------------------- Func GetTrayCnt() ;get the cnt of @TrayTipGUI Local $aData = _WinAPI_EnumDesktopWindows(_WinAPI_GetThreadDesktop(_WinAPI_GetCurrentThreadId())) Local $WinTitle, $WCnt, $WinPos For $i = 1 To $aData[0][0] $WinTitle = WinGetTitle($aData[$i][0]) If $WinTitle = "@TrayTipGUI" Then $WinPos = WinGetPos($aData[$i][0]) If $WinPos[1] < $MinY Then $MinY = $WinPos[1] $WCnt += 1 EndIf Next Return $WCnt EndFunc ;==>GetTrayCnt ;---------------------------------------------------------------------------------------- Example1.au3 - Example for using TrayTipGUI expandcollapse popup; https://www.autoitscript.com/forum/topic/209408-traytipgui-to-send-a-message-to-the-tray/ ;Example1.au3 - Example for using TrayTipGUI #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7 Local $Str = "This is an Example for using " & @CRLF _ & "--> TrayTipGUI.au3" & @CRLF _ & "and come in screen like notification" Tip($Str, "This is an example...", 6, 2060) Sleep(4000) $Str = "and can accept multiple messages " & @CRLF _ & "which remain on the screen" & @CRLF _ & "without the script waiting" & @CRLF _ & "for the shown time " Tip($Str, "This is another one example...", 7, '"shell32.dll", 236') ; with icon file Sleep(5000) $Str = "can also use any icon" & @CRLF _ & " from an external file" & @CRLF _ & "or internally from registered libraries" Tip($Str, "This is one more example...", 8, 1236) ; internal with 1236 Sleep(4000) Tip("This is the body " _ & "of the mesage " _ & "with multiline concatenation example", _ "This is the title ...", 8, 228) Sleep(5000) Tip("AutoIt v3 is a freeware BASIC-like scripting language " _ & "designed for automating the Windows GUI and general scripting. " _ & "It uses a combination of simulated keystrokes, " _ & "mouse movement and window control manipulation " _ & "in order to automate tasks in a way not possible " _ & "or reliable with other languages e.g. VBScript and SendKeys ", _ "This is an Example without icon for maximize the mesage area", 15, 0) ;---------------------------------------------------------------------------------------- Func Tip($Msg, $Title = "info", $Timeout = 3, $Icon = 2060) Local $FilePath = @ScriptDir & "\TrayTipGUI.au3" Local $Param = '"' & $Title & '" "' & $Msg & '" "' & $Timeout & '" "' & $Icon & '"' Run(FileGetShortName(@AutoItExe) & " " & FileGetShortName($FilePath) & " " & $Param) EndFunc ;==>Tip ;---------------------------------------------------------------------------------------- Example2.au3 - Example for using TrayTipGUI ; https://www.autoitscript.com/forum/topic/209408-traytipgui-to-send-a-message-to-the-tray/ ;Example2.au3 - Example for using TrayTipGUI #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7 Tip("so You can present the messages easy" & @CRLF & " without title") Sleep(3000) Tip("as you see It is more efficient to write") Sleep(3000) Tip("in the sense that you don't need an icon and a title every time") Sleep(4000) Tip("Of course, if you need them, you can put them on", "New Title...", 5, 2132) Sleep(4000) ;---------------------------------------------------------------------------------------- Func Tip($Msg, $Title = "info", $Timeout = 3, $Icon = 2060) Local $FilePath = @ScriptDir & "\TrayTipGUI.au3" Local $Param = '"' & $Title & '" "' & $Msg & '" "' & $Timeout & '" "' & $Icon & '"' Run(FileGetShortName(@AutoItExe) & " " & FileGetShortName($FilePath) & " " & $Param) EndFunc ;==>Tip ;---------------------------------------------------------------------------------------- [optional] Make_icon_katalog.au3 - Make_icon_katalog create 9 X *.jpg files with icons from the dll libraries as albums for easy using in TrayTipGUI.au3 expandcollapse popup;https://www.autoitscript.com/forum/topic/209408-traytipgui-to-send-a-message-to-the-tray/ #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7 ;Make_icon_katalog.au3 ; creating icons albums from the dll libraries #include <StaticConstants.au3> #include <ScreenCapture.au3> ;Icons Library Local $Ldll = "C:\Windows\System32\imageres.dll" ;$cnt = 334 --> 0000 $Ldll &= ";C:\Windows\system32\shell32.dll" ;$cnt = 329 --> 1000 $Ldll &= ";C:\Windows\SysWOW64\wmploc.dll" ;$cnt = 159 --> 2000 $Ldll &= ";C:\Windows\System32\ddores.dll" ;$cnt = 149 --> 3000 $Ldll &= ";C:\Windows\System32\mmcndmgr.dll" ;$cnt = 129 --> 4000 $Ldll &= ";C:\Windows\system32\ieframe.dll" ;$cnt = 103 --> 5000 $Ldll &= ";C:\Windows\System32\compstui.dll" ;$cnt = 101 --> 6000 $Ldll &= ";C:\Windows\System32\setupapi.dll" ;$cnt = 62 --> 7000 $Ldll = StringSplit($Ldll, ";") For $x = 1 To $Ldll[0] ConsoleWrite($Ldll[$x] & @CRLF) Example($Ldll[$x], $x) Next ShellExecute(@ScriptDir) Exit Func Example($IconLib, $Libfactor) $Libfactor = ($Libfactor - 1) * 1000 Local $cnt = _WinAPI_ExtractIconEx($IconLib, -1, 0, 0, 0) ConsoleWrite("$cnt = " & $cnt & @CRLF) Local $C, $Col, $R, $Row, $BtnSz = 48 $Col = (@DesktopWidth / 3 * 2) / $BtnSz $Row = Int($cnt / $Col) Local $hGUI = GUICreate($IconLib, $Col * $BtnSz + $BtnSz, $Row * $BtnSz, 0, 0, -1) Local $Icon[$cnt + 1] $Icon[0] = 0 Local $i = 1 For $R = 0 To $Row For $C = 0 To $Col ReDim $Icon[UBound($Icon) + 1] $Icon[$i] = GUICtrlCreateIcon($IconLib, -1 * $i, $C * $BtnSz, $R * $BtnSz, $BtnSz, $BtnSz) GUICtrlCreateLabel($i & " ", $C * $BtnSz, $R * $BtnSz, $BtnSz / 2, 12, $SS_RIGHT) ;GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT) GUICtrlSetTip($Icon[$i], "index " & $i) $i += 1 Next Next GUISetState(@SW_SHOW) WinWaitActive($hGUI, "", 5) If $Libfactor = 0 Then $Libfactor = "0000" Local $WPos = WinGetPos($hGUI) ; [0]=X [1]=Y [2]=Width [3]=Height ; Capture region _ScreenCapture_Capture(@ScriptDir & "\" & $Libfactor & ".jpg", $WPos[0], $WPos[1], $WPos[2], $WPos[3]) GUIDelete($hGUI) EndFunc ;==>Example Please, leave your comments and experiences here. Edited December 8, 2023 by ioa747 UpDate I know that I know nothing
SOLVE-SMART Posted January 2, 2023 Posted January 2, 2023 Hi @ioa747, I guess you will share some code, right 🤣 ?Best regardsSven________________Stay innovative! ==> AutoIt related: 🔗 GitHub, 🔗 Discord Server, 🔗 Cheat Sheet, 🔗 autoit-webdriver-boilerplate Spoiler 🌍 Au3Forums 🎲 AutoIt (en) Cheat Sheet 📊 AutoIt limits/defaults 💎 Code Katas: [...] (comming soon) 🎭 Collection of GitHub users with AutoIt projects 🐞 False-Positives 🔮 Me on GitHub 💬 Opinion about new forum sub category 📑 UDF wiki list ✂ VSCode-AutoItSnippets 📑 WebDriver FAQs 👨🏫 WebDriver Tutorial (coming soon)
ioa747 Posted January 2, 2023 Author Posted January 2, 2023 1 minute ago, SOLVE-SMART said: I guess you will share some code, right 🤣 ? comes I know that I know nothing
SOLVE-SMART Posted January 2, 2023 Posted January 2, 2023 Hi @ioa747, besides the fact that there are some other tray tip scripts exists here in the forum 😅 , you did a nice job 👍 . The style is nice and it moves fluently on my maschine. One quick suggestion: Please remove the created *.jpg files after the example ends (in Make_icon_katalog.au3). Best regardsSven________________Stay innovative! ==> AutoIt related: 🔗 GitHub, 🔗 Discord Server, 🔗 Cheat Sheet, 🔗 autoit-webdriver-boilerplate Spoiler 🌍 Au3Forums 🎲 AutoIt (en) Cheat Sheet 📊 AutoIt limits/defaults 💎 Code Katas: [...] (comming soon) 🎭 Collection of GitHub users with AutoIt projects 🐞 False-Positives 🔮 Me on GitHub 💬 Opinion about new forum sub category 📑 UDF wiki list ✂ VSCode-AutoItSnippets 📑 WebDriver FAQs 👨🏫 WebDriver Tutorial (coming soon)
ioa747 Posted January 2, 2023 Author Posted January 2, 2023 3 minutes ago, SOLVE-SMART said: One quick suggestion: Please remove the created *.jpg files after the example ends (in Make_icon_katalog.au3). the jpg file is useful because you can find the icon with one, e.g from 1000.jpg which is 'C:\Windows\system32\shell32.dll' index 260 = scissors for using in Tip("Title", "Masage", 8, 1260) I know that I know nothing
SOLVE-SMART Posted January 2, 2023 Posted January 2, 2023 Hi @ioa747,yes I saw this in your three files, but I simple mean you spread new files on the system without any hint or removing them. That's what I don't like. No big deal, don't worry. Just a suggestion of how to handle such things (IMO). Nevertheless, good job 😀 .Best regardsSven________________Stay innovative! ==> AutoIt related: 🔗 GitHub, 🔗 Discord Server, 🔗 Cheat Sheet, 🔗 autoit-webdriver-boilerplate Spoiler 🌍 Au3Forums 🎲 AutoIt (en) Cheat Sheet 📊 AutoIt limits/defaults 💎 Code Katas: [...] (comming soon) 🎭 Collection of GitHub users with AutoIt projects 🐞 False-Positives 🔮 Me on GitHub 💬 Opinion about new forum sub category 📑 UDF wiki list ✂ VSCode-AutoItSnippets 📑 WebDriver FAQs 👨🏫 WebDriver Tutorial (coming soon)
ioa747 Posted January 3, 2023 Author Posted January 3, 2023 @SOLVE-SMART Thanks for suggestion 3 hours ago, ioa747 said: Make_icon_katalog create 9 X *.jpg files fix-it 2 hours ago, SOLVE-SMART said: The style is nice and it moves fluently on my maschine. Out of curiosity what Display resolution you have? if other from 1920X1080 what value give line 37 ;Get DeskTop size Local $DTs = WinGetPos("[CLASS:Shell_TrayWnd]") ConsoleWrite("X=" & $DTs[0] & " Y=" & $DTs[1] & " W=" & $DTs[2] & " H=" & $DTs[3] & @CRLF) ; X=0 Y=1040 W=1920 H=40 * <--- main value because I only tested it in 1920X1080 Thanks again! I know that I know nothing
SOLVE-SMART Posted January 3, 2023 Posted January 3, 2023 (edited) @ioa747: 6 hours ago, ioa747 said: Out of curiosity what Display resolution you have? if other from 1920X1080 what value give line 37 ConsoleWrite("X=" & $DTs[0] & " Y=" & $DTs[1] & " W=" & $DTs[2] & " H=" & $DTs[3] & @CRLF) because I only tested it in 1920X1080 It worked fine on a 3440x1440 UltraWide monitor (curved). The console output is: "X=0 Y=1410 W=3440 H=30" which is correct as far as I understood 👍 . Best regardsSven________________Stay innovative! Edited January 3, 2023 by SOLVE-SMART ==> AutoIt related: 🔗 GitHub, 🔗 Discord Server, 🔗 Cheat Sheet, 🔗 autoit-webdriver-boilerplate Spoiler 🌍 Au3Forums 🎲 AutoIt (en) Cheat Sheet 📊 AutoIt limits/defaults 💎 Code Katas: [...] (comming soon) 🎭 Collection of GitHub users with AutoIt projects 🐞 False-Positives 🔮 Me on GitHub 💬 Opinion about new forum sub category 📑 UDF wiki list ✂ VSCode-AutoItSnippets 📑 WebDriver FAQs 👨🏫 WebDriver Tutorial (coming soon)
ioa747 Posted January 3, 2023 Author Posted January 3, 2023 1 hour ago, SOLVE-SMART said: It worked fine on a 3440x1440 UltraWide monitor (curved). The console output is: "X=0 Y=1410 W=3440 H=30" which is correct as far as I understood 👍 . that is great !! Thank you! I know that I know nothing
ioa747 Posted January 6, 2023 Author Posted January 6, 2023 After some time of using it I realized that makes the title optional is more efficient Example2.au3 - makes the title optional ;https://www.autoitscript.com/forum/topic/209408-traytipgui-to-send-a-message-to-the-tray/ #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7 ;Example2.au3 ; Example for using TrayTipGUI Tip("so You can present the messages easy" & @CRLF & " without title") Sleep(3000) Tip("as you see It is more efficient to write") Sleep(3000) Tip("in the sense that you don't need an icon and a title every time") Sleep(4000) Tip("Of course, if you need them, you can put them on","New Title...",5,2132) Sleep(4000) ;---------------------------------------------------------------------------------------- Func Tip($Msg, $Title = "info", $Timeout = 3, $Icon = 2060) Local $FilePath = @ScriptDir & "\TrayTipGUI.au3" Local $Param = '"' & $Title & '" "' & $Msg & '" "' & $Timeout & '" "' & $Icon & '"' Run(FileGetShortName(@AutoItExe) & " " & FileGetShortName($FilePath) & " " & $Param) EndFunc ;==>Tip ;---------------------------------------------------------------------------------------- SOLVE-SMART 1 I know that I know nothing
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now