landetls Posted April 26, 2012 Posted April 26, 2012 Hi. my first topic first off i read the forum rules, i hope this help request doesent conflict with the rule about not automationg applications that dont allow automation. i searched a little around and i could not find anything in the eula/tos from the symantec stating that its illegal to automate it i am trying to make an automated removal logic for some applications. in the situation i need it there are few options as i handle every concievable windows nt software configuration from oem manufacturers.(no im not developing viruses) i work in a company running mass pre-auditing(setup) of computers for customers, at this point my only acceptable sollution is using using the base factory config from the computers manufacturer as my base. the one i am having a lot of problems with is the norton internet security and norton 360 range(i need to remove it silently/unattended in order before running our volumekey fsecure install). norton products(for obvious reasons) only support a quiet install switch not a quiet uninstall swith. to make it worse i have tried everything i can think of a way to try to automate the window but the best iwe come up with is that have to get my script to "guess" where in the process the uninstallation is, and run a long do..until loop until the application is uninstalled. this is slow and can fail in some instances. even tho its successrate is up to about 90% on computers with the version of norton iwe made spesific send() commands for. i want to explore all possibilities to try and make the script atlest "know" when it has succesfully activated the hyperlinks(buttons) in the installer: au3infotool reports the windows in this example as: >>>> Window <<<< Title: Norton 360 5.0 Class: install_ui_frame Position: 196, 41 Size: 794, 530 Style: 0x960A0844 ExStyle: 0x00010000 Handle: 0x00050254 >>>> Control <<<< Class: Instance: ClassnameNN: Name: Advanced (Class): ID: Text: Position: Size: ControlClick Coords: Style: ExStyle: (this is all that all the norton products windows displays during the whole installer process) but it actually has 3 "instances"(sorry im not english) here is the part of my code that i want you guys to have a look at(yes i am a novice at autoit scripting i know very well that the logic of this script can be improved on(a lot). but before i start spending time to re-write the adhoc loops i made during debugging i wanna know if i can do this another way): expandcollapse popup#RequireAdmin Func _NortonRemoveSilent() WinKill("Norton") Opt("WinTitleMatchMode", 2) Global $timer, $check = True $nrt = False Global $timer = TimerInit() If $check Then Run($uninstallString) ; this $var is from another function that finds the uninstall string in the registry Sleep(5000) Local $c1 Do Select Case WinExists("Norton Internet Security") Do $nrt = False WinActivate("Norton Internet Security") Sleep(20000) WinActivate("Norton Internet Security") Sleep(200) Send("{TAB}") Sleep(100) Send("{TAB}") Sleep(400) Send("{ENTER}") Sleep(2000) Send("{ENTER}") Global $timer2 = TimerInit() Do If WinActive("Norton", "Er du sikker") Then ControlClick("Norton", "", "[ID:7]") Sleep(30000) WinKill("Norton Internet Security") Else Sleep(5500) WinClose("Norton") EndIf Sleep(500) ConsoleWrite(TimerDiff($timer2) & @CRLF) Until Not WinExists("Norton Internet Security") Or TimerDiff($timer2) > 240000 ConsoleWrite(TimerDiff($timer) & @CRLF) Until Not ProcessExists("InstStub.exe") Or Not WinExists("Norton") Or TimerDiff($timer) > 333000 Case WinExists("Norton 360 5.0") Do WinActivate("Norton 360 5.0") $nrt = False Sleep(2000) Send("{TAB}") Sleep(100) Send("{TAB}") Sleep(400) Send("{ENTER}") Sleep(2000) Send("{TAB}") Sleep(400) Send("{TAB}") Sleep(400) Send("{ENTER}") Global $timer2 = TimerInit() Do WinActivate("Norton") Sleep(4000) WinClose("Norton") Sleep(2000) ConsoleWrite(TimerDiff($timer2) & @CRLF) Until Not ProcessExists("InstStub.exe") Or TimerDiff($timer2) > 100000 ConsoleWrite(TimerDiff($timer) & @CRLF) Until Not ProcessExists("InstStub.exe") Or Not WinExists("Norton") Or TimerDiff($timer) > 202400 Or $nrt = True Case WinExists("Norton 360 6.0") Do $nrt = False WinActivate("Norton 360 6.0") Send("{TAB}") Sleep(200) Send("{TAB}") Sleep(200) Send("{ENTER}") Sleep(2000) Send("{TAB}") Sleep(200) Send("{TAB}") Sleep(400) Send("{ENTER}") Global $timer2 = TimerInit() Do WinActivate("Norton") Sleep(4000) WinClose("Norton") Sleep(2000) ConsoleWrite(TimerDiff($timer2) & @CRLF) Until Not ProcessExists("InstStub.exe") Or TimerDiff($timer2) > 100000 ConsoleWrite(TimerDiff($timer) & @CRLF) Until Not ProcessExists("InstStub.exe") Or Not WinExists("Norton") Or TimerDiff($timer) > 202400 Or $nrt = True EndSelect Sleep(500) ConsoleWrite(TimerDiff($timer) & @CRLF) $c1 += 1 ConsoleWrite("Run nr " & $c1 & @CRLF) Until TimerDiff($timer) > 404800 Or $nrt = True Or Not ProcessExists("InstStub.exe") Or $check = Not True Or $c0 = 3 $check = Not $check ConsoleWrite(TimerDiff($timer) & @CRLF) #cs If $nrt = True Then ; nrt er deaktivert pga ingen mulighet til a sjekke write status pa installeren MsgBox(4096, "Feil!", "feil under uninstall, kjører Norton removal tool, script settes på pause til du er ferdig. ikke kjør reboot! men trykk ALT+F6 når ferdig") WinKill("Norton") ShellExecuteWait(@ScriptDir & "/nrt.exe") WinWaitActive("Norton Removal Tool") WinWaitClose("Norton Removal Tool") ControlSend('Program Manager', '', '', '{F5}') $check = Not $check Sleep(2000) EndIf #ce ControlSend('Program Manager', '', '', '{F5}') Sleep(2000) EndIf WinKill("Norton") ProcessClose("InstStub.exe") EndFunc ;==>_NortonRemoveSilent thanks to anyone who is willing to read all this
wakillon Posted April 26, 2012 Posted April 26, 2012 norton products(for obvious reasons) only support a quiet install switch not a quiet uninstall swith.Did you try /x and /quiet switches for uninstall quietly the package ? AutoIt 3.3.14.2 X86 - SciTE 3.6.0 - WIN 8.1 X64 - Other Example Scripts
IceBlackIce Posted April 26, 2012 Posted April 26, 2012 Have you searched for the removal tools? They seem very straightforward when i try them, not sure if theres a silent switch or not.
landetls Posted April 26, 2012 Author Posted April 26, 2012 Did you try /x and /quiet switches for uninstall quietly the package ?First thing i triedTried(NOT ACTUAL CODE)"%nortonuninstallerlocation%" /X /quiet and silent and /passive and so on.....Its just not possible to do it this wayHave you searched for the removal tools? They seem very straightforward when i try them, not sure if theres a silent switch or not. My old version of this script (batch based) use nrt.exe(norton removal tool) for removal. so im familliear with it. The problem with nrt.exe is that iven tho it uses standard windows buttons.(so its possible to automate a high degree of it) it uses capta(i will not have my script touch this) this makes it impossible to use for 100% unattended removal. I intend to use nrt as my fallback methood if error and wait for the technician at work to enter the capta before continuing the script.Unrelated to this responce:My thoughts about what can might done but that i dont know how to do.*the uninstaller ui frame has a set pixel size for any computer its run on. Therefore it might be possible to ocr it But i have no clue how to. And my thoughts is that is very slow and maybe not very stable.*maybe use injection on the instui.dll file that the norton uninstaller uses.iwe tried this but no luck there. I couldnt get it working(i have very limited experience working with dlls so if this is a valid method im open to suggestions)* i ran ui automation verify(similear to au3info) this identifies the window and is able to get info from the ui window. But i wanna d o the script in autoit and i have no idea how to integrate some sollution based on this(once again im open to suggestions)Thanks for the responces guys. Input is always greatly appriciated :-)
wakillon Posted April 26, 2012 Posted April 26, 2012 I have Norton Ghost 14 installed and looking in his installation directory i found an xml file with silent uninstall informations : <!-- Uninstall --> <string>msiExec.exe /X {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} /qn REBOOT=R</string> <string>setup.exe /S /v"/qn ADDLOCAL=Agent,Shared,NGSecurityShortCut /l*v %TEMP%NGinstall.log"</string> Perhaps there is also one for your Norton 360 version... And for live update uninstall : @ProgramFilesDir & 'SymantecLiveUpdateLSETUP.exe /U -s -a -q' AutoIt 3.3.14.2 X86 - SciTE 3.6.0 - WIN 8.1 X64 - Other Example Scripts
landetls Posted April 26, 2012 Author Posted April 26, 2012 I have Norton Ghost 14 installed and looking in his installation directory i found an xml file with silent uninstall informations :<!-- Uninstall --><string>msiExec.exe /X {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} /qn REBOOT=R</string><string>setup.exe /S /v"/qn ADDLOCAL=Agent,Shared,NGSecurityShortCut /l*v %TEMP%NGinstall.log"</string>Perhaps there is also one for your Norton 360 version...And for live update uninstall :@ProgramFilesDir & 'SymantecLiveUpdateLSETUP.exe /U -s -a -q' That last line looks promising. Ill have a look for it when im home. I still think symantec has done all they can to prevent this from being done strictly from cmdline.Ill update with what i findThanks
landetls Posted April 26, 2012 Author Posted April 26, 2012 (edited) I have Norton Ghost 14 installed and looking in his installation directory i found an xml file with silent uninstall informations :<!-- Uninstall --><string>msiExec.exe /X {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} /qn REBOOT=R</string><string>setup.exe /S /v"/qn ADDLOCAL=Agent,Shared,NGSecurityShortCut /l*v %TEMP%NGinstall.log"</string>Perhaps there is also one for your Norton 360 version...And for live update uninstall :@ProgramFilesDir & 'SymantecLiveUpdateLSETUP.exe /U -s -a -q' That last line looks promising. Ill have a look for it when im home. I still think symantec has done all they can to prevent this from being done strictly from cmdline.Ill update with what i findThanksEdit::Duplicate post. Sorry i got a timeout. Maybe a moderator can delete this for me? Edited April 26, 2012 by landetls
Moderators JLogan3o13 Posted April 26, 2012 Moderators Posted April 26, 2012 Hi, landetls. Look in the registry under HKLMSoftwareMicrosoftWindowsCurrentVersionUninstall and find the key for the product you're trying to uninstall. What does it show for the UninstallString value? That should give you a place to start with the silent uninstall. "Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball How to get your question answered on this forum!
wakillon Posted April 26, 2012 Posted April 26, 2012 Hi, landetls. Look in the registry under HKLMSoftwareMicrosoftWindowsCurrentVersionUninstall and find the key for the product you're trying to uninstall. What does it show for the UninstallString value? That should give you a place to start with the silent uninstall.You didn't read his first post, he already get them.It's silent uninstall switches he doesn't find... AutoIt 3.3.14.2 X86 - SciTE 3.6.0 - WIN 8.1 X64 - Other Example Scripts
Moderators JLogan3o13 Posted April 26, 2012 Moderators Posted April 26, 2012 You didn't read his first post, he already get them.It's silent uninstall switches he doesn't find...You're right, I missed that in his posted code "Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball How to get your question answered on this forum!
IceBlackIce Posted April 26, 2012 Posted April 26, 2012 (edited) Have you looked at this thread?http://it.toolbox.com/blogs/locutus/how-...remotely-remove-symantec-antivI know it doesnt really apply because its a different product, but some of the flags (namely this one -> MsiExec.exe /norestart /q/x {E9FA3047-0b15-4e19-85ce-ee7fc6e60f99} REMOVE=ALL) could help, ofc you would need to msi install code.On another note, you could expand/extract the removal tool to see what it does...or reverse engineer, or take a look at process explorer to see the full flags of the processes running.Im sure after the captcha code, theres a command run that uninstalls it silently. Edited April 26, 2012 by IceBlackIce
landetls Posted November 9, 2012 Author Posted November 9, 2012 Here is the sollution i came up with to solve the norton uninstall issue, this was written long ago but i just wanted to share it so someone can use it if they need it. this is the whole uninstaller code with all the trimmings. some of the code, (_ReturnUninstallStringNoUI) is a highly rewritten version of a code i found somewhere on the forums, i dont recall who wrote the original one, my version searches the whole registry for uninstall keys and if they are ".msi" it creates silent uninstall strings for the software, other exe files iwe added filters for, if no silent key can be found/created it will not run it. the norton spesific part is based on user fastfrench's fastfind.au3 and will even work off screen if the comment is removed from the norton function, it is limited to only the versions it has the controlclick locations for. i am currently working to rewriting it to make it better so any help optimizing would be greatly appriciated! ( especially with the mouseclick functions, the click verification method im using is'nt very likable and should be possible to do in a better way) havent been tested on other than the norwegian versions of norton expandcollapse popup#include <fastfind.au3> Global $customapps = "norton avg avast mcafee norman kaspersky" Global $vAppArray[2] = ["VLC media player", "norton"] $listing = _ReturnUninstallStringNoUI($vAppArray) _FilterRun_Uninstallers($listing, $customapps) #region - Uninstaller #region - Main Func _ReturnUninstallStringNoUI(ByRef $vAppArray) Local $listing[1][3] If IsArray($vAppArray) Then If @OSArch = "X64" Then ;Adjust for 64bit os ; mangler komplett sjekk av hkcu, ellers ok ;hkcu skal vere ok med version 0.0.2.95++ $RegPath = "\Microsoft\Windows\CurrentVersion\Uninstall" $RegRoot86 = "HKLM\SOFTWARE\Wow6432Node" $RegRoot64 = "HKLM64\SOFTWARE" $RegRootCU64 = "HKCU\SOFTWARE\Wow6432Node" $RegRootCU86 = "HKCU\SOFTWARE" Else;Adjust for 32bit os $RegPath = "\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" $RegRoot86 = "HKLM" $RegRoot64 = "HKLM64" $RegRootCU64 = "HKCU" $RegRootCU86 = "HKCU64" EndIf $RegRoot = $RegRoot86 $iInstalledAppsCount = 1 $iFound = 0 While 1 $sSubKey = RegEnumKey($RegRoot & $RegPath, $iInstalledAppsCount) If @error <> 0 Then If ($RegRoot == $RegRoot86) Or ($RegRoot == $RegRoot64) Or ($RegRoot == $RegRootCU64) Then ; denne oppforer seg ikke riktig, kjor debug If ($RegRoot == $RegRoot86) Then $RegRoot = $RegRoot64 $iInstalledAppsCount = 1 Else If ($RegRoot == $RegRoot64) Then $RegRoot = $RegRootCU64 $iInstalledAppsCount = 1 ElseIf ($RegRoot == $RegRootCU64) Then $RegRoot = $RegRootCU86 $iInstalledAppsCount = 1 EndIf EndIf Else ExitLoop EndIf EndIf $sdn = RegRead($RegRoot & $RegPath & "\" & $sSubKey, "DisplayName") If Not @error <> 0 Then For $i = 0 To UBound($vAppArray) - 1 If StringInStr($sdn, $vAppArray[$i]) Then $iFound += 1 $size = ($iFound - 1) If $iFound > 1 Then ReDim $listing[UBound($listing, 1) + 1][3] EndIf $listing[$size][0] = ($sdn) $listing[$size][1] = (RegRead($RegRoot & $RegPath & "\" & $sSubKey, "UninstallString")) $listing[$size][2] = (RegRead($RegRoot & $RegPath & "\" & $sSubKey, "QuietUninstallString")) If StringInStr($listing[$size][1], "msiexec") Then If Not StringInStr($listing[$size][1], "/qb") And Not StringInStr($listing[$size][1], "/qn") Then $listing[$size][1] &= " /qn REBOOT=ReallySuppress" ElseIf StringInStr($listing[$size][1], "/qb") Then $listing[$size][1] = StringReplace($listing[$size][1], "/qb", "/qn REBOOT=ReallySuppress") EndIf StringReplace($listing[$size][1], "/I{", "/X{") EndIf EndIf Next EndIf ;ConsoleWrite($iInstalledAppsCount & @CRLF & $sSubKey & @CRLF) $iInstalledAppsCount += 1 WEnd Return $listing Else Return SetError(1) EndIf EndFunc ;==>_ReturnUninstallStringNoUI Func _FilterRun_Uninstallers($listing, ByRef $customapps) Local $i If IsArray($listing) Then For $i = 0 To UBound($listing) - 1 If StringInStr($listing[$i][1], $customapps) And Not StringInStr($listing[$i][1], "msiexec") Then Select Case StringInStr($listing[$i][1], "norton") _NortonUninstaller($listing[$i][1]) Case StringInStr($listing[$i][1], "avast") _avastuninstaller($cachedir) Case StringInStr($listing[$i][1], "avg") _avguninstaller($cachedir) Case StringInStr($listing[$i][1], "mcafee") _mcafeeuninstaller($cachedir) Case StringInStr($listing[$i][1], "norman") _normanuninstaller($cachedir) Case StringInStr($listing[$i][1], "kaspersky") _kasperskyuninstaller($cachedir) EndSelect Else If StringInStr($listing[$i][1], "msiexec") Or $listing[$i][2] = True Then $uproc = Run($listing[$i][1], "", @SW_HIDE) While 1 Sleep(100) If Not ProcessExists($uproc) Then Return 1 ExitLoop EndIf WEnd EndIf If StringInStr($listing[$i][1], "VideoLAN") Or StringInStr($listing[$i][1], "McAfee Security Scan") Then $listing[$i][1] &= " /S" $uproc = Run($listing[$i][1], "", @SW_HIDE) While 1 Sleep(100) If Not ProcessExists($uproc) Then Return 1 ExitLoop EndIf WEnd EndIf EndIf ControlSend("Program Manager", "", "", "{F5}") Next Else Return 0 EndIf EndFunc ;==>_FilterRun_Uninstallers #endregion - Main #region - CustomUninstallers Func _NortonUninstaller($sUninstallString) $proc = WinGetProcess("norton") If IsDeclared("proc") Then ProcessClose($proc) EndIf $Urun = Run($sUninstallString) WinWait("Norton") $title = WinGetTitle("Norton") $hwnd = WinGetHandle($title) ;WinMove($hwnd, "", 2000, 200) for ferdig script Select Case StringInStr($title, "4.0") _FFMouseClickEX($hwnd, 400, 320);fjern helt _FFMouseClickEX($hwnd, 400, 370);neste _FFWinClose($hwnd) Case StringInStr($title, "2012") Or StringInStr($title, "2011") Or StringInStr($title, "5.0") _FFMouseClickEX($hwnd, 400, 330);fjern helt _FFMouseClickEX($hwnd, 400, 360);neste _FFWinClose($hwnd) Case StringInStr($title, "6.0") _FFMouseClickEX($hwnd, 130, 185);fjern helt _FFMouseClickEX($hwnd, 660, 220);neste _FFWinClose($hwnd) Case StringInStr($title, "AntiVirus 2010") _FFMouseClickEX($hwnd, 400, 235);fjern helt _FFMouseClickEX($hwnd, 400, 370);neste _FFWinClose($hwnd) Case StringInStr($title, "Internet Security 2010") _FFMouseClickEX($hwnd, 400, 250);fjern helt _FFWinClose($hwnd) Case StringInStr($title, "2009") _FFMouseClickEX($hwnd, 200, 270);fjern helt _FFMouseClickEX($hwnd, 150, 400);neste _FFMouseClickEX($hwnd, 90, 533);avslutt, ikke restart Case Else _nrt($cachedir, $sUninstallString) EndSelect If WinExists($title) Then ;legacy metode(fallback 1) _FFControlCend($hwnd, "{TAB}") _FFControlCend($hwnd, "{ENTER}") _FFControlCend($hwnd, "{TAB}") _FFControlCend($hwnd, "{ENTER}") EndIf Sleep(1000) If WinExists($title) Then ;nrt(fallback 2) ProcessClose($Urun) _nrt($cachedir, $sUninstallString) EndIf EndFunc ;==>_NortonUninstaller Func _Nrt($cachedir, $sUninstallString) WinKill("Norton") If FileExists($cachedir & "Norton_Removal_Tool.exe") Then $nrt = "Norton Removal Tool" MsgBox(4096, "Feil!", "feil under uninstall/mangler konfig for nortonversion, kjører Norton removal tool, script settes på pause til du er ferdig å skrive inn CAPTA") Run($cachedir & "Norton_Removal_Tool.exe") WinWaitActive($nrt) ControlClick($nrt, "&Next", "[CLASS:Button; INSTANCE:2]") WinWaitActive($nrt, "You must accept the License Agreement in order to use Norton Removal Tool.") ControlClick($nrt, "I accept the License Agreement", "[CLASS:Button; INSTANCE:1]") ControlClick($nrt, "&Next", "[CLASS:Button; INSTANCE:4]") WinWaitActive($nrt, "Please read the text above, and then type it in the area below.", "[ID:1017]") Do If WinExists("Please try again.", "Incorrect match. Please try again.") Then ControlClick("Please try again.", "OK", "[CLASS:Button; INSTANCE:1]") Sleep(1000) EndIf Until WinExists($nrt, "About to Begin Removal") ControlClick($nrt, "&Next", "[CLASS:Button; INSTANCE:4]") WinWaitActive($nrt, "Removing products...") WinWaitActive($nrt, "Removal Completed") WinKill($nrt) Sleep(2000) Else MsgBox(4096, "Feil!", "feil under uninstall/mangler konfig for nortonversion, Norton removal tool fil mangler, kjorer manuell avinstallasjon, du ma trykke selv. scriptet venter til du er ferdig") RunWait($sUninstallString) EndIf EndFunc ;==>_Nrt Func _avastuninstaller($cachedir) If FileExists($cachedir & 'avastclear.exe') Then WinKill("avast") RunWait(@ComSpec & " /c net stop ""avast! Antivirus"" /yes", "", @SW_HIDE) RunWait(@ComSpec & " /c net stop ""avast! iAVS4 Control Service"" /yes", "", @SW_HIDE) RunWait(@ComSpec & " /c net stop ""avast! Mail Scanner"" /yes", "", @SW_HIDE) RunWait(@ComSpec & " /c net stop ""avast! Web Scanner"" /yes", "", @SW_HIDE) RunWait($cachedir & 'avastclear.exe /verysilent /noreboot /prod "av_pro" "av_32"', "", "", @SW_HIDE); endre til autoremoval via regkey EndIf EndFunc ;==>_avastuninstaller Func _avguninstaller($cachedir) If FileExists($cachedir & "avg_remover_stf_x86_2012_2125.exe") And FileExists("avg_remover_stf_x64_2012_2125.exe") Then WinKill("avg") If @OSArch = "X86" Then RunWait($cachedir & "avg_remover_stf_x86_2012_2125.exe /silent", "", "", @SW_HIDE) ElseIf @OSArch = "X64" Then RunWait($cachedir & "avg_remover_stf_x64_2012_2125.exe /silent", "", "", @SW_HIDE) EndIf EndIf EndFunc ;==>_avguninstaller Func _mcafeeuninstaller($cachedir) If FileExists($cachedir & "MCPR.exe") Then WinKill("mcafee") Opt('WinTitleMatchMode', 3) Run($cachedir & "MCPR.exe", "", "", @SW_HIDE) WinWait("McAfee Cleanup", "Cleanup Progress", 100) WinWait("[CLASS:#32770]", "Reboot required to remove all files", 100) If WinExists("[CLASS:#32770]", "Reboot required to remove all files") Then ProcessClose("McClnUI.exe") ProcessClose("MCCLEA~1.exe") EndIf EndIf EndFunc ;==>_mcafeeuninstaller Func _normanuninstaller($cachedir) If FileExists($cachedir & "Delnvc5.exe") Then WinKill("norman") RunWait($cachedir & "Delnvc5.exe /quiet", "", "", @SW_HIDE) EndIf EndFunc ;==>_normanuninstaller Func _kasperskyuninstaller($cachedir) If FileExists($cachedir & "kavremover.exe") Then WinKill("kaspersky") Run($cachedir & "kavremover.exe", "") WinWaitClose("Kaspersky Lab Products Remover") EndIf EndFunc ;==>_kasperskyuninstaller #endregion - CustomUninstallers #region - FFfunksjoner Func _FFMouseClickEX($hwnd, $x, $y) AutoItSetOption("MouseCoordMode", 2) If _FFTraceChange($hwnd) = False Then FFSnapShot("", "", "", "", 10, $hwnd) ControlClick($hwnd, "", "", "main", 1, $x, $y) If _FFTraceChange($hwnd, 10) = True Then Return 1 EndIf EndFunc ;==>_FFMouseClickEX Func _FFControlCend($hwnd, $key) If _FFTraceChange($hwnd) = False Then FFSnapShot("", "", "", "", 10, $hwnd) ControlSend($hwnd, "", $hwnd, $key) If _FFTraceChange($hwnd, 10) = True Then Return 1 EndIf EndFunc ;==>_FFControlCend Func _FFWinClose($hwnd) ; brukes i jotta config If _FFTraceChange($hwnd) = False Then FFSnapShot("", "", "", "", 10, $hwnd) WinClose($hwnd) If _FFTraceChange($hwnd, 10) = True Then Return 1 EndIf EndFunc ;==>_FFWinClose Func _FFTraceChange($hwnd, $precheck = False) FFSetDebugMode(0x01) While 1 FFSetWnd($hwnd) For $i = 1 To 4 FFSnapShot("", "", "", "", $i, $hwnd) ;FFSaveBMP ( @ScriptDir & "/test"& $i , "" , "" , "" , "" , "" , $i) Sleep(50) Next If $precheck = True Then If FFIsDifferent($precheck, 1) Or FFIsDifferent($precheck, 2) Or FFIsDifferent($precheck, 3) Or FFIsDifferent($precheck, 4) Then Return 1 Else Return 0 EndIf Else If FFIsDifferent(1, 2) Or FFIsDifferent(1, 3) Or FFIsDifferent(1, 4) Then Return 1 Else Return 0 EndIf EndIf WEnd EndFunc ;==>_FFTraceChange #endregion - FFfunksjoner #endregion - Uninstaller
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