ach ja, die Namensgebung bleibt dir frei. ob die Datei autoit3.exe heißt, oder ganz anders liegt ganz bei dir.
Beiträge von Schnuffel
-
-
na klar.
lade dir PureBasic herunter und installiere es: https://www.purebasic.com/german/download.php
erstelle dir einen Ordner und packe da die autoit.exe deiner genutzten Version rein.
( Kopiere "C:\Program Files (x86)\AutoIt3\AutoIt3.exe" ==> dein Ordner )erstelle in deinem Ordner eine Datei mit der Endung .pb und folgendem Inhalt:
Spoiler anzeigen
Code
Alles anzeigen; -------------------------------------------------------------------------------------------------------------------------------- ; _____ ____ _ _ _ __ _ _ _ | ; | __ \ | _ \ (_) | | | | / _| | | (_) | | ; | |__) | _ _ __ ___| |_) | __ _ ___ _ ___ | | ___ __ _ __| | ___ _ __ | |_ ___ _ __ __ _ _ _| |_ ___ _| |_ | ; | ___/ | | | '__/ _ \ _ < / _` / __| |/ __| | | / _ \ / _` |/ _` |/ _ \ '__| | _/ _ \| '__| / _` | | | | __/ _ \| | __| | ; | | | |_| | | | __/ |_) | (_| \__ \ | (__ | |___| (_) | (_| | (_| | __/ | | || (_) | | | (_| | |_| | || (_) | | |_ | ; |_| \__,_|_| \___|____/ \__,_|___/_|\___| |______\___/ \__,_|\__,_|\___|_| |_| \___/|_| \__,_|\__,_|\__\___/|_|\__| | ; | ; This file is used to act as a launcher for an AutoIt a3x-File to reduce false positive alerts for AV scanners. | ; It passes all parameters to the AutoIt3.exe. | ; | ; NOTE: This script is written in PureBasic | ; -------------------------------------------------------------------------------------------------------------------------------- ; Adjust the name of your a3x script here. ; It is expected that your script is located in the Subdirectory defined in 'datafolder.s' ; If all files are in the same directory define datafolder.s = '' ; Definition of the Subfolder for a3x- & autoit3-file datafolder.s = "" ; Name of a3x-file a3xFile.s = "Start.a3x" ; MD5 Hash of actual a3x-file (Hash is generated with au3-file: "_Crypt_HashFile ( $a3x-file, 'MD5')" Hash.s = "0x......." ; Name of autoit3.exe. Only the fileextension must be ".exe"! Autoit3File.s = "autoit3.exe" ; -------------------------------------------------------------------------------------------------------------------------------- ; Internal section a3xFullFile.s = datafolder + a3xFile Autoit3FullFile.s = datafolder + Autoit3File Parameters.s = "" AutoIt3_x86Path.s = GetCurrentDirectory() + Autoit3FullFile a3xPath.s = GetCurrentDirectory() + a3xFullFile Quote.s = Chr(34) Parameters = RTrim(Parameters) If FileSize(a3xPath) = -1 MessageRequester("Error", a3xFile + " not found!", #PB_MessageRequester_Ok + #PB_MessageRequester_Error) End EndIf If FileSize(AutoIt3_x86Path) = -1 MessageRequester("Error", Autoit3File + " not found!", #PB_MessageRequester_Ok + #PB_MessageRequester_Error) End EndIf ; a3x-File gegen MD5 Hash prüfen UseMD5Fingerprint() If "0x" + UCase(FileFingerprint(a3xPath, #PB_Cipher_MD5)) <> Hash MessageRequester("Error", a3xFile + " has wrong MD5 Hash!", #PB_MessageRequester_Ok + #PB_MessageRequester_Error) End EndIf For i = 0 To CountProgramParameters()-1 Parameters = Parameters + Quote + ProgramParameter(i) + Quote + " " Next RunProgram(Quote + AutoIt3_x86Path + Quote + " " + Quote + a3xPath + Quote,Parameters,GetCurrentDirectory()) End
erstelle dein Script und kompiliere es als a3x-Datei.
erstelle mit der "make_md5_Hash.au3" einen MD5-Hash der a3x-Datei und füge das Ergebnis inkl. "0x..." in die ****.pb Datei als hash.s ein (Zeile 25)
starte die ****.pb Datei (PureBasic startet) und compiliere diese Datei nach deinen Anpassungen mittels F5.
Die kompilierte exe liegt in deinem Temp-Verzeichnis (%tmp%) im Explorer eingebendie Dateien "kompilierte exe", "a3x-Datei" und "autoit3.exe" kannst du jetzt verteilen.
Mit einem Start deiner *****.pb Datei wird autoit3.exe gestartet (alle übergebenen Parameter werden weitergereicht an die a3x-Datei)
mit dem Parameter der a3x-Datei.Beispiel hänge ich mal mit an
Entliehen habe ich die Idee von ISI360 (ISN autoit Studio) https://www.autoitscript.com/forum/topic/19…-autoit-studio/
-
du kannst auch PureBasic verwenden, um dein Script zu starten.
Wenn Interesse besteht einfach Bescheid geben.
Erfordert eine autoit3.exe und ein a3x-Datei in einem Verzeichnis. Die selbstkompilierte PureBasic.exe startet dann die a3x.
Prüft anhand md5, ob die a3x Datei unverändert ist oder ersetzt wurde.
-
ich werf mal noch meine Idee dazu in den Ring:
AutoIt
Alles anzeigenHotKeySet('{ESC}', _Exit) Global $iTimer = TimerInit() Global $bAdLibSet = False Global $Turnus = 20 ; in Sekunden Global $Anzeigedauer = 5 ; in Sekunden While 1 If TimerDiff($iTimer) > $Turnus * 1000 And $bAdLibSet = False Then $bAdLibSet = True AdlibRegister("__Funktion", 1000) EndIf If TimerDiff($iTimer) > ($Turnus + $Anzeigedauer) * 1000 Then AdlibUnRegister("__Funktion") $bAdLibSet = False $iTimer = TimerInit() EndIf WEnd Func __Funktion() ConsoleWrite("Zeit: " & @SEC & @CRLF) EndFunc Func _Exit() Exit EndFunc
-
ich glaube mal was gelesen zu haben, dass die Änderung der Hintergrundfarbe dieser Controls bedingt, dass auch der Control Style geändert werden muss.
Als Schlagwort schmeiße ich mal den "XP-Style" in den Raum, ohne maßgeblich mich darauf beziehen zu wollen.
Durch die Änderung des Styles des Controls wird $BS_Multiline "anders" interpretiert. Dabei wird der Text etwas nach oben verschoben.
Wenn du diesen Effekt nicht möchtest, dann mach deine Button's höher oder lass den Multiline Style weg
-
das sieht sehr gut aus.
Ich habe das getestet.
TorBrowser entpackt nach ... , RegPortBro in adm. Konsole ausgeführt :
RegPortBro.exe HKCU "TorBrowser" "<Pfad zur firefox.exe im TorBrowser Ordner>"SetDefaultBrowser.exe liefert (Demo von meinem Rechner):
HKLM Firefox-308046B0AF4A39CB
name: Firefox
path: "C:\Program Files\Mozilla Firefox\firefox.exe"HKLM Google Chrome
name: Google Chrome
path: "C:\Program Files\Google\Chrome\Application\chrome.exe"HKLM IEXPLORE.EXE
name: Internet Explorer
path: C:\Program Files\Internet Explorer\iexplore.exeHKLM Microsoft Edge
name: Microsoft Edge
path: "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"HKCU Firefox-308046B0AF4A39CB
name: Firefox
path: "C:\Program Files\Mozilla Firefox\firefox.exe"HKCU TorBrowser
name: TorBrowser
path: C:\Program Files (x86)\Tor Browser\Browser\firefox.exeDanach:
SetDefaultBrowser.exe HKCU TorBrowsermit dem Aufruf einer Inet-Seite wird jetzt folgendes angezeigt:
Das sollte mit deinem Tool auch automatisch auswählbar sein
-
-
nee nee, das ist gar nicht so schwer, aber nur eine "Notlösung.
du kannst über:
AutoIt$retval_http_ProgID = RegRead('HKCU\SOFTWARE\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice', 'ProgID') $retval_https_ProgID = RegRead('HKCU\SOFTWARE\Microsoft\Windows\Shell\Associations\UrlAssociations\https\UserChoice', 'ProgID')
die Assoc's der Protokolle holen, sofern diese über eine "UsersChoice" erstellt wurden.
Meine Idee wäre jetzt, die Daten daraus zu "verbiegen" wenn es nur auf deinem Rechner ist, sollte das ja kein Problem sein.
Im RegKey HKEY_CLASSES_ROOT\<ausgelesene ProgID aus obigem Schlüssel>\shell\open\command steht der Pfad der aktuellen Anwendung und den notwendigen Parametern.diese ProgID würde ich jetzt mittels FTYPE in einer adm. DOS-Konsole "verbiegen" wobei ich mir die ürsprünglichen Daten speichern würde für ein "Reset"
So sollte es möglich sein die letzendliche Anwendung zu verbiegen. Ist nicht schö aber vermutlich funktional
Kann man vielleicht auch direkt in der Registry umbiegen. Ich weiß aber nicht, was FTYPE alles verändert.
Einfach ausprobieren.Und wie immer ==> vorher ein Backup der Registry machen
Noch eine Idee...
registrier doch einfach für den TorBrowser selbst eine Assoc. Dann kannste den auch als Standard mit deinem Tool setzen
-
das scheint nicht mehr zu funktionieren. Ich ziehe meinen Vorschlag hiermit vorerst zurück
ich würde den Tor-Browser entpackt in "C:\Program Files (x86)\Tor Browser" ablegen und mit
in einer administrativen DOS-Konsole zuweisen
Geht natürlich auch mit allen anderen Browsern.
Natürlich auch mit "nicht" installierten Browsern wie Google Chrome im Userverzeichnis.
-
ich würde die IP Blöcke alle auf 3 stellen jeweils links mit Nullen auffüllen, die Blöcke zu einer 12-stelligen Zahl zusammensetzen,
in eineZahl umwandeln und dann sortieren.
-
so kannst du in autoit direkt die BIOS Version abfragen:
AutoItLocal $iPID = Run('Powershell.exe -Command (gwmi Win32_Bios).SMBIOSBIOSVersion', @DesktopDir, @SW_HIDE, 6) If ProcessWaitClose($iPID, 10) = 0 Then SetError(1, 2, 0) Local $sOutput = StdoutRead($iPID) ConsoleWrite($sOutput & @CRLF)
Ich denke in deinem Fall sollte man erstmal identifizieren, was der Trigger für ein Software Update darstellt. Zeit ist da ein sehr stumpfer Ansatz wenn es um Usability geht.
-
wenn du alles in Powershell machen willst, warum verwendest du dann autoit?
-
ich hätte da einen kürzeren Ansatz.
Bezüglich mehrere Pings gleichzeitig, schau mal im Forum nach "MultiPing"
AutoIt
Alles anzeigen#include <Array.au3> Local $s_PSCommand = "Get-ADComputer | Where {$_.Name -like 'W*' -Or $_.Name -like 'O*'} | Select Name" Local $iPID = Run('Powershell.exe -Command ' & $s_PSCommand, @DesktopDir, @SW_HIDE, 6) If ProcessWaitClose($iPID, 60) = 0 Then Exit MsgBox(0, "", "Prozess wurde nicht innerhalb von 60 Sekunden beendet.") $aPIDOut = StringSplit(StdoutRead($iPID), @CRLF) For $i = $aPIDOut[0] To 1 Step - 1 If $aPIDOut[$i] = "" Or StringInStr($aPIDOut[$i],"----") Or StringInStr($aPIDOut[$i], "Name ") Then _ArrayDelete($aPIDOut, $i) Next $aPIDOut[0] = UBound($aPIDOut) -1 ;_ArrayDisplay($aPIDOut) For $i = 1 To $aPIDOut[0] ConsoleWrite(Ping($aPIDOut[$i],250) & @CRLF) Next
Ich kann im MOment die AD-Funktion nicht testen. Ist aus dem Kopf erstellt
-
die Fehlerbeschreibung zeigt doch ganz deutlich auf die Position, mit der der Parser ein Problem hat:
CodeGet-ADComputer : Fehler beim Analysieren der Abfrage: "OperatingSystem -like Windows 10*" Fehlermeldung: "syntax error" an folgender Position: "23". In Zeile:1 Zeichen:1 + Get-ADComputer -Filter 'OperatingSystem -like Windows 10*' | Select-O ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
das Hochkomman nach Windows 10*'
-
-
ich würde auch sagen, dass child-Prozesse die selben Sicherheitstoken haben wie der aufrufende Prozess selbst besitzt. Wäre ja auch die Frage, welche Token soll der aufzurufende Prozess denn sonst haben. Eine Sicherheitseinstellung die administrative Token bei child-prozessen entfernt ist mir nicht bekannt.
-
ich mache das für HP Geräte damit: https://ftp.ext.hp.com/pub/caps-softpaq/cmit/HP_BCU.html
Gibt es bei allen nahmhaften Herstellern
Kann man mit Batch, PowerShell WMI und Co. nutzen.
Die Portierung zu autoit sollte ein Klacks sein.
-
hier noch ein Ansatz. Aber bitte erst ausprobieren an einem nicht so großen Verzeichnis...
AutoIt
Alles anzeigen#include <Array.au3> #include <File.au3> Global $sHDD, $sfoldername, $aOutput, $aTemp $sHDD = "C:\" $sfoldername = "Users" RunWait(@ComSpec & " /c " & "dir " & $sHDD & $sfoldername & " /A:D /Q /S /B > output.txt", @DesktopDir, @SW_HIDE) _FileReadToArray(@DesktopDir & "\output.txt", $aOutput) ;If FileExists(@DesktopDir & "\output.txt") Then FileDelete(@DesktopDir & "\output.txt") Global $aArray2[$aOutput[0] + 1][5] $aArray2[0][0] = $aOutput[0] $aArray2[0][1] = "Owner" $aArray2[0][2] = "Size" $aArray2[0][3] = "Files Count" $aArray2[0][4] = "Dir Count" For $i = 1 To $aOutput[0] $aArray2[$i][0] = $aOutput[$i] $aArray2[$i][1] = _GetOwner($aOutput[$i]) $aTemp = DirGetSize($aOutput[$i], 3) If Not @error Then $aArray2[$i][2] = $aTemp[0] $aArray2[$i][3] = $aTemp[1] $aArray2[$i][4] = $aTemp[2] EndIf Next _ArrayDisplay($aArray2) Func _GetOwner($sFile_Folder) Local $objSD, $oWMIService = ObjGet("winmgmts:") Local $oFolderSecuritySettings = $oWMIService.Get("Win32_LogicalFileSecuritySetting='" & $sFile_Folder & "'") Local $intRetVal = $oFolderSecuritySettings.GetSecurityDescriptor($objSD) If $intRetVal = 0 Then Return $objSD.Owner.Domain & "\" & $objSD.Owner.Name Else Return EndIf EndFunc ;==>_GetOwner
Das Array sollte alle Ordner rekursiv liefern alphabetisch sortiert, den Besitzer, die Größe (im Moment nicht rekursiv), Anzahl Ordner und Anzahl Dateien.
Wenn die Größe rekursiv ermittelt werden soll, dann in Zeile 19 die 3 mit einer 1 ersetzen
Bei fehlender Leseberechtigung auf einen Ordner bricht das Script bis jetzt ab. Das müsste man sich noch ansehen um das abzufangen.
-
wenn du 2 bestimmte Ordner rekursive erfassen möchtest, würde ich das so lösen:
AutoItGlobal $sSearchDir = "C:\Windows" Global $aDir_Allgemein = _FileListToArrayRec($sSearchDir & "\Web", "*", 2, 1) Global $aDir_Daten = _FileListToArrayRec($sSearchDir & "\Help", "*", 2, 1) _ArrayConcatenate($aDir_Allgemein, $aDir_Daten, 1) $aDir_Allgemein[0] = UBound($aDir_Allgemein) - 1 _ArrayDisplay($aDir_Allgemein)
musst halt die Ordner und des $sSearchDir an deine Bedürfnisse abändern
PS: der Parameter $iReturn kann dir auch deine Junktions liefern
+ $FLTAR_NOLINK (16) - Link/junction folders -
Ist J:\... ein Netzlaufwerk?
verwendest du eine Batch? (.bat oder .com) ?
Wie erstellst du die Batch Datei?
Wenn mit Notepad++, dann die Sprache auf MS-Dos Style ändern und dann erst abspeichern.
In der Batch Datei würde ich folgendes schreiben:
Bei der Lösung von Aspirinjunkie kann ich mir vorstellen, dass Netzlaufwerke ein Problem darstellen könnten.Das Script läuft auch mit Netzlaufwerken.
Der von dir geschilderte Fehler ist i.d.R. ein "harter" Error eines Dll-Aufrufs, der mit irgendeinem Parameter an die Wand gefahren ist.
ich hab die Funktion von AspirinJunkie mal verschlankt und optimiert.
AutoIt
Alles anzeigen$s_Cmd = "Dir" $sParameter = "C:\Users\Oliver" $b_CmdSpec = True $WorkDir = @WorkingDir $sResult = RunCmd($s_Cmd, $sParameter , $b_CmdSpec, $WorkDir) ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $sResult = ' & $sResult & @CRLF) ; #FUNCTION# ====================================================================================== ; Name ..........: RunCmd() ; Description ...: runs commandline programs or cmd-command and return their output ; Syntax ........: RunCmd($s_Cmd, [$sParameter = '', [$b_CmdSpec = False, [$WorkDir = @WorkingDir]]]) ; Parameters ....: $s_Cmd - the command which should be executed (can be full command or without parameters) ; $sParameter - additional parameters for the command (also array of parameters) ; $b_CmdSpec - If true the command is interpreted as a command for cmd.exe ; $WorkDir - the working directory ; Return values .: Success: returns a string with the output ; Failure: set @error and returns a debug-string ; Author ........: AspirinJunkie ; ================================================================================================= Func RunCmd($s_Cmd, $sParameter = '', $b_CmdSpec = False, $WorkDir = @WorkingDir) Local Static $h_User32DLL = DllOpen('user32.dll') If @error Then Return SetError(1, @error, "") If $b_CmdSpec Then $s_Cmd = @ComSpec & " /c " & $s_Cmd Local $s_Ret, $s_Err If $sParameter <> '' Then If IsArray($sParameter) Then Local $s_Par = "" For $j In $sParameter $s_Par &= " " & $j Next $sParameter = $s_Par Else $sParameter = ' ' & $sParameter EndIf EndIf Local $iPID = Run($s_Cmd & $sParameter, $WorkDir, @SW_HIDE, 0x2 + 0x4) If @error Then Return SetError(2, @error, "") ProcessWaitClose($iPID) $s_Ret = DllCall($h_User32DLL, 'BOOL', 'OemToChar', 'str', StdoutRead($iPID), 'str', '')[2] $s_Err = DllCall($h_User32DLL, 'BOOL', 'OemToChar', 'str', StderrRead($iPID), 'str', '')[2] If $s_Err <> "" Then Return SetError(3, 0, "------- StdOut -----------" & @CRLF & $s_Ret & @CRLF & @CRLF & "------- StdErr -----------" & @CRLF & $s_Err) EndIf Return $s_Ret EndFunc ;==>RunCmd