Jump to content
AmbientMike

List applications open on the TaskBar?

Recommended Posts

Hi,

I am trying to find a way to detect if two applications are running (and visible in the GUI).  One sits in the system tray (which I've got sorted) but another launches (so is easily visible as a running process) but seems to delay until showing in the GUI but the "WinExists" command seems to pick it up a few seconds before it's actually visible!

The bit of script that detects the system tray app is modified from somewhere on these forums that finds the text labels from all of the tray icons...

Func Get_Systray_IconText($sToolTipTitle)
    Local $hSysTray_Handle = ControlGetHandle('[Class:Shell_TrayWnd]', '', '[Class:ToolbarWindow32;Instance:1]')
    Local $iSystray_ButCount = _GUICtrlToolbar_ButtonCount($hSysTray_Handle)
    Local $iSystray_ButtonNumber
    For $iSystray_ButtonNumber = 0 To $iSystray_ButCount - 1
        Local $sText = _GUICtrlToolbar_GetButtonText($hSysTray_Handle, $iSystray_ButtonNumber)
        If StringInStr($sText, $sToolTipTitle) = 1 Then
            Return $sText
        EndIf
    Next
    Return SetError(1, 0, "")
EndFunc

So I was hoping that there was something nearly identical that detects icons in the Taskbar in a near-identical way as ProcessExists and WinExists commands seem to detect it too early and I really need to detect the time that the window is visible to the user which seems to be when it spawns it's taskbar icon.

Any ideas?

Share this post


Link to post
Share on other sites

Hi,

- WinList() for active windows (even shows me all open FF tabs, cool, didn't know that :) )

- ProcessList() for processes

Edit: sorry, I get what your problem is.

Have you tried WinGetState() yet?

It can check if a certain window is visible.

Edited by Radiance

Share this post


Link to post
Share on other sites

Thanks, but I suspect that WinList() will also list the MSHTA.exe window I am looking for early as presumably is uses the same API as the WinExists command and the process opens some 10 seconds or so before the windows is visible so that is no use to me hence why I am looking specifically for when an icon is displayed on the taskbar.

Share this post


Link to post
Share on other sites

Did some playing around with above suggestion.

#include <WinAPI.au3>


While 1
    If Not WinExists(WinGetHandle("[CLASS:Notepad]")) Then
        ContinueLoop
    Else
        $hWnd = (WinGetHandle("[CLASS:Notepad]"))
        ConsoleWrite("Win now exists  " & @CRLF)
        $VAR = _WinAPI_IsWindowVisible($hWnd)
        ConsoleWrite("$VAR =  " & $VAR & @CRLF)
    EndIf
    Sleep(50)
WEnd
Console output
Win now exists  
$VAR =  0
Win now exists  
$VAR =  1
Win now exists  
$VAR =  1

It does seem that  "_WinAPI_IsWindowVisible" is showing False ($VAR = 0) for the first few seconds of loading the window that according to WinExists already exists.... so to speak ;)

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By newbie2019
      Cannot find example how to locate taskbar icon coordinates or position by window handle.
      I want to use PixelChecksum to check only rectangle area over specified taskbar item.
      Please help.
      What I already have found and succesfully run for whole taskbar area:
      $taskbar = WinGetHandle("[Class:Shell_TrayWnd]") $taskbarPos = WinGetPos($taskbar) $tasklistPos = ControlGetPos($taskbar, "", "[CLASS:MSTaskListWClass; INSTANCE:1]")  $iOldCheckSum = PixelChecksum($taskbarPos[0] + $tasklistPos[0], $taskbarPos[1] + $tasklistPos[1], $taskbarPos[0] + $tasklistPos[2], $taskbarPos[1] + $tasklistPos[3]);
      I know also that I can pass window handle as parameter to PixelChecksum, but don't know how to do this with taskbar icon.
       
      Also I was able to find something similar but seems outdated: WatchWindows

      __
      thanks in advance
    • By Miliardsto
      I have the following code. You can see there are $color_normal and $color_trans
      In my case normal is too dark . And color trans is to much violet.
      If you run it you will see how its looks. I want gui with listView have the same color like taskbar in windows 10.
      How to achieve that?
       
       
      #include <Date.au3> #include <MsgBoxConstants.au3> #include <GuiListBox.au3> #include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> HotKeySet("{ESC}", "Terminate") $color_normal = "0x" & StringLeft(StringRight(RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent", "AccentPalette"), 24), 6) $color_trans = "0x" & StringLeft(StringRight(RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent", "AccentPalette"), 16), 6) $trans = RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize", "EnableTransparency") ConsoleWrite("Transpart = " & $trans & @CRLF) ConsoleWrite("Color normal = " & $color_normal & @CRLF) ConsoleWrite("Color trans = " & $color_trans & @CRLF) ConsoleWrite(_Get_taskbar_color()); It return AARRGGBB $taskbarColor = _Get_taskbar_color() Global $gui = GUICreate("Test", 150, 58,@DesktopWidth-300,@DesktopHeight-58,$WS_POPUP,BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW)) Global $idListview = GUICtrlCreateListView("", 0, 0, 150, 58,BitOR($LBS_NOTIFY,$LBS_SORT), 0) ;_GuiCtrlMakeTrans(-1,100) ; Add column _GUICtrlListView_AddColumn($idListview, "Msgs", 100) GUICtrlSetFont(-1, 7, 400, 0, "Segoe UI") GUICtrlSetColor(-1, 0x470C4F) GUICtrlSetBkColor($idListview, 0x310638) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Func Terminate() Exit EndFunc Func _Get_taskbar_color() If RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize", "ColorPrevalence") Then If RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize", "EnableTransparency") Then Return "0xD9" & StringLeft(StringRight(RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent", "AccentPalette"), 16), 6) Else Return "0xFF" & StringLeft(StringRight(RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent", "AccentPalette"), 24), 6) EndIf Else If RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize", "EnableTransparency") Then Return "0xD9000000" Else Return "0xFF000000" EndIf EndIf EndFunc  
    • By Errious
      Hello,
       
      is it possible to use an autoit script to show a live preview from a minimized program?
      I searched for this and found many different little tools but none of them offered this Option so far.
      You may ask why someone should use this, for me it should be a live preview from different clients of a game, when minimized the game itself is not using much resources but with multiple clients running its to heavy for my rig so i try to find a way to still observe what is happening ingame on this minimized clients.
      Would be nice if somebody leads me into the right direction where i can / should begin with, cause i am not sure how this script should look like but maybe someone already tried this (my forum search was not successfull)?
       
      Regards
    • By Danyfirex
      HI. I was needing to add a program to Tarkbar(an easy way without using objectcreateinterface )   so I found this. So then I deduced how to add to the StartMenu while I see the shell32 in hex editor search for taskbarunpin|taskbarpin string. I found another two interesting string (startpin|startunpin) So I try out and they work too but to add to StartMenu.
      This is not an official way to do this, however it works.
      $sFileLnk parameter must be Link(.lnk) to our program.
      ;~ Success: True. ;~ Failure: False. Func DeleteFromTaskBar($sFileLnk) Return _WinAPI_ShellExecute($sFileLnk,"","", "taskbarunpin") EndFunc Func AddToTaskBar($sFileLnk) Return _WinAPI_ShellExecute($sFileLnk,"","", "taskbarpin") EndFunc Func AddToStartMenu($sFileLnk) Return _WinAPI_ShellExecute($sFileLnk,"","", "startpin") EndFunc Func DeleteFromStartMenu($sFileLnk) Return _WinAPI_ShellExecute($sFileLnk,"","", "startunpin") EndFunc  
      Saludos
    • By timmalos
      Hello guys.
      I have a little issue and I can't find any answer sadly so I'm opening this post.
      I created a tool with AutoIt, but sadly on Windows 8.1 I can't pin it to my taskbar, I have no idea why. If I take any other program for example Firefox, when it's started and I do a right click on the icon in the taskbar I can have a nice menu and just below "Exit window" I have an option "Pin this program to the TaskBar" (or Unpin if already clicked), but with my AutoIt script (compiled) I have only the Exit button.
      Do you know if there is a Windows option to add to GuiCtrlCreateGui() or anything I can do to be able to pin my program to the  windows 8.1 taskbar?
      Thank you very much,
      Tim
×
×
  • Create New...