Cha0sBG Posted August 11, 2008 Share Posted August 11, 2008 Hello again guys, Umm anyone can tell me what's wrong here? My script is sapouse to get the title of an active window from PID. And to minimize , maximize , hide , show that window ^^ from tray menu ^^ So here is my script: expandcollapse popup#Include <Constants.au3> #include <WindowsConstants.au3> #include <Process.au3> #include <Array.au3> #NoTrayIcon Opt("TrayMenuMode",1) $exe_name = "sro_client.exe" $winlist = ProcessList ($exe_name) GLOBAL $combo $settingsitem = TrayCreateMenu("Functions") $hidesro = TrayCreateItem("Hide Silkroad", $settingsitem) $showsro = TrayCreateItem("Show Silkroad", $settingsitem) $minsro = TrayCreateItem("Minimize Silkroad", $settingsitem) $maxsro = TrayCreateItem("Maximize Silkroad", $settingsitem) TrayCreateItem("") $aboutitem = TrayCreateItem("About") TrayCreateItem("") $exititem = TrayCreateItem("Exit") For $i = 1 To $winlist[0][0] GUICtrlSetData ($combo, WinGetTitle(_ProcessGetWinEx($winlist[$i][0],"","","",True))) Next TraySetState() While 1 $msg = TrayGetMsg() Select Case $msg = 0 ContinueLoop Case $msg = $aboutitem Msgbox(0,"Credits:","Made By Cha0sBG®") Case $msg = $exititem ExitLoop Case $msg = $hidesro WinSetState($combo, "", @SW_HIDE) Case $msg = $showsro WinSetState($combo, "", @SW_SHOW) Case $msg = $minsro WinSetState($combo, "", @SW_MINIMIZE) Case $msg = $maxsro WinSetState($combo, "", @SW_MAXIMIZE) EndSelect WEnd Exit Func _ProcessGetWinEx($ivPid, $svClass = "", $svTitle = "", $svText = "", $ivReturnOnlyFirstMatch = False) $ivPid = ProcessExists($ivPid) If Not $ivPid Then Return(SetError(1, 0, 0)) Local $avwArray = WinList() Local $avRet[1] = [0] For $i = 1 To $avwArray[0][0] $avClass = DllCall("User32.dll", "int", "GetClassName", "hwnd", $avwArray[$i][1], "str", "", "int", 4096) If WinGetProcess($avwArray[$i][1]) = $ivPid Then If $svClass = "" Or (IsArray($avClass) And $avClass[2] = $svClass) Then If ($svTitle = "" Or StringInStr($avwArray[$i][0], $svTitle)) And ($svText = "" Or StringInStr(WinGetText($avwArray[$i][1]), $svText)) Then $avRet[0] += 1 ReDim $avRet[$avRet[0]+1] $avRet[$avRet[0]] = $avwArray[$i][1] If $ivReturnOnlyFirstMatch Then $avRet = $avret[1] ExitLoop EndIf EndIf EndIf EndIf Next Return $avRet EndFunc If anyone can help i will be grateful ^^ Have Questions About GUI (Graphical User Interface) ? Post Them Here :GUI Help And Support ForumHave Questions About General AutoIt ? Post Them Here : General Help And Support ForumNew To AutoIt ? Be Shure To Check Out The FaQ's (Frequently Asked Questions) Or FaQ ¹ There You May Find Great Help That Will Guide You True The Wonderful Programming Language AutoItOthere Good Place To Get Some Knolage Of AutoIt Is The Example Script ForumNotice A Bug ? Please Go And Report it At Bug Report Section And Help The Devolepers Of AutoIt Update And Fix The Programming LanguageWant To Thank The People For This Great Forum And Programming Language ? Then DonateWhen You Found The Answer Your Looking For Please Add [Resolved] To The Thread's Name That Will Show Otheres That You Have Found What Your Looking For And They Whount Have To Enter The Thread. Link to comment Share on other sites More sharing options...
Andreik Posted August 11, 2008 Share Posted August 11, 2008 Try Return $avRet[0] When the words fail... music speaks. Link to comment Share on other sites More sharing options...
Cha0sBG Posted August 11, 2008 Author Share Posted August 11, 2008 umm AutoIt Error: Return $avRet[0] Subcript used with non-array variable :S Have Questions About GUI (Graphical User Interface) ? Post Them Here :GUI Help And Support ForumHave Questions About General AutoIt ? Post Them Here : General Help And Support ForumNew To AutoIt ? Be Shure To Check Out The FaQ's (Frequently Asked Questions) Or FaQ ¹ There You May Find Great Help That Will Guide You True The Wonderful Programming Language AutoItOthere Good Place To Get Some Knolage Of AutoIt Is The Example Script ForumNotice A Bug ? Please Go And Report it At Bug Report Section And Help The Devolepers Of AutoIt Update And Fix The Programming LanguageWant To Thank The People For This Great Forum And Programming Language ? Then DonateWhen You Found The Answer Your Looking For Please Add [Resolved] To The Thread's Name That Will Show Otheres That You Have Found What Your Looking For And They Whount Have To Enter The Thread. Link to comment Share on other sites More sharing options...
Andreik Posted August 11, 2008 Share Posted August 11, 2008 And for you what don't work? I can't test because $exe_name = "sro_client.exe" When the words fail... music speaks. Link to comment Share on other sites More sharing options...
Cha0sBG Posted August 11, 2008 Author Share Posted August 11, 2008 well just change "sro_client.exe" with notepad.exe Have Questions About GUI (Graphical User Interface) ? Post Them Here :GUI Help And Support ForumHave Questions About General AutoIt ? Post Them Here : General Help And Support ForumNew To AutoIt ? Be Shure To Check Out The FaQ's (Frequently Asked Questions) Or FaQ ¹ There You May Find Great Help That Will Guide You True The Wonderful Programming Language AutoItOthere Good Place To Get Some Knolage Of AutoIt Is The Example Script ForumNotice A Bug ? Please Go And Report it At Bug Report Section And Help The Devolepers Of AutoIt Update And Fix The Programming LanguageWant To Thank The People For This Great Forum And Programming Language ? Then DonateWhen You Found The Answer Your Looking For Please Add [Resolved] To The Thread's Name That Will Show Otheres That You Have Found What Your Looking For And They Whount Have To Enter The Thread. Link to comment Share on other sites More sharing options...
Andreik Posted August 11, 2008 Share Posted August 11, 2008 Work fine for me (notepad.exe) When the words fail... music speaks. Link to comment Share on other sites More sharing options...
Cha0sBG Posted August 11, 2008 Author Share Posted August 11, 2008 well can u give me bug free script with all fixed so i can try ? Have Questions About GUI (Graphical User Interface) ? Post Them Here :GUI Help And Support ForumHave Questions About General AutoIt ? Post Them Here : General Help And Support ForumNew To AutoIt ? Be Shure To Check Out The FaQ's (Frequently Asked Questions) Or FaQ ¹ There You May Find Great Help That Will Guide You True The Wonderful Programming Language AutoItOthere Good Place To Get Some Knolage Of AutoIt Is The Example Script ForumNotice A Bug ? Please Go And Report it At Bug Report Section And Help The Devolepers Of AutoIt Update And Fix The Programming LanguageWant To Thank The People For This Great Forum And Programming Language ? Then DonateWhen You Found The Answer Your Looking For Please Add [Resolved] To The Thread's Name That Will Show Otheres That You Have Found What Your Looking For And They Whount Have To Enter The Thread. Link to comment Share on other sites More sharing options...
Andreik Posted August 11, 2008 Share Posted August 11, 2008 well can u give me bug free script with all fixed so i can try ? Hey I replace only sro_client.exe with notepad.exe and script run without error and I can use all tray menu functions. When the words fail... music speaks. Link to comment Share on other sites More sharing options...
martin Posted August 11, 2008 Share Posted August 11, 2008 Hey I replace only sro_client.exe with notepad.exe and script run without error and I can use all tray menu functions.Your PC is very different to mine then There are a number of things wrong with the script. There is no gui created to hold the combo and no combo is created. The Global variable $combo will be initialized to "". Therefore, when you say WinsetState($combo,"",@SW_SHOW) you will be saying WInSEtSTate("","",@SW_SHOW) which means show the currently active window. The function _ProcessGetWinEx is being passed the name of the process when it should be passed the PID of the process. Here's a quick correction expandcollapse popup#Include <Constants.au3> #include <WindowsConstants.au3> #include <Process.au3> #include <Array.au3> #NoTrayIcon Opt("TrayMenuMode",1) $exe_name = "notepad.exe" $winlist = ProcessList ($exe_name) GLOBAL $gui,$combo;<----------------------------------added $gui = GUICreate("");<----------------------------------added $combo = GUICtrlCreateCombo("",10,10,180,25);<--------------added $settingsitem = TrayCreateMenu("Functions") $hidesro = TrayCreateItem("Hide Silkroad", $settingsitem) $showsro = TrayCreateItem("Show Silkroad", $settingsitem) $minsro = TrayCreateItem("Minimize Silkroad", $settingsitem) $maxsro = TrayCreateItem("Maximize Silkroad", $settingsitem) TrayCreateItem("") $aboutitem = TrayCreateItem("About") TrayCreateItem("") $exititem = TrayCreateItem("Exit") For $i = 1 To $winlist[0][0] $title = WinGetTitle(_ProcessGetWinEx($winlist[$i][1],"","","",true));<-----------changed ConsoleWrite($title & @CRLF) GUICtrlSetData ($combo, $title) Next TraySetState() While guigetmsg() <> -3 $msg = TrayGetMsg() Select Case $msg = 0 ContinueLoop Case $msg = $aboutitem Msgbox(0,"Credits:","Made By Cha0sBG®") Case $msg = $exititem ExitLoop Case $msg = $hidesro WinSetState($gui, "", @SW_HIDE);<----------changed Case $msg = $showsro WinSetState($gui, "", @SW_SHOW);<----------changed Case $msg = $minsro WinSetState($gui, "", @SW_MINIMIZE);<----------changed Case $msg = $maxsro WinSetState($gui, "", @SW_MAXIMIZE);<----------changed EndSelect WEnd Exit Func _ProcessGetWinEx($ivPid, $svClass = "", $svTitle = "", $svText = "", $ivReturnOnlyFirstMatch = False) $ivPid = ProcessExists($ivPid) If Not $ivPid Then Return(SetError(1, 0, 0)) Local $avwArray = WinList() Local $avRet[1] = [0] For $i = 1 To $avwArray[0][0] $avClass = DllCall("User32.dll", "int", "GetClassName", "hwnd", $avwArray[$i][1], "str", "", "int", 4096) If WinGetProcess($avwArray[$i][1]) = $ivPid Then If $svClass = "" Or (IsArray($avClass) And $avClass[2] = $svClass) Then If ($svTitle = "" Or StringInStr($avwArray[$i][0], $svTitle)) And ($svText = "" Or StringInStr(WinGetText($avwArray[$i][1]), $svText)) Then $avRet[0] += 1 ReDim $avRet[$avRet[0]+1] $avRet[$avRet[0]] = $avwArray[$i][1] If $ivReturnOnlyFirstMatch Then $avRet = $avret[1] ExitLoop EndIf EndIf EndIf EndIf Next Return $avRet EndFunc Serial port communications UDF Includes functions for binary transmission and reception.printing UDF Useful for graphs, forms, labels, reports etc.Add User Call Tips to SciTE for functions in UDFs not included with AutoIt and for your own scripts.Functions with parameters in OnEvent mode and for Hot Keys One function replaces GuiSetOnEvent, GuiCtrlSetOnEvent and HotKeySet.UDF IsConnected2 for notification of status of connected state of many urls or IPs, without slowing the script. Link to comment Share on other sites More sharing options...
Andreik Posted August 11, 2008 Share Posted August 11, 2008 Your PC is very different to mine then There are a number of things wrong with the script. There is no gui created to hold the combo and no combo is created. The Global variable $combo will be initialized to "". Therefore, when you say WinsetState($combo,"",@SW_SHOW) you will be saying WInSEtSTate("","",@SW_SHOW) which means show the currently active window. The function _ProcessGetWinEx is being passed the name of the process when it should be passed the PID of the process. Here's a quick correction expandcollapse popup#Include <Constants.au3> #include <WindowsConstants.au3> #include <Process.au3> #include <Array.au3> #NoTrayIcon Opt("TrayMenuMode",1) $exe_name = "notepad.exe" $winlist = ProcessList ($exe_name) GLOBAL $gui,$combo;<----------------------------------added $gui = GUICreate("");<----------------------------------added $combo = GUICtrlCreateCombo("",10,10,180,25);<--------------added $settingsitem = TrayCreateMenu("Functions") $hidesro = TrayCreateItem("Hide Silkroad", $settingsitem) $showsro = TrayCreateItem("Show Silkroad", $settingsitem) $minsro = TrayCreateItem("Minimize Silkroad", $settingsitem) $maxsro = TrayCreateItem("Maximize Silkroad", $settingsitem) TrayCreateItem("") $aboutitem = TrayCreateItem("About") TrayCreateItem("") $exititem = TrayCreateItem("Exit") For $i = 1 To $winlist[0][0] $title = WinGetTitle(_ProcessGetWinEx($winlist[$i][1],"","","",true));<-----------changed ConsoleWrite($title & @CRLF) GUICtrlSetData ($combo, $title) Next TraySetState() While guigetmsg() <> -3 $msg = TrayGetMsg() Select Case $msg = 0 ContinueLoop Case $msg = $aboutitem Msgbox(0,"Credits:","Made By Cha0sBG®") Case $msg = $exititem ExitLoop Case $msg = $hidesro WinSetState($gui, "", @SW_HIDE);<----------changed Case $msg = $showsro WinSetState($gui, "", @SW_SHOW);<----------changed Case $msg = $minsro WinSetState($gui, "", @SW_MINIMIZE);<----------changed Case $msg = $maxsro WinSetState($gui, "", @SW_MAXIMIZE);<----------changed EndSelect WEnd Exit Func _ProcessGetWinEx($ivPid, $svClass = "", $svTitle = "", $svText = "", $ivReturnOnlyFirstMatch = False) $ivPid = ProcessExists($ivPid) If Not $ivPid Then Return(SetError(1, 0, 0)) Local $avwArray = WinList() Local $avRet[1] = [0] For $i = 1 To $avwArray[0][0] $avClass = DllCall("User32.dll", "int", "GetClassName", "hwnd", $avwArray[$i][1], "str", "", "int", 4096) If WinGetProcess($avwArray[$i][1]) = $ivPid Then If $svClass = "" Or (IsArray($avClass) And $avClass[2] = $svClass) Then If ($svTitle = "" Or StringInStr($avwArray[$i][0], $svTitle)) And ($svText = "" Or StringInStr(WinGetText($avwArray[$i][1]), $svText)) Then $avRet[0] += 1 ReDim $avRet[$avRet[0]+1] $avRet[$avRet[0]] = $avwArray[$i][1] If $ivReturnOnlyFirstMatch Then $avRet = $avret[1] ExitLoop EndIf EndIf EndIf EndIf Next Return $avRet EndFunc I don't see that combo but the script was running. only that without combo When the words fail... music speaks. Link to comment Share on other sites More sharing options...
Cha0sBG Posted August 11, 2008 Author Share Posted August 11, 2008 now when i hit maximize it maximizes the gui oO Have Questions About GUI (Graphical User Interface) ? Post Them Here :GUI Help And Support ForumHave Questions About General AutoIt ? Post Them Here : General Help And Support ForumNew To AutoIt ? Be Shure To Check Out The FaQ's (Frequently Asked Questions) Or FaQ ¹ There You May Find Great Help That Will Guide You True The Wonderful Programming Language AutoItOthere Good Place To Get Some Knolage Of AutoIt Is The Example Script ForumNotice A Bug ? Please Go And Report it At Bug Report Section And Help The Devolepers Of AutoIt Update And Fix The Programming LanguageWant To Thank The People For This Great Forum And Programming Language ? Then DonateWhen You Found The Answer Your Looking For Please Add [Resolved] To The Thread's Name That Will Show Otheres That You Have Found What Your Looking For And They Whount Have To Enter The Thread. Link to comment Share on other sites More sharing options...
martin Posted August 11, 2008 Share Posted August 11, 2008 now when i hit maximize it maximizes the gui oOWhat do you want it to do? Serial port communications UDF Includes functions for binary transmission and reception.printing UDF Useful for graphs, forms, labels, reports etc.Add User Call Tips to SciTE for functions in UDFs not included with AutoIt and for your own scripts.Functions with parameters in OnEvent mode and for Hot Keys One function replaces GuiSetOnEvent, GuiCtrlSetOnEvent and HotKeySet.UDF IsConnected2 for notification of status of connected state of many urls or IPs, without slowing the script. Link to comment Share on other sites More sharing options...
Cha0sBG Posted August 12, 2008 Author Share Posted August 12, 2008 as i sayd it's sapous to get the title from procces id of a game i play and i want it to minimize the game ... Have Questions About GUI (Graphical User Interface) ? Post Them Here :GUI Help And Support ForumHave Questions About General AutoIt ? Post Them Here : General Help And Support ForumNew To AutoIt ? Be Shure To Check Out The FaQ's (Frequently Asked Questions) Or FaQ ¹ There You May Find Great Help That Will Guide You True The Wonderful Programming Language AutoItOthere Good Place To Get Some Knolage Of AutoIt Is The Example Script ForumNotice A Bug ? Please Go And Report it At Bug Report Section And Help The Devolepers Of AutoIt Update And Fix The Programming LanguageWant To Thank The People For This Great Forum And Programming Language ? Then DonateWhen You Found The Answer Your Looking For Please Add [Resolved] To The Thread's Name That Will Show Otheres That You Have Found What Your Looking For And They Whount Have To Enter The Thread. Link to comment Share on other sites More sharing options...
martin Posted August 12, 2008 Share Posted August 12, 2008 as i sayd it's sapous to get the title from procces id of a game i play and i want it to minimize the game ...Better make sure I understand before I put any more time into an answer!When you click on maximize your first script requested the $combo to maxiimize, but you want it to minimze the game. I assume you mean that the Minimize and Maximize options are for minimizing and maximizing the game, the title of which has been selected in the combo. Is that correct? Serial port communications UDF Includes functions for binary transmission and reception.printing UDF Useful for graphs, forms, labels, reports etc.Add User Call Tips to SciTE for functions in UDFs not included with AutoIt and for your own scripts.Functions with parameters in OnEvent mode and for Hot Keys One function replaces GuiSetOnEvent, GuiCtrlSetOnEvent and HotKeySet.UDF IsConnected2 for notification of status of connected state of many urls or IPs, without slowing the script. Link to comment Share on other sites More sharing options...
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