1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Bitnugger

Beiträge von Bitnugger

  • AutoIt bricht ohne ersichtlichen Grund beim Kopiern von Datein ab (FileCopy)

    • Bitnugger
    • 23. Oktober 2016 um 15:48

    Danke, ist lieb gemeint, aber XP ist für mich schon lange keine Option mehr und auch wenn die MS-RAMDISK auf Win 10 laufen sollte, wäre sie für mich uninteressant, weil sie nicht dynamisch* ist und es davon auch höchstwahrscheinlich keine 64-Bit-Version gibt, die eine max. Größe > 3,5 GB erlaubt.

    Meiner RAMDISK benutze ich als temporäres Verzeichnis für den Browser-Cache (Firefox), zum Archive ent-/packen, Musik/Videos transkodieren, und für diverse Laufzeitdaten für Scripte, z. B. Playlisten.

    * die RAMDISK belegt immer nur so viel RAM, wie sie an Inhalt hat... und wächst mit dem Inhalt dynamisch an.

  • AutoIt bricht ohne ersichtlichen Grund beim Kopiern von Datein ab (FileCopy)

    • Bitnugger
    • 22. Oktober 2016 um 17:12
    Zitat von Peter S. Taler

    Daten zwischen zwei Programmen zu "transportieren"

    Dann schau mal, ob dir das nicht besser gefällt... musst du natürlich noch an deine Bedürfnisse anpassen. Eine weitere Alternative wäre via TCP/UDP zu kommunizieren...

    Welche RAMDISK benutzt du denn? Habe schon einige getestet, die hatten aber alle unverzeihliche Macken. Benutze nun seit längerem "ImDisk Toolkit" und bin sehr zufrieden damit, zumal du damit auch 'dynamische' RAMDISKs erstellen kannst.

    FAT32
    ----------------------------------------------------------
    Maximum disk size: 2 terabytes
    Maximum file size: 4 gigabytes
    Maximum number of files on disk: 268,435,437
    Maximum number of files in a single folder: 65,534


    NTFS ("New Technology File System")
    ----------------------------------------------------------
    Maximum disk size: 256 terabytes
    Maximum file size: 256 terabytes
    Maximum number of files on disk: 4,294,967,295
    Maximum number of files in a single folder: 4,294,967,295

    Der Explorer und viele andere Programme, die sich am Explorer orientieren, machen allerdings schon weit vorher schlapp.

    CopyDataRcv - der Empfänger
    AutoIt
    ;-- TIME_STAMP   2016-10-09 08:06:57
    
    
    #include <Array.au3>
    
    
    ; Windows Definitions
    Global Const $StructDef_COPYDATA = "ptr;dword;ptr"
    Global Const $WM_COPYDATA = 0x4A
    Global Const $WM_CLOSE = 0x10
    ; The costum Struct (Must be the same in Sender and Recivcer)
    Global Const $STRUCTDEF_AU3MESSAGE = "char[256];int"
    
    
    ; Create Reciver window
    $hwmd_Reciver = GUICreate("CopyDataRcv")
    ; Register Windows Messages
    GUIRegisterMsg($WM_COPYDATA, "_GUIRegisterMsgProc")
    GUIRegisterMsg($WM_CLOSE, "_GUIRegisterMsgProc")
    ; Message Handler
    Func _GUIRegisterMsgProc($hWnd, $MsgID, $WParam, $LParam)
    	If $MsgID = $WM_COPYDATA Then
    		; We Recived a WM_COPYDATA Message
    		; $LParam = Poiter to a COPYDATA Struct
    		$vs_cds = DllStructCreate($StructDef_COPYDATA, $LParam)
    		; Member No. 3 of COPYDATA Struct (PVOID lpData;) = Pointer to Costum Struct
    		$vs_msg = DllStructCreate($STRUCTDEF_AU3MESSAGE, DllStructGetData($vs_cds, 3))
    		Local $sMessage = DllStructGetData($vs_msg, 1)
    		; Display what we have recived
    		ConsoleWrite('$sMessage = ' & $sMessage & @CRLF)
    		Local $aMessage = StringSplit($sMessage, '||', $STR_ENTIRESPLIT)
    		;_ArrayDisplay($aMessage, '$aMessage')
    		Local $asMessage = _ArrayToString($aMessage, '! ' & @CRLF)
    		ConsoleWrite($asMessage & @CRLF)
    		; Array|2|3|2||12345||Something|for|us|to|shout|about!
    		Local $sType = StringMid($sMessage, 1, StringInStr($sMessage, '|', 0, 1) - 1)
    		ConsoleWrite('$sType    = ' & $sType & @CRLF)
    		Local $sType = StringMid($sMessage, 1, StringInStr($sMessage, '|', 0, 2))
    		ConsoleWrite('$sType    = ' & $sType & @CRLF)
    		;MsgBox(0, "Test String", DllStructGetData($vs_msg, 1))
    		;MsgBox(0, "Test Integer", DllStructGetData($vs_msg, 2))
    	ElseIf $MsgID = $WM_CLOSE Then
    		; We Recived a WM_CLOSE Message
    		Exit
    	EndIf
    EndFunc   ;==>_GUIRegisterMsgProc
    ; Keep it Runnig ...
    While 1
    	Sleep(250)
    WEnd
    Alles anzeigen
    SendMessage - der Sender
    AutoIt
    ;-- TIME_STAMP   2016-10-09 08:06:15
    
    
    #include <misc.au3>
    #include <SendMessage.au3>
    #include <_UBound.au3>
    #include <Array.au3>
    
    
    ; Windows Definitions
    Global Const $StructDef_COPYDATA = "dword var1;dword var2;ptr var3" ;I have changed piccaso's structure
    Global Const $WM_COPYDATA = 0x4A
    
    
    Global $aTextToSend = [['Something', 'for'], ['us', 'to'], ['shout', 'about!']]
    $sUB = _UBound($aTextToSend, 2)
    $aUB = _UBound($aTextToSend, 1)
    ;_ArrayDisplay($aUB, '$aUB')
    
    
    ; Type of Var
    Local $sTextToSendArray2String = VarGetType($aTextToSend) & '||'
    ; UBoundInfo
    For $i = 0 To $aUB[1] - 1 Step 1
    	$sTextToSendArray2String &= $aUB[$i] & '|'
    Next
    $sTextToSendArray2String &= '|'
    ; Passwort
    Local $sPasswort = '12345' & '||'
    $sTextToSendArray2String &= $sPasswort
    ; Daten
    For $i = 0 To $aUB[1] - 1 Step 1
    	If $aUB[2] > 1 Then
    		For $j = 0 To $aUB[2] - 1 Step 1
    			;ConsoleWrite(StringFormat('$i:%s $j:%s', $i, $j) & @CRLF)
    			$sTextToSendArray2String &= $aTextToSend[$i][$j] & '|'
    		Next
    	Else
    		$sTextToSendArray2String &= $aTextToSend[$i] & '|'
    	EndIf
    Next
    $sTextToSendArray2String = StringTrimRight($sTextToSendArray2String, 1)
    ConsoleWrite($sTextToSendArray2String & @CRLF)
    Local $aMessage = StringSplit($sTextToSendArray2String, '||', $STR_ENTIRESPLIT)
    ;_ArrayDisplay($aMessage, '$aMessage')
    ;Exit
    $TextToSend = $sTextToSendArray2String
    ;$TextToSend = "Something for us to shout about!"
    $CDString = DllStructCreate("char var1[256]") ;the array to hold the string we are sending
    
    
    DllStructSetData($CDString, 1, $TextToSend)
    $pCDString = DllStructGetPtr($CDString) ;the pointer to the string
    
    
    $vs_cds = DllStructCreate($StructDef_COPYDATA) ;create the message struct
    DllStructSetData($vs_cds, "var1", 0) ;0 here indicates to the receiving program that we are sending a string
    DllStructSetData($vs_cds, "var2", StringLen($TextToSend) + 1) ;tell the receiver the length of the string
    DllStructSetData($vs_cds, "var3", $pCDString) ;the pointer to the string
    $pStruct = DllStructGetPtr($vs_cds)
    _SendMessage(WinGetHandle("CopyDataRcv"), $WM_COPYDATA, 0, $pStruct)
    
    
    ;MsgBox(0,'Done','String sent')
    ConsoleWrite('Done, String sent' & @CRLF)
    
    
    $vs_cds = 0 ;free the struct
    $CDString = 0 ;free the struct
    Alles anzeigen
  • ControlSend sendet Text nur Lower-Case

    • Bitnugger
    • 20. Oktober 2016 um 02:04

    WinScp... Putty bietet dafür doch auch eigene Tools an: PSFTP.EXE, PSCP.EXE, PLINK.EXE

    Dann fällt mir dazu noch ein...
    via UDF: https://www.autoitscript.com/forum/topic/13…ol-using-psftp/
    via DLL: https://curl.haxx.se/libcurl/c/libcurl.html

  • FileListToArray Fileliste in bestimmten Unterordnern

    • Bitnugger
    • 19. Oktober 2016 um 11:15

    Teste das mal...

    AutoIt
    ;-- TIME_STAMP   2016-10-19 11:12:25
    
    
    #include <File.au3>
    
    
    ;DirCreate('S:\04 Objekte\123\02 Wartungen\05 Leistungsjahre\xyxy\01 Dokumentation')
    ;DirCreate('S:\04 Objekte\456\02 Wartungen\05 Leistungsjahre\dffg\01 Dokumentation')
    ;DirCreate('S:\04 Objekte\abc\02 Wartungen\05 Leistungsjahre\jkkl\01 Dokumentation')
    
    
    Local $sPath = "S:\04 Objekte", $sFilter = "*", $iFlag = 2, $aFolder = _FileListToArray($sPath, $sFilter, $iFlag)
    If @error Then Exit 1
    
    
    Local $sSPC = '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
    ConsoleWrite($sSPC & @CRLF)
    For $i = 1 To $aFolder[0]
    	$sYear = $sPath & "\" & $aFolder[$i] & "\02 Wartungen\05 Leistungsjahre"
    	If FileExists($sYear) = 0 Then ContinueLoop
    
    
    	$aYearList = _FileListToArray($sYear, $sFilter, $iFlag)
    	If @error Then Exit 2
    
    
    	For $j = 1 To $aYearList[0]
    		$sDokuPath = $sPath & "\" & $aFolder[$i] & "\02 Wartungen\05 Leistungsjahre" & "\" & $aYearList[$j]
    		ConsoleWrite(StringFormat('+ Path gefunden: "%s\\"\n', $sDokuPath))
    		; Dateiliste laden...
    		; ...
    	Next
    Next
    ConsoleWrite($sSPC & @CRLF)
    Alles anzeigen
  • ControlSend sendet Text nur Lower-Case

    • Bitnugger
    • 19. Oktober 2016 um 10:31

    Insbesonders bei fremden Controls habe ich es mir angewöhnt, diesen vorhab immer den Fokus mit ControlFocus() zu geben, bevor ich etwas an sie sende.

  • AutoIt bricht ohne ersichtlichen Grund beim Kopiern von Datein ab (FileCopy)

    • Bitnugger
    • 18. Oktober 2016 um 22:34

    Bei sehr langen Pfaden gehe ich gerne hin und verkürze diese... via HARDLINK, SUBST ODER PUSHD/POPD... das macht nebenher auch noch die Ausgaben übersichtlicher...

    Z. B. so...

    AutoIt
    Local $iNTFSLink = FileCreateNTFSLink('f:\Audio\MP3\International\S\Scorpions Discography\2000 - Scorpions - Moment Of Glory (With Berliner Philharmoniker)', 'f:\Scorpions', $FC_NOOVERWRITE)
    If FileCopy($iNTFSLink & '\*.*', 'e:\AUDIO\Scorpions', $FC_NOOVERWRITE + $FC_CREATEPATH) = 0 Then Exit ConsoleWrite('Ops, Fehler beim Kopieren...' & @CRLF & '--> ' & $iNTFSLink & @CRLF) +1
  • AutoIt: Checkboxen direkt in.ini Datei Speichern?

    • Bitnugger
    • 18. Oktober 2016 um 21:53

    "Learning by Doing" ist sicher auch ein sehr guter Weg, sich Wissen über AutoIt anzueignen... das geht bis zu einem gewissen Punkt, doch irgendwann tritt man dann zunehmend auf der Stelle und kommt nicht weiter. Ich denke, am besten kannst du lernen, wenn du dir von anderen Usern mit mehr Erfahrung die Scripte anschaust und versuchst diese zu verstehen. So habe ich es gemacht... quasi in jedes Script mal reingeschnüffelt um zu schauen, was der User da wie gemacht hat. Sehr wichtig ist aber vor allem, dass man häufig verwendete Befehle und Funktionen wie im Schlaf beherrscht und nicht für jeden Pups in der Hilfe nachschlagen muss, denn das lenkt extrem ab und man verliert dabei dann sicher auch oft den roten Faden.

    Ans Herz legen würde ich jedem Neuling, sich gleich von Anfang an mit den "Abbrevs" anzufreunden, denn der Zeitgewinn dadurch ist phenomenal... der Aufwand diese auswendig zu lernen, dagegen sehr gering. Zudem verfahre ich nach dem Motto... wer alles selbst schreibt, ist entweder dumm, oder hat den letzten Knall nicht gehört, denn für fast alle Bereiche gibt es schon fertige UDFs, die einem nicht nur enorm viel Arbeit abnehmen, sondern vor allem auch viel Ärger und wertvolle Zeit ersparen.

    "Styleguide-Konformität" ist ein weiterer wichtiger Punkt... im Prinzip also, nicht immer den Weg des geringsten Widerstandes gehen und nur das Nötigste machen... sondern auch ein wenig Zeit für die Kommentare opfern, denn du wirst es dir später selbst danken!


    Abschießend noch ein Link, den ich auch als extrem wichtig einstufe... denn diese "Gangart" erspart einem rund 90-95 Prozent an Fehlersuche im eigenen "Kot". ;)

    https://www.autoitscript.com/wiki/Best_coding_practices

  • Ownhotkey​s - Lua shell.exec() macht Probleme mit WindowsBlinds

    • Bitnugger
    • 15. Oktober 2016 um 19:05

    Oh ja, danke, das ist ja mal super - und auch schon geändert... in meinem Beispiel lade ich die Dateien jedoch, um sie zu bearbeiten: ownhotkeys.properties, Ownhotkeys.lua and OHKfuncs.lua. Momentan macht das Script dies noch mit Drag-N-Drop in das SciTE-Window... doch dass werde ich ändern und von SciTE selbst erledigen lassen.

    Wenn die ownhotkeys.properties nun durch meine SciTEUser.properties importiert werden, diese aber in Ownhotkeys.lua eh komplett eingelesen werden, ist das nicht irgendwie doppelmoppel?

    local file = io.open(os.getenv('USERPROFILE')..'\\AppData\\Local\\AutoIt v3\\SciTE\\ownhotkeys.properties')

    Oder anders gefragt... der Inhalt der ownhotkeys.properties ist doch nur für Ownhotkeys.lua von Interesse?!

    Gestern erst gesehen, dass SciTE ein Logfile anlegt... c:\Program Files (x86)\AutoIt3\SciTE\install.log - und man damit nachvollziehen kann, was SciTE bei der Installation alles macht...

  • Ownhotkey​s - Lua shell.exec() macht Probleme mit WindowsBlinds

    • Bitnugger
    • 15. Oktober 2016 um 00:13

    Vor ein einigen Tagen habe ich seit langer Zeit mal wieder an meinen Einstellungen für Ownhotkeys geschraubt, was soweit auch alles wunderbar funktionierte. Damit wollte ich nun endlich mal ein paar Einträge aus meinen hoffnungslos überfüllten SciTE-Menüs nach Ownhotkeys verlagern. Angefangen hatte ich mit den Properties... und da dachte ich mir, warum soll ich nicht gleich alle thematisch zusammengehörigen Properties auf einen Schlag laden?!

    Hier ein Beispiel: ownhotkeys.properties

    Brainfuck
    #~ Ctrl+Win, Ctrl+0
    own.mode.cmd.48=OHK.ShellExecute("%ProgramFiles(x86)%\\AutoIt3\\SciTE\\SciTE.exe", "%SCITE_USERHOME%\\ownhotkeys.properties", "%AU3_LUASCRIPTS%\\Ownhotkeys.lua", "%AU3_LUASCRIPTS%\\OHKfuncs.lua")
    own.mode.descript.48=Ctrl+$(own.mode.indicator.descript), Ctrl+0|Open ownhotkeys.properties, Ownhotkeys.lua and OHKfuncs.lua


    Hiermit wollte ich SciTE also drei Dateien via Lua schicken, was auch soweit funktioniert - doch was nun... es hat mein SciTE-Window grafisch zerhauen... und dann ist mir aufgefallen, dass dies nur passiert, wenn mehr als eine Datei an SciTE gesendet wird.

    Klar ist nun, dass es am Zusammenspiel der Lua-Funktion shell.exec() mit WindowsBlinds liegt. Deshalb habe ich nach einer für mich akzeptablen Lösung gesucht... und hier ist sie... im Anhang.

    Meine angepasste ownhotkeys.properties

    Brainfuck
    #~ Ctrl+Win, Ctrl+0
    own.mode.cmd.48=OHK.ShellExecute("%AU3_PROJEKTE%\\SciTEx\\SciTEOpen.exe", "%SCITE_USERHOME%\\ownhotkeys.properties", "%AU3_LUASCRIPTS%\\Ownhotkeys.lua", "%AU3_LUASCRIPTS%\\OHKfuncs.lua")
    own.mode.descript.48=Ctrl+$(own.mode.indicator.descript), Ctrl+0|Open ownhotkeys.properties, Ownhotkeys.lua and OHKfuncs.lua

    Die dazu benötigte Lua-Funktion in OHKfuncs.lua

    Brainfuck
    -------------------------------------------------------------------------
    --[[	OHK.ShellExecute( path_file [, param1 [, param2 [, ..] ] ] )
    ]]
    -------------------------------------------------------------------------
    OHK.ShellExecute = function(_path, ...)
    	local tParam = {_path, ...}
    	local sCmd = '"'.._path..'"'
    	if #tParam > 1 then for i = 2, #tParam do
    		sCmd = sCmd..' "'..tParam[i]..'"'
    	end end
    	--print( shell.exec(sCmd) )
    	shell.exec(sCmd)
    end  --> ShellExecute
    -------------------------------------------------------------------------
    Alles anzeigen


    Und das passiert mir dann natürlich genau an dem Tag, an dem ich die neue Version von SciTE4AutoIt installiere... dachte schon, habe mir mal wieder alles zerschossen... grrr
    SciTEOpen.png

    Dateien

    SciTEOpen.zip 805,56 kB – 226 Downloads
  • Txt Datei

    • Bitnugger
    • 5. Oktober 2016 um 01:19

    Hallo @Christoph54

    Das mit der For-Schleife hast du ja schön gelöst, da man sich so ein Trimmen erspart. Das StringSplit mit dem @LF ist weniger fein, denn wer will schon ein verwaistes @CR haben?

    Hm, "1 + 2 To 9 = 10" ? :D

    So hätte ich es gemacht... da du dir so 2x UBound() ersparst.

    AutoIt
    #include <Array.au3>
    ; Erstelle zu testzwecken eine 10-zeilige Eingabe
    Local $sTest = "1te Zeile lalala"
    For $i = 2 To 10
    	$sTest &= @CRLF & $i & "te Zeile lalala"
    Next
    ; Beispiel:
    Local $aZeilen = StringSplit($sTest, @CRLF, 1) ; String in Zeilen aufteilen
    _ArrayDisplay($aZeilen)
    ; lösche die ersten und die letzten 3 zeilen
    _ArrayDelete($aZeilen, "0-3;" & $aZeilen[0] - 2 & "-" & $aZeilen[0])
    _ArrayDisplay($aZeilen)
    Alles anzeigen
  • Hooks - WM_KEYUP verschlucken?

    • Bitnugger
    • 4. Oktober 2016 um 07:49

    Schau mal ob dir das hier weiter hilft...

    https://github.com/J2TeaM/AutoIt-…lockInputEx.au3

  • JavaFX in AutoIt? - Framework

    • Bitnugger
    • 2. Oktober 2016 um 13:08

    Mit deinem "Tutorial – OOP in AutoIt" zeigst du doch, mit welcher Gründlichkeit du die Dinge angehst. Zudem bin ich schon seit einigen Jahren hier im Forum unterwegs und habe somit auch schon einige Beiträge von dir gelesen.

    Mit FreeBASIC hantiere ich erst seit ein paar Wochen... programmiertechnisch wäre ich derzeit also keine Hilfe - in ein paar Monaten vielleicht. Und schau an, was @bazii schreibt... grins

    Teamspeak(-Server) habe ich...

  • JavaFX in AutoIt? - Framework

    • Bitnugger
    • 1. Oktober 2016 um 00:25
    Zitat von Make-Grafik

    JavaFX

    Hm, ja, das liest sich ja alles wirklich superaffengeil... da ich deine programmiertechnischen Qualitäten mittlerweile ja schon recht gut einschätzen kann ;) - und ich von daher absolut überzeugt bin, dass du das am Ende alles super umsetzen wirst, sage ich mal in Kurzform: Jeep, ich bin zu 1001% dabei!

    Wenn ich irgendwie helfen kann, lasse es mich wissen - dafür opfere ich gerne meine Freizeit. :D

  • ControlSend sendet Text nur Lower-Case

    • Bitnugger
    • 30. September 2016 um 23:59
    Zitat von Micha_he

    Diese Anregung aus dem englischen AutoIt-Forum fand ich interessant:

    Hehe... isjama ne echt coole Idee! ;)

    Ähnliche Probleme hatte ich z. B. auf Win 7 mit "Synergy" - bei allen Tastatureingaben, die zu einem anderen PC gesendet werden sollen, wurden die Großbuchstaben ausgefiltert... und ich meine gelesen zu haben, dass Microsoft diese Nettigkeit aus sicherheitstechnischen Gründen implementiert hat. Demzufolge wird der Tipp, den @Micha_he hier angeführt hat, sicher auch keine dauerhafte Lösung sein.

  • String nach letzem \ abschneiden

    • Bitnugger
    • 28. September 2016 um 21:40
    Zitat von Christoph54

    $sNeuerPfad = StringRegExpReplace($sPfad, "\\[^\\]+$", "\\", 1)

    Oder so...

    AutoIt
    ConsoleWrite(StringRegExpReplace(@ScriptDir, "[^\\]+$", "\", 1) & @CRLF)
    ConsoleWrite(StringRegExpReplace(@ScriptFullPath, "[^\\]+$", "\", 1) & @CRLF)
  • PuttyShortcuts

    • Bitnugger
    • 22. September 2016 um 20:53

    Kitty hast du auch ausprobiert?

    Download

  • Uninstallstring auslesen

    • Bitnugger
    • 19. September 2016 um 21:50

    Z. B. so...

    Uninstall
    AutoIt
    ;-- TIME_STAMP   2016-09-19 21:46:51
    
    
    Local $sHKLM = (@OSArch = 'X64') ? 'HKLM64' : 'HKLM', _
    	$sSearch = "Workplace", _
    	$sColor, $sKey = '', $iEval = 0, $sBase = $sHKLM & "\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
    
    
    Do
    	$iEval += 1
    	$sKey = RegEnumKey($sBase, $iEval)
    	$sColor = (StringInStr($sKey, $sSearch) > 0) ? '+' : '-'
    	ConsoleWrite(StringFormat($sColor & ' $iEval:%4s  %s', $iEval, $sBase & '\' & $sKey) & @CRLF)
    Until $sColor = '+' Or $sKey = ''
    
    
    If $sKey = '' Then Exit MsgBox(0, $sSearch & ' Uninstaller', 'No information about "' & $sSearch & '" found in Windows-Registry!') + 1
    
    
    Local $sBINGO = $sBase & '\' & $sKey, $sDisplay = RegRead($sBINGO, "DisplayName"), $sUninst = RegRead($sBINGO, "UninstallString")
    If MsgBox(35, $sSearch & ' Uninstaller', "Are you sure you want to uninstall " & $sSearch & "?" & @CRLF & @CRLF & _
    'Displayname: ' & @CRLF & $sDisplay & @CRLF & @CRLF & _
    'UninstallString: ' & @CRLF & $sUninst & @CRLF) = 6 Then ConsoleWrite('RunWait($sUninst)' & @CRLF)
    Alles anzeigen
  • Prüfung einer Datei

    • Bitnugger
    • 18. September 2016 um 04:08
    Zitat von bazii

    Gibt es im Netzverwerk die Möglichkeit, den Verursacher einer Dateiaktion anstatt @UserName zu schreiben?

    Ja, mit ausreichenden Rechten und den nötigen Freigaben geht fast alles.

    Der "Verursacher einer Dateiaktion" kann im Nachhinein nicht mit absoluter Sicherheit ermittelt werden - nur der Eigentümer und alle, die sonst noch schreibend darauf zugreifen dürfen. Gibt es neben dem Admin nur den Eigentümer, ist die Sache schon ziemlich klar... anderfalls müsste man die Dateizugriffe in Echtzeit überwachen, um den "Verursacher" sicher zu ermitteln.

    Zitat von nwmbd

    Ich möchte wenn Person X / Programm Y etwas in eine Datei schreibt, dass PC Z eine MSGBOX erhält.

    Nehmen wir das hier mal als konkretes Beispiel... und gehen dabei davon aus, dass du im Besitz alle benötigten Rechte und Freigaben bist.

    # Benötigte Infos usw.

    • Computername und/oder IP-Adresse des PCs von Person X - sagen wir mal, es ist der PC-A
    • Dateiname und kompletter Pfad zu der Datei, die ausgelesen/überwacht werden soll
    • Username von Person X - der Programm Y gestartet hat und die Möglichkeit, Befehle auf dessen PC ausführen zu dürfen

    Auf PC-A wird nun eine Instanz deines Scriptes beim Start des PCs ausgeführt. Wurde ein Dateizufriff erkannt, wird dieser ausgewertet und je nach Fall dann via UDP eine Benachrichtigung an PC-Z gesendet, die dann folgendes beinhaltet:

    • den oder die relevanten Einträge aus der zu überwachenden Datei (enthält Datum, Uhrzeit und Aktion)
    • Name des Users

    Ich werde mich morgen mal dransetzen und etwas nach dem Schema für Dich stricken...

  • Prüfung einer Datei

    • Bitnugger
    • 14. September 2016 um 21:15

    Hehe, das liegt daran, weil ich bei mir zum Testen alle GUIs auf meinen zweiten Monitor platziere... :D

    AutoIt
    ; die böse -800
    Global $g_hGUI = GUICreate('_MonitorDirectory-Demo', 600, 430, -800)
    ;
    ; z. B. einfach so ändern...
    Global $g_hGUI = GUICreate('_MonitorDirectory-Demo', 600, 430, -1, -1)
    Zitat von bazii

    Ferner: Gibt es eine Möglichkeit, im Report noch den Benutzeramen vom Verursacher ausgeben zu lassen?

    Du kannst dir den User ausgeben lassen (siehe Bild), in dessen Kontext das Script gestartet wurde - z. B. so :

    AutoIt
    MemoWrite(StringFormat('%s %s: %s %s %s', "MonitorDirectory@" & @UserName, $Action, $FilePath, $aPos[0] + 10, $aPos[1] + 10))

    Stichwort: RunAs()

    Zitat von bazii

    gibt es auch eine Möglichkeit zu erfassen, wenn Unterverzeichnisse vom überwachten Pfad verschoben werden?

    Ja, die gibt es... siehe Bild.

    PS: Ich habe vorhin erst richtig mitbekommen, was @Kanashius in Post #15 da Feines geschrieben hat... ==> "_WinAPI_ShellChangeNotifyRegister". Die Funktion ist wirklich echt super und sie erledigt mit viel weniger Aufwand dieselbe Arbeit, wie mein Script! ^^ Ich spiele noch damit rum... wenn ich eine kleine Demo fertig habe, schiebe ich sie bei Bedarf gerne hoch.

    _MonitorDirectory-Demo_02.png

  • Netzwerkadapter auslesen

    • Bitnugger
    • 14. September 2016 um 18:44

    So geht es auch... hier muss ebenfalls nur der Name der Netzwerkkarte angepasst werden.

    WMICGetNetConnectionStatus()
    AutoIt
    #Region    ;************ Includes ************
    ;#include <Array.au3>
    #Include <AutoItConstants.au3>
    #Include <StringConstants.au3>
    #EndRegion ;************ Includes ************
    
    
    ;-- TIME_STAMP   2016-09-14 18:23:46
    
    
    Global $g_sName = 'Realtek PCIe GBE Family Controller'
    MsgBox(262144, 'WMICGetNetConnectionStatus()', _
    		StringFormat('\t\t"%s"\t\t\r\r\r%s\r\r%s\r\r%s', $g_sName, 'NetConnectionStatus: ' & WMICGetNetConnectionStatus(), _
    		'#Error: ' & @error, '#Extended: ' & @extended))
    
    
    Func WMICGetNetConnectionStatus()
    	; Local $iPID = Run('WMIC NIC Where NetConnectionID!=NULL GET * /VALUE', '', @SW_HIDE, $STDOUT_CHILD)
    	; ProcessWaitClose($iPID)
    	; Exit _ArrayDisplay(StringSplit(StdoutRead($iPID), @CRLF, $STR_ENTIRESPLIT), 'WMIGetNetConnectionStatus()')
    	;
    	Local $iPID = Run('WMIC NIC Where Name="' & $g_sName & '" GET NetConnectionStatus', '', @SW_HIDE, $STDOUT_CHILD)
    	If @error Then Return SetError(1)
    	ProcessWaitClose($iPID)
    	Local $aArray = StringSplit(StringStripWS(StdoutRead($iPID), $STR_STRIPTRAILING), @CRLF, $STR_ENTIRESPLIT)
    	If @error Then Return SetError(MsgBox(262144, "WMICGetNetConnectionStatus()", "Bei StringSplit() ist ein Fehler aufgetreten!") + 2)
    	Switch $aArray[2]
    		Case 0
    			Return SetError(0, 0, "Disconnected")
    		Case 1
    			Return SetError(0, 1, "Connecting")
    		Case 2
    			Return SetError(0, 2, "Connected")
    		Case 3
    			Return SetError(0, 3, "Disconneting")
    		Case 4
    			Return SetError(0, 4, "Hardware not present")
    		Case 5
    			Return SetError(0, 5, "Hardware disabled")
    		Case 6
    			Return SetError(0, 6, "Hardware malfunction")
    		Case 7
    			Return SetError(0, 7, "Media disconnected")
    		Case 8
    			Return SetError(0, 8, "Authenticating")
    		Case 9
    			Return SetError(0, 9, "Authentication succeeded")
    		Case 10
    			Return SetError(0, 10, "Authentication failed")
    		Case 11
    			Return SetError(0, 11, "Invalid address")
    		Case 12
    			Return SetError(0, 12, "Credentials required")
    	EndSwitch
    
    
    	Return SetError(69) ;-)
    EndFunc   ;==>WMICGetNetConnectionStatus
    Alles anzeigen

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™