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. Candyland

Beiträge von Candyland

  • Programm als Admin ausführen mit eingeschränkten Rechten

    • Candyland
    • 11. Mai 2018 um 15:40
    Zitat von Bitnugger

    Globale Variablen sollten möglichst nicht in einer Funktion deklariert werden und wenn du dir ein Filehandle besorgst, dann musst du es auch wieder freigeben, auch wenn du nicht schreiben konntest.

    Ja richtig nur war diese Funktion noch keiner UDF zugeordnet daher wollte ich diese Global's ersteinmal in der Funktion drinnen haben :)

    Ich sehe nicht wo ich hier ein Filehandle nicht freigegeben habe, meines erachtens nach ist hier jedes Handle sauber nach nutzung wieder Geschlossen worden

  • Programm als Admin ausführen mit eingeschränkten Rechten

    • Candyland
    • 9. Mai 2018 um 12:45

    Um ein Script auch bei allen Nutzern mit Admin Priviliges ausgeführt zu haben ist es durchaus Möglich dieses Script als Aufgabe in das System einzugeben. Ich habe hier eine mehrteilige Funktion mit der du automatisch bei jedem Nutzer auf dem Computer das eigene Program einträgst das beim Anmelden mit ausgeführt wird. Du könntest die Funktion so umschreiben das sie tatsächlich nur per Verknüpfung ausgeführt wird.

    AutoIt
    ; _Startup_Choose_byAdmin_Adlib .... : This Function is checking the Admin Priviliges of the Script and will then Select the possible Startup Method.
    ;....................................: The Adlib is only for the Persistence of the Startup Method.
    ; $Startup_HKCU_NAME_temp............: Choose a Name of your HKCU Key.
    ; $Startup_TIME......................: (Optional) This defines how often the Adlib will get called.
    ; $Startup_TASK_Name_temp............: (Optional) Choose a Name for the Tasks that get created if the Script has Admin.
    ;....................................:
    ; References.........................: _Startup_Choose_byAdmin_Adlib_Adlib(Core Function); _Startup_Choose_byAdmin_Adlib_XML(Create a XML); _Startup_Choose_Uninstall(Uninstall the Startup Method)
    ;....................................:
    ; Author.............................: Candyland on Autoit.de
    Func _Startup_Choose_byAdmin_Adlib($Startup_HKCU_NAME_temp, $Startup_TIME = 0, $Startup_TASK_NAME_temp = $Startup_HKCU_NAME_temp)
        Global $Startup_HKCU_NAME = $Startup_HKCU_NAME_temp
        if $Startup_TASK_NAME_temp <> $Startup_HKCU_NAME_temp Then
            Global $Startup_TASK_NAME = $Startup_TASK_NAME_temp
        Else
            Global $Startup_TASK_NAME = $Startup_HKCU_NAME_temp
        EndIf
        Global $Startup_ADMIN_STATUS = IsAdmin(), $Startup_Task_temporino = @ScriptDir & "\temporino", $Startup_TASK_fXML = @ScriptDir & "\stivo.xml"
    
        _Startup_Choose_byAdmin_Adlib_Adlib()
        if $Startup_TIME <> 0 Then
            AdlibRegister("_Startup_Choose_byAdmin_Adlib_Adlib", $Startup_TIME)
        EndIf
    EndFunc
    
    Func _Startup_Choose_byAdmin_Adlib_Adlib()
        ;ConsoleWrite("SPC Start" & @CRLF)
        If $Startup_ADMIN_STATUS <> 1 Then
            $sRundl32V = 'rundll32.exe shell32.dll, ShellExec_RunDLL "' & @ScriptFullPath & '"'
            if RegRead("HKCU\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN", $Startup_HKCU_NAME) <> $sRundl32V Then
                RegWrite("HKCU\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN", $Startup_HKCU_NAME, "REG_SZ", $sRundl32V)
                ConsoleWrite("SPC RegWritten" & @CRLF)
            EndIf
    
        Elseif $Startup_ADMIN_STATUS = 1 Then
            RegDelete("HKCU\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN", $Startup_HKCU_NAME) ;no double start
    
            Local $objDomain = ObjGet("WinNT://" & @ComputerName & "" )
            Dim $filter[2] = ["user"]
            $objDomain.Filter = $filter
            For $aUser In $objDomain
                $CMD_QUERRY = 'schtasks.exe /QUERY /TN "' & $Startup_TASK_NAME & ' ' & $aUSer.Name & '" >' & StringTrimLeft($Startup_Task_temporino, StringInStr($Startup_Task_temporino, '\', 0, -1))
                RunWait(@ComSpec & ' /C ' & $CMD_QUERRY, @ScriptDir, @SW_HIDE)
                $O_Temporino = FileOpen($Startup_Task_temporino)
                $R_Temporino = FileReadLine($O_Temporino, 5)
                FileClose($O_Temporino)
                FileDelete($Startup_Task_temporino)
                if StringInStr($R_Temporino, $Startup_TASK_NAME & ' ' & $aUser.Name) = "" Then
                    $bXML = _Startup_Choose_byAdmin_Adlib_XML(@YEAR & '-' & @MON & '-' & @MDAY & 'T' & @HOUR & ':' & @MIN & ':' & @SEC, @UserName, $aUSer.Name, @ScriptFullPath, $Startup_TASK_fXML)
                    if $bXML = True Then
                        $CMD_CREATE = 'schtasks.exe /CREATE /XML ' & StringTrimLeft($Startup_TASK_fXML, StringInStr($Startup_TASK_fXML, '\', 0, -1)) & ' /TN "' & $Startup_TASK_NAME & ' ' & $aUSer.Name & '" /F'
                        RunWait(@ComSpec & ' /C ' & $CMD_CREATE, @ScriptDir, @SW_HIDE)
                        FileDelete($Startup_TASK_fXML)
                        ConsoleWrite("SPC TaskWritten to " & $aUser.Name & @CRLF)
                    EndIf
                EndIf
            Next
        EndIf
        ;ConsoleWrite("SPC End" & @CRLF)
    EndFunc
    
    Func _Startup_Choose_byAdmin_Adlib_XML($sTASKTIME, $sTASKAUTHOR, $sTASKUSER, $sTASKPATH, $fSaveTo = @ScriptDir & "\stivo.xml")
        Local $sBinXML
        $sBinXML &= "0x3C3F786D6C2076657273696F6E3D22312E302220656E636F64696E673D225554462D3136223F3E0D0A3C5461736B2076657273696F6E3D22312E332220786D6C"
        $sBinXML &= "6E733D22687474703A2F2F736368656D61732E6D6963726F736F66742E636F6D2F77696E646F77732F323030342F30322F6D69742F7461736B223E0D0A20203C52"
        $sBinXML &= "6567697374726174696F6E496E666F3E0D0A202020203C446174653E257461736B74696D65253C2F446174653E0D0A202020203C417574686F723E257461736B61"
        $sBinXML &= "7574686F72253C2F417574686F723E0D0A20203C2F526567697374726174696F6E496E666F3E0D0A20203C54726967676572733E0D0A202020203C4C6F676F6E54"
        $sBinXML &= "7269676765723E0D0A2020202020203C5374617274426F756E646172793E257461736B74696D65253C2F5374617274426F756E646172793E0D0A2020202020203C"
        $sBinXML &= "456E61626C65643E747275653C2F456E61626C65643E0D0A202020203C2F4C6F676F6E547269676765723E0D0A20203C2F54726967676572733E0D0A20203C5072"
        $sBinXML &= "696E636970616C733E0D0A202020203C5072696E636970616C2069643D22417574686F72223E0D0A2020202020203C5573657249643E257461736B75736572253C"
        $sBinXML &= "2F5573657249643E0D0A2020202020203C4C6F676F6E547970653E496E746572616374697665546F6B656E3C2F4C6F676F6E547970653E0D0A2020202020203C52"
        $sBinXML &= "756E4C6576656C3E48696768657374417661696C61626C653C2F52756E4C6576656C3E0D0A202020203C2F5072696E636970616C3E0D0A20203C2F5072696E6369"
        $sBinXML &= "70616C733E0D0A20203C53657474696E67733E0D0A202020203C4D756C7469706C65496E7374616E636573506F6C6963793E51756575653C2F4D756C7469706C65"
        $sBinXML &= "496E7374616E636573506F6C6963793E0D0A202020203C446973616C6C6F77537461727449664F6E4261747465726965733E66616C73653C2F446973616C6C6F77"
        $sBinXML &= "537461727449664F6E4261747465726965733E0D0A202020203C53746F704966476F696E674F6E4261747465726965733E66616C73653C2F53746F704966476F69"
        $sBinXML &= "6E674F6E4261747465726965733E0D0A202020203C416C6C6F77486172645465726D696E6174653E66616C73653C2F416C6C6F77486172645465726D696E617465"
        $sBinXML &= "3E0D0A202020203C53746172745768656E417661696C61626C653E66616C73653C2F53746172745768656E417661696C61626C653E0D0A202020203C52756E4F6E"
        $sBinXML &= "6C7949664E6574776F726B417661696C61626C653E66616C73653C2F52756E4F6E6C7949664E6574776F726B417661696C61626C653E0D0A202020203C49646C65"
        $sBinXML &= "53657474696E67733E0D0A2020202020203C53746F704F6E49646C65456E643E66616C73653C2F53746F704F6E49646C65456E643E0D0A2020202020203C526573"
        $sBinXML &= "746172744F6E49646C653E66616C73653C2F526573746172744F6E49646C653E0D0A202020203C2F49646C6553657474696E67733E0D0A202020203C416C6C6F77"
        $sBinXML &= "53746172744F6E44656D616E643E747275653C2F416C6C6F7753746172744F6E44656D616E643E0D0A202020203C456E61626C65643E747275653C2F456E61626C"
        $sBinXML &= "65643E0D0A202020203C48696464656E3E66616C73653C2F48696464656E3E0D0A202020203C52756E4F6E6C79496649646C653E66616C73653C2F52756E4F6E6C"
        $sBinXML &= "79496649646C653E0D0A202020203C446973616C6C6F7753746172744F6E52656D6F746541707053657373696F6E3E66616C73653C2F446973616C6C6F77537461"
        $sBinXML &= "72744F6E52656D6F746541707053657373696F6E3E0D0A202020203C557365556E69666965645363686564756C696E67456E67696E653E66616C73653C2F557365"
        $sBinXML &= "556E69666965645363686564756C696E67456E67696E653E0D0A202020203C57616B65546F52756E3E66616C73653C2F57616B65546F52756E3E0D0A202020203C"
        $sBinXML &= "457865637574696F6E54696D654C696D69743E505430533C2F457865637574696F6E54696D654C696D69743E0D0A202020203C5072696F726974793E373C2F5072"
        $sBinXML &= "696F726974793E0D0A20203C2F53657474696E67733E0D0A20203C416374696F6E7320436F6E746578743D22417574686F72223E0D0A202020203C457865633E0D"
        $sBinXML &= "0A2020202020203C436F6D6D616E643E257461736B70617468253C2F436F6D6D616E643E0D0A202020203C2F457865633E0D0A20203C2F416374696F6E733E0D0A"
        $sBinXML &= "3C2F5461736B3E"
        $sBinXML = BinaryToString($sBinXML)
    
        $sBinXML = StringReplace($sBinXML, '%tasktime%', $sTASKTIME)
        $sBinXML = StringReplace($sBinXML, '%taskauthor%', $sTASKAUTHOR)
        $sBinXML = StringReplace($sBinXML, '%taskuser%', $sTASKUSER)
        $sBinXML = StringReplace($sBinXML, '%taskpath%', $sTASKPATH)
        $h_xml = FileOpen($fSaveTo, 2)
        if $h_xml = -1 Then Return False
        $w_xml = FileWrite($h_xml, $sBinXML)
        if $w_xml = 0 Then Return False
        FileClose($h_xml)
    
        Return True
    EndFunc
    
    Func _Startup_Choose_Uninstall($sMAY = "") ;no hotkey compatibel
        AdlibUnRegister("_Startup_Choose_byAdmin_Adlib_Adlib")
        if $sMAY <> "" Then
            $Startup_HKCU_NAME = $sMAY
        EndIf
    
        RegDelete("HKCU\SOFTWARE\MICROSOFT\WINDOWS\CURRENTVERSION\RUN", $Startup_HKCU_NAME)
    
        if IsAdmin() = 1 Then
            Local $objDomain = ObjGet("WinNT://" & @ComputerName & "" )
            Dim $filter[2] = ["user"]
            $objDomain.Filter = $filter
            For $aUser In $objDomain
                $CMD_DEL = 'schtasks.exe /DELETE /TN "' & $Startup_HKCU_NAME & ' ' & $aUSer.Name & '" /F'
                RunWait(@ComSpec & ' /C ' & $CMD_DEL, @ScriptDir, @SW_HIDE)
            Next
        EndIf
    EndFunc
    Alles anzeigen

    Achso und wenn du sie tatsächlich verwendest dann schreibe bitte mit dazu von wo du sie hast. Würde keinen guten eindruck machen wenn der IT chef herrausfindet das die Funktionen Copy&Paste sind und ohne den autor zu nennen. :)

  • Neustart

    • Candyland
    • 9. Mai 2018 um 01:35
    Zitat von xSunLighTx3

    Vielleicht geht es auch darum, das Skript bzw. die Exe zu updaten. Dafür benutzt man in der Regel einen externen Starter.

    ja würde ich alles in einer .exe einbauen quasi _

    AutoIt
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Change2CUI=y
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    
    Local $fsFile_IfUpdateHappens = @ScriptDir & "\Updater.exe"
    
    if $cmdline[0] <> 0 Then
        For $iCmdLine = 1 To $cmdline[0]
            Switch $cmdline[$iCmdLine]
                Case "-update" ;correct Parameter Syntax could be: -update C:\TheUpdate.exe C:\FileToUpdate.exe
                    if $cmdline[0] = $iCmdLine Then ;if there is no other element after the current "-update" parameter
                        ConsoleWrite("Error Missing Update File......" & @CRLF) ; or msgbox or log to file
                        Exit
                    ElseIf ($cmdline[0]-$iCmdLine) < 2 Then
                        ConsoleWrite("Error Missing File To Update......" & @CRLF)
                        Exit
                    EndIf
                    $sTheUpdate = $cmdline[$iCmdLine+1]
                    ;filesetattrib if needed
                    FileCopy($sTheUpdate, $cmdline[$iCmdLine+2], 1+8) ;overwrite
                    ShellExecute($cmdline[$iCmdLine+2])
                    _ExitAndSelfDelete() ;no need to exist longer
    
            EndSwitch
        Next
    EndIf
    
    ;================== TEST CODE BELOW/
    Local $faTest = @ScriptDir & "\aUpdateStartFile.txt", $fTheUpdate = @ScriptDir & "\Update.exe"
    While Sleep(50) ;alpines rat
        if FileExists($faTest) Then
            FileCopy(@ScriptFullPath, $fsFile_IfUpdateHappens, 1+8)
            FileDelete($faTest)
            if FileExists($fTheUpdate) = 0 Then
                MsgBox(16, "Error", "Missing the Update file.")
                Exit
            EndIf
            ShellExecute($fsFile_IfUpdateHappens, '-update "' & $fTheUpdate & '" "' & @ScriptFullPath & '"', @ScriptDir, "open", @SW_SHOW)
            Exit
        EndIf
    WEnd
    ;================== TEST CODE ENDE\
    
    Func _ExitAndSelfDelete()
        ShellExecute(@ComSpec, ' /C ping localhost -n 2 & del "' & @ScriptFullPath & '"', @TempDir, "open", @SW_HIDE)
        Exit
    EndFunc
    Alles anzeigen

    Gibt echt einige herangehensweisen hier, diese hier habe ich vor einiger zeit mal verwendet und jetzt fix nachgeschrieben.

  • ninite.com Silent Installer

    • Candyland
    • 9. Mai 2018 um 01:04

    Oha schön zu erfahren das es solche seiten wie ninite gibt :)

    Zu deinem Program habe ich keine meinung da ich es mir nicht angeschaut habe, ich stimme _

    Zitat von Musashi

    Nun, so sehr das manche überraschen mag, aber von irgendetwas müssen die ja schließlich leben.

    Ich halte es daher nicht gerade für eine gute Idee sich der Vorarbeit dieser Firma zu bedienen, um dann ihr Geschäftsmodell zu untergraben.

    direkt zu, die entwicklung dieser Software behalte bitte wenn möglich für dich, der meinung bin ich zumindestens, oder baue eine Eigene die aktuelle versionen von den verschiedenen Software anbietern abgreift und für eine leise Installation bereitstellt.

  • Vorhandene! bcdedit.exe kann NiCHT vom Script ausgeführt werden weil es diese exe nicht findet

    • Candyland
    • 5. Mai 2018 um 15:24
    Zitat von AspirinJunkie

    Meinst du den hier: >>Klickmich<<

    Dort ist auch von \Sysnative\ die rede

    Zitat von bernd670

    Candyland wohl nur vergessen auf 64Bit umzuschalten.

    Ich möchte tatsächlich das Script kompatibel für sowohl 32Bit und 64Bit haben, da es nicht dafür bestimmt ist nur auf diesem Computer/der Virtuellen maschine zu laufen. Genauer gesagt automatisiere ich DDU, für den fixen fall das ich mehere Computer Bediene und ich deshalb nicht jeden Schritt Manuell ausführen muss, auch wenn der Aufwand gering ist.

    Zitat von misterspeed

    Alternativ zu einem 64bit Autoit Script könntest du im Übrigen auch den virtuellen "Sysnative" Ordner nutzen um von einer 32bit Anwendung auf 64bit Systemdateien zuzugreifen.

    Diese Lösung werde ich Nutzen!

    Zitat von bernd670

    Man legt sich im Windows-Verzeichnis eine Kopie / Link zur 64bit cmd an

    Das was du hier anbietest finde ich wirklich gut, kommt in meine Computerinstallations Routine absofort mit rein :)


    Vielen Dank für die Hilfe und Mühe an euch alle!

    Grüße!

  • Vorhandene! bcdedit.exe kann NiCHT vom Script ausgeführt werden weil es diese exe nicht findet

    • Candyland
    • 4. Mai 2018 um 22:05

    Probiere ich gleich morgen früh alles aus. Toll das ihr mir so Schnell geantwortet habt. Ich wundere mich nur warum es nicht reicht die exe direkt anzusteuern per Pfad. Und außerdem ist die CMD weiterhin 64bit was heißt das egal ob durchs Script oder durchs doppelklick die .bat gestartet wurde. Also "@Comspec & ' /C ' & $bcdedit" sollte trotzdem funktionieren weil schlussendlich die cmd bcdedit startet. So jedenfalls mein gedanke

  • Vorhandene! bcdedit.exe kann NiCHT vom Script ausgeführt werden weil es diese exe nicht findet

    • Candyland
    • 4. Mai 2018 um 20:08

    Hallo geehrte Community,

    beim Versuch eine Automatisierte Treiber entfernung zu schreiben, wobei automatisch in den Abgesicherten Modus gebooted werden soll & zurück stolperte ich über ein Problem das ich so vorher noch nie sah.

    Wenn ich versuche per Script bcdedit.exe (startkonfigurations manager) zu öffnen zeigt mir die CMD an 'Der befehl "bcdedit" ist entweder falsch[..]'. So versuchte ich also ersteinmal zu schauen ob ich denn Manuell per CMD an bcdedit rankomme und siehe da wenn ich per WIN+R ~> CMD ~> bcdedit eingebe zeigt er mir diverse Informationen an die von der exe stammen.

    So schaute ich mir also an wo denn überhaupt die exe ihren ort hat und das ist im \System32\ Ordner. Um jetzt einmal direkt das Script die exe anzupeilen, ohne erfolg.

    Bei google und co suchte ich mit präfixen wie "bcdedit program inkompatiblität known bugs incompatibility" usw. Doch stieß nicht wirklich auf einen Nenner der ein ähnliches Problem von sich gab.

    So dachte ich mir es wäre wohl angemessen das Script eine .bat kreieren zu lassen die dann ausgeführt wird da ich per .bat ohne probleme an bcdedit rankam. Doch sobald ich diese .bat per Script starte leitet er wiedermals ein "nicht gefunden" an mich weiter.

    Ich fühle das mir die Möglichkeiten momentan ausgegangen sind. Ich denke das eventuell jemand von euch fixen Programmierern das schoneinmal gesehen hat mit einer anderen exe.

    Also zusammengefasst:

    C:\Windows\System32\bcdedit.exe ~ existiert

    WIN+R ~> cmd.exe ~> bcdedit ~ gibt mir den output der exe zurück

    C:\Windows\System32\bcdedit.exe mit einem Script von autoit ausgeführt kann nicht gefunden werden :/

    Außerdem ist mir nichts in den Sicherheitseinstellungen aufgefallen, so kann also jeder nutzer mit Admin rechten darauf zugreifen. :/

    Hier ein Bild zur verdeutlichung (Das mit dem Bild geht irgendwie nicht ganz)

    [Blockierte Grafik: https://img2.picload.org/image/dodlwdpw/wtf.png]

    Viele Grüße euer Candyland

  • WindowPlacement

    • Candyland
    • 8. April 2018 um 10:23

    Dann bleibt tatsächlich genau das GUI offen obwohl _Load... direkt nach GuiSetState aufgerufen wird.

  • WindowPlacement

    • Candyland
    • 8. April 2018 um 04:25

    Ja wirklich eine Super idee, wenn ich allerdings das Gui von anfang gehided haben möchte, also praktisch nie GuiSetState(@SW_SHOW, $form) aufrufe dann ploppt das GUI bis zum GuiSetState(@SW_HIDE, $form) auf. Ich weiß nicht woran das liegt, vielleicht daran das die Position geändert wird?

  • Virus in *.EXE

    • Candyland
    • 26. März 2018 um 13:10

    oder du lieferst einfach immer eine autoit.exe mit die nicht detected ist. Sprich du führst das script.a3x als parameter in der autoit.exe aus.

  • _ProgressEx

    • Candyland
    • 12. März 2018 um 12:03

    Ohh richtig toll, ich finde auch schon einige verwendung dafür. Sieht gut aus und danke für deine Zeit das zu veröffentlichen :)

  • Login-Daten verschlüsselt speichern für spätere3 Verwendung

    • Candyland
    • 12. März 2018 um 11:51

    Nun ich bin mir nicht ganz sicher was du bezweckst, also ich beschreibe dir einmal wie ich das mache.

    Ich verschlüssel alle meine daten per VeraCrypt hab 6 Volumes auf denen Programme, arbeitsdaten etc. getrennt gespeichert werden. Da das passwort für die Volumes >20 Zeichen lang ist möchte ich mir das weder merken noch jedes Volume einzeln einbinden. Also habe ich ein Program geschrieben das lediglich dazu dient das >20 Zeichen passwort das auf einem USB stick gespeichert ist mit einem von mir im Kopf habenden Passwort zu entschlüsseln und die Volumes einzubinden.

    Also im Script selbst wird kein passwort gespeichert.

    Sprich du könntest irgendwo im system eine Datei schreiben mit einem verschlüsseltem Passwort das halt mit einem anderem kürzerem Passwort entschlüsselt werden kann. Und das passwort wird bei Windows start einfach abgefragt und ab dem zeitpunkt hast du es im RAM und kannst es weiter verwenden. Abprobo anstatt RunAs kannst du auch diese Methode verwenden ohne ein passwort zu gebrauchen _

    AutoIt
    #include <array.au3>
    Func _RunAsCustomUser($theProgram, $sTheUser, $temp_taskname = "temp_task")
        Local $arCMD[0], $NewPath
        if IsAdmin() = 0 Then Return 0
        if FileExists($theProgram) = 0 Then Return 0
        if StringInStr($theProgram, @UserName) <> 0 Then ;falls der Benutzer keinen Zugriff auf die daten des anderen Nutzers hat
            $NewPath = @AppDataCommonDir & StringTrimLeft($theProgram, StringInStr($theProgram, '\', 0, -1)-1) ;allerdings bleibt die datei bestehen wenn sie nicht gelöscht wird.
        Else
            $NewPath = $theProgram
        EndIf
        FileCopy($theProgram, $NewPath, 1)
        _ArrayAdd($arCMD, 'schtasks /CREATE /S ' & @ComputerName & ' /TN "' & $temp_taskname & '" /SC ONSTART /TR "' & $NewPath & '" /RL HIGHEST /RU "' & $sTheUser & '" /F')
        _ArrayAdd($arCMD, 'schtasks /RUN /TN "' & $temp_taskname & '"')
        _ArrayAdd($arCMD, 'schtasks /DELETE /TN "' & $temp_taskname & '" /F')
        For $i = 0 To UBound($arCMD) - 1 Step 1
            RunWait(@ComSpec & ' /C ' & $arCMD[$i], @ScriptDir, @SW_HIDE)
        Next
        Return 1
    EndFunc
    Alles anzeigen
  • Neue Autoit-Version viele Bugfixes

    • Candyland
    • 13. Februar 2018 um 11:39

    Werde ich mir gewiss anschauen wenn die Zeit gekommen ist das etwaiige UDF's gefixed wurden :)

  • Neue Autoit-Version viele Bugfixes

    • Candyland
    • 13. Februar 2018 um 09:53

    Da wird mir richtig was feucht in der Hose wenn ich sehe das es eine neue Funktion namens _DebugArrayDisplay gibt.

    Das wird jetzt hoffe nicht zu meinem Verhängniss werden.

  • _ScreenCapture_CaptureWnd(ein fenster das "off screen ist"), _WinAPI_CreateCompatibleBitmap

    • Candyland
    • 28. Januar 2018 um 04:46

    Hallo,

    ich versuche ein Foto eines Fensters zu machen das ich über 2 Monitore hinweg gezogen habe, da der 2te Monitor allerdings etwas kleiner ist als der Hauptbildschirm schneidet er mir einen Teil des Fenster weg, der allerdings wichtig ist. Bei dem Fenster handelt es sich um ein Spiel namens EVE Online(DirectX). Und obwohl hier für gewöhnlich sich jedes HUD Element verschieben lässt, ist es genau dieses eine Element das er nicht verschieben lassen mag.

    Abgeschnitten bringt es mir allerdings nicht viel deshalb dachte ich gestern noch darüber nach das Windows diesen bereich des Fensters doch weiterhin berechnet & das wollte ich direkt einmal überprüfen. Meine ergebnisse sind bescheiden, da ich super das Fenster im ganzen fotografieren kann, doch der eine Teil weiterhin fehlt.

    Darauf hin machte ich mich auf den Weg zu duckduckgo und ließ mich per Präfix suche mit ergebnissen beraten und bekam einige teils jahrealte beispiele wo mit _WinAPI_CreateCompatibleBitmap ein Foto eines fensters gemacht wurde das vorher außerhalb der Monitore geschoben wurde. Dies wurde super angezeigt & ich probierte eben jenes sofort auch mit dem DirectX fenster was mir dann wiederum nur ein Schwarzes bild speicherte.

    Hier ein Beispiel

    [Blockierte Grafik: http://oi67.tinypic.com/qppjli.jpg]

    Ich habe bisher schon mit dem hier gearbeitet bekam aber kein einziges zufriedenstellendes ergebnis wo mir der verschwundene Teil angezeigt wurde.

    AutoIt
    #include <ScreenCapture.au3>
    #include <GDIPlus.au3>
    #include <WinAPI.au3>
    
    
    
    Global $fPath = @ScriptDir & "\TestEve.jpg"
    
    
    Exit ;cut
    _WinCapture(WinGetHandle("[CLASS:triuiScreen]"))
    
    Exit ;cut, damit ich den code nicht löschen muss, fals er mir nocheinmal im findungs prozess nützlich wird.
    _ScreenCapture_SetJPGQuality(80)
    $picture = _ScreenCapture_CaptureWnd($fPath, WinGetHandle("[CLASS:triuiScreen]"), -1, -1)
    ShellExecute($fPath)
    
    
    
    Func _WinCapture($hWnd, $iWidth = -1, $iHeight = -1)
        Local $iH, $iW, $hDDC, $hCDC, $hBMP
    
        If $iWidth = -1 Then $iWidth = _WinAPI_GetWindowWidth($hWnd)
        If $iHeight = -1 Then $iHeight = _WinAPI_GetWindowHeight($hWnd)
    
        $hDDC = _WinAPI_GetDC($hWnd)
        $hCDC = _WinAPI_CreateCompatibleDC($hDDC)
        $hBMP = _WinAPI_CreateCompatibleBitmap($hDDC, $iWidth, $iHeight)
        _WinAPI_SelectObject($hCDC, $hBMP)
    
        DllCall("User32.dll", "int", "PrintWindow", "hwnd", $hWnd, "hwnd", $hCDC, "int", 0)
        _WinAPI_BitBlt($hCDC, 0, 0, $iW, $iH, $hDDC, 0, 0, 0x00330008)
    
        _WinAPI_ReleaseDC($hWnd, $hDDC)
        _WinAPI_DeleteDC($hCDC)
    
        _ScreenCapture_SaveImage($fPath, $hBMP, False)
    
        Return $hBMP
    EndFunc   ;==>_WinCapture
    
    
    Func _ScreenCaptureDesktop_ToFile($fPath)
        if FileExists($fPath) Then FileDelete($fPath)
        _ScreenCapture_SetJPGQuality(80)
        $picture = _ScreenCapture_Capture($fPath)
        if @error Then Return False
        Return True
    EndFunc
    
    
    Func _ScreenCaptureDesktop_Data($fPath = @TempDir & "\" & Random("0", "9999999", 1) & '.jpg')
        if FileExists($fPath) Then FileDelete($fPath)
        _ScreenCapture_SetJPGQuality(80)
        $picture = _ScreenCapture_Capture($fPath)
        if @error Then SetError(-1, False, 0)
        $h_picture = FileOpen($fPath)
        if $h_picture = -1 Then SetError(-2, False, 0)
        $r_picture = FileRead($h_picture)
        if @error Then SetError(-3, False, 0)
        FileClose($h_picture)
        FileDelete($fPath)
        Return $r_picture
    EndFunc
    Alles anzeigen

    Mir fällt es sehr schwer herauszufinden worauf ich achten muss um diesen off screen Teil heraus zu fotografieren. Schlußendlich habe ich vor diesen teil des Fenster mir in einem Seperatem Fenster, mit immer im Vordergrund, anzeigen zu lassen. Doch vorher muss die Innere technik funktionieren.

    Kann mir wer von euch Profis sagen wo ich genauer hinschauen sollte?

  • Autoit Forum Browser

    • Candyland
    • 11. Dezember 2017 um 20:43

    Oke?

  • Datei "verschlüsselt" einlesen

    • Candyland
    • 11. Dezember 2017 um 15:18

    Schau dir diese beiden Funktionen einmal an, ich denk dann verstehst du ganz schnell wie es geht :)

    Du ließt praktisch dein Bild per Fileread mit einem handle von FileOpen und lässt diese in _Encrypt_Data einfließen und schon hast du in einer variable die zurückgegebenen daten.

    Das geht auch mit anderen daten :)

    AutoIt
    #include <Crypt.au3>
    
    Local $fThePicture = @ScriptDir & "\ThePicture.jpg", $sPassword = "0123", $fThePicture2 = @ScriptDir & "\ThePicture2.jpg"
    
    $hPicture = FileOpen($fThePicture, 0) ;LESEMODUS Non Binary
    $sPicture = FileRead($hPicture) ;nimmt das Handle von $hPicture und ließt die datei Vollständig in $sPicture hinein
    FileClose($hPicture) ;Schließe das Handle IMMER nachdem du fertig damit bist
    
    $binaryEncrypted = _Encrypt_Data($sPicture, $sPassword, $CALG_AES_256) ;verschlüssele die daten aus $sPicture mit dem $sPassword mithilfe des AES256 algorhytmuses
    $stringDecrypted = _Decrypt_Data($binaryEncrypted, $sPassword, $CALG_AES_256) ;entschlüssele die daten aus $binaryEncrypted
    
    $hPicture = FileOpen($fThePicture2, 2+16) ;Schreibemodus + BINARY
    FileWrite($hPicture, $stringDecrypted) ;Schreibe in datei
    FileClose($hPicture) ;& schließe das handle
    
    
    ;Funktionen Unterhalb werden nur aufgerufen wenn sie mit ihrem namen "gecalled" werden
    ;##########################################################################
    
    ; _Encrypt_Data .... : Encrypts Data
    ; $ENCRYPT_DATA......: The data to encrypt
    ; $ENCRYPT_PW........: The Password
    ; $ENCRYPT_ALGO......: (Optional) The Algorhytm
    ;
    ; Return.............: Returns Binary
    Func _Encrypt_Data($ENCRYPT_DATA, $ENCRYPT_PW, $ENCRYPT_ALGO = $CALG_AES_256)
        _Crypt_Startup()
        $ENCRYPT_DERIVE = _Crypt_DeriveKey($ENCRYPT_PW, $ENCRYPT_ALGO)
        $ENCRYPT = _Crypt_EncryptData($ENCRYPT_DATA, $ENCRYPT_DERIVE, $CALG_USERKEY)
        _Crypt_DestroyKey($ENCRYPT_DERIVE)
        _Crypt_Shutdown()
        Return $ENCRYPT
    EndFunc
    
    ; _Decrypt_Data .... : Decrypts Data
    ; $DECRYPT_DATA......: The data do decrypt
    ; $DECRYPT_PW........: The Password
    ; $DECRYPT_ALGO......: (Optional) The algorhytm
    ;
    ; RETURN.............: Returns a STRING
    Func _Decrypt_Data($DECRYPT_DATA, $DECRYPT_PW, $DECRYPT_ALGO = $CALG_AES_256)
        _Crypt_Startup()
        $DECRYPT_DERIVE = _Crypt_DeriveKey($DECRYPT_PW, $DECRYPT_ALGO)
        $DECRYPT = BinaryToString(_Crypt_DecryptData($DECRYPT_DATA, $DECRYPT_DERIVE, $CALG_USERKEY))
        _Crypt_DestroyKey($DECRYPT_DERIVE)
        _Crypt_Shutdown()
        Return $DECRYPT
    EndFunc
    Alles anzeigen
  • Lesen der Manifest durch Autoit bei Autoit PE

    • Candyland
    • 20. November 2017 um 16:43

    Hallo,

    Ich erfragte vor einiger zeit schon wie ich wohl an ein Manifest Update herangehen sollte, das thema blieb unbeantwortet da ich mich unprofessionel verhielt und wenig selbst dazu beifügte wie ich das ganze angehen würde. Ehe ich diesen Thread erneut hervorhole und/oder darauf hingewiesern werde möchte ich sagen das ich gut dabei bin herauszufinden wie ich das ganze anzustellen habe und dem leser auch ersparen möchte was ich für eine unprofessionelle frage dort präsentierte.

    Zum thema.

    Ich versuche, einfach weil ich freizeit habe, herauszufinden wie ich per Autoit die manifest von Autoit Exen verändere und bin dabei auch schon weit gekommen (hat mich nur 2h lehrreiche sucherei Und probierei eingebracht). Ich habe es geschafft bisher von einer exe die icons zu löschen und bin dann bei einer Do schleife auf ein hindernis gestoßen bei dem ich weiß das autoit vorher die manifest als solches lesen muss.

    Genauer: Ich nutze _

    AutoIt
    Local $nCount = 0
    Do
        $nCount += 1
         $UpdateResource = _WinAPI_UpdateResource($h_BeginnUpdate, $RT_ICON, $nCount, $nMakeLangID, 0, 0)
    Until $UpdateResource = 0 ;lese vorher wieviele icons es gibt

    und sobald die WinApi_UpdateRe.. function eine 0 returned soll die schleife beendet werden da autoit ja nicht weiß wieviele icons es gibt. Das problem ist das sobald auch nur eine 0 auftaucht, kann _WinAPI_EndUpdateResource nicht mehr ausgeführt werden. Also sollten z.b. 12 icons existieren und ich lasse Until $nCount = 12 laufen dann funktioniert das script tadelos sollte ich allerdings Until $nCount = 13 laufen lassen returned _EndUpda.. .daraufhin eine 0 was bedeutet das ich autoit vorher herausfinden lassen muss wieviele icons es gibt.

    Daraufhin begab ich mich erneut auf die suche und versuchte vergeblich herauszufinden wie ich autoit die manifest lesen lassen kann.

    Ich fand natürlich auf MSDN "GetManifestResourceStream"

    https://msdn.microsoft.com/en-us/library/…#code-snippet-1

    Weiß aber nicht wie ich damit arbeiten soll, ich denke das hat etwas mit DLLCALL zutun, bin aber mit DLL's so überhaupt nicht vertraut.

    Daher die frage, wie lasse ich autoit die Manifest lesen, das würde mir auch helfen den "language identifier" herauszufinden den ich bisher nur per ResHacker auslesen konnte.

    Das Script.

    AutoIt
    #include <APIResConstants.au3>
    #include <MsgBoxConstants.au3>
    #include <WinAPIRes.au3>
    #include <array.au3>
    
    Local $fPE = @ScriptDir & '\MyProg.exe', $fPEedit = @ScriptDir & "\TestIconRemove.exe"
    FileCopy($fPE, $fPEedit, 1+8)
    
    _UpdateResource_IconDelete_AutoitCompat($fPEedit)
    
    
    Func _UpdateResource_IconDelete_AutoitCompat($fPEexe)
        Local $nMakeLangID = 2057 ;laut ResHACK die sprache der Icon Group's, auch bei, durch den autoit compiler, umgestellte sprache
        Local $arIconGroupNames[0]
        _ArrayAdd($arIconGroupNames, 99)
        _ArrayAdd($arIconGroupNames, 162)
        _ArrayAdd($arIconGroupNames, 164)
        _ArrayAdd($arIconGroupNames, 169)
    
        Local $h_BeginnUpdate = _WinAPI_BeginUpdateResource($fPEexe, False)
        For $i = 0 To UBound($arIconGroupNames) -1 Step 1
            $UpdateResource = _WinAPI_UpdateResource($h_BeginnUpdate, $RT_GROUP_ICON, $arIconGroupNames[$i], $nMakeLangID, 0, 0)
            ;ConsoleWrite($UpdateResource & @CRLF)
        Next
        Local $nCount = 0
        Do
            $nCount += 1
            $UpdateResource = _WinAPI_UpdateResource($h_BeginnUpdate, $RT_ICON, $nCount, $nMakeLangID, 0, 0)
    
        Until $UpdateResource = 0 ;lese vorher wieviele icons es gibt
        $EndUpdateResource = _WinAPI_EndUpdateResource($h_BeginnUpdate, False)
        ConsoleWrite($EndUpdateResource & @CRLF)
    EndFunc
    Alles anzeigen
  • Live Radio in HTML einfügen

    • Candyland
    • 30. Oktober 2017 um 14:21

    Ups, ich musste es nur auf einen Apache laden & dort ausführen. hehe mein fehler also das hier ist gelöst :)

  • Live Radio in HTML einfügen

    • Candyland
    • 30. Oktober 2017 um 14:10

    Hallo du leser!

    gleich mal vorweg ich bin ein neuling bei HTML & wurde gefragt ein popup fenster zu kreieren das einen Radio Player von Muses.org enthält. Soweit so gut dachte ich mir schauste mal wie man ein Popup macht & hab auch was gescheites gefunden & will jetzt das er ein Html von einem anderem server im Popup öffnet. So diese html kreiere ich jetzt & stoße dabei auf ein problem. eines wo ich nicht genau weiß wie ich das java script implementieren soll. So ein hello world habe ich probiert, das funktionierte auch, nur eben der Radio Player will nicht geladen werden.

    Ich habe hier den Code geschrieben um ersteinmal herumzuprobieren wie ich den Player einfüge bevor ich das Sonderzeichen im title angehe.

    HTML
    <!DOCTYPE html>
    <html>
    <head>
        <!-- <meta http-equiv="Content-type" content="text/html; charset-utf-8"> -->
        <title>Flämingwelle Radio Hören!</title>
        <style type="text/css">
            body {
                margin: 20px;
                background-color: #222;
            }
        </style>
        <!-- </meta> -->
    </head>
    <body>
        
        <!-- BEGINS: AUTO-GENERATED MUSES RADIO PLAYER CODE -->
        <script type="text/javascript" src="https://hosted.muses.org/mrp.js"></script>
        <script type="text/javascript">
        MRP.insert({
        'url':'http://streamplus54.leonex.de:11772/;',
        'lang':'de',
        'codec':'mp3',
        'volume':80,
        'autoplay':true,
        'forceHTML5':true,
        'jsevents':true,
        'buffering':0,
        'title':'Flämingwelle',
        'wmode':'transparent',
        'skin':'easyplay',
        'width':231,
        'height':30
        });
        </script>
        <!-- ENDS: AUTO-GENERATED MUSES RADIO PLAYER CODE -->
    </body>
    </html>
    Alles anzeigen

    Kann mir jemand zeigen wo mein fehler liegt? Die videos von youtube zur implementierung von javascript haben mir hierbei nicht weiter geholfen.

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™