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

  • Skript für "erweiterte" Hilfe in SciTE

    • Bitnugger
    • 28. November 2021 um 21:55
    Zitat von water

    Wurden die Funktionen einer UDF mit dem selben Präfix auf mehrere Dateien aufgeteilt, so müssen diesese durch

    Hier noch einer...

  • SciTE mit Session aufrufen

    • Bitnugger
    • 23. November 2021 um 22:34
    Zitat von HansJ54

    Allerdings müssen die \ im Pfad gedoppelt werden - so wie es im alten Thread stand.

    Kommt ganz darauf an, in welchem Kontext du dich befindest... in einer CMD.exe oder für Run(...) ist es z.B. nicht nötig.

    Aufgefallen ist mir jedoch, dass es mit meiner RAMDISK nicht immer funktioniert:

    AutoIt
    ;-- TIME_STAMP   2021-11-23 22:32:01   v 0.1
    
    ; m: ist eine RAMDISK (ImDisk)
    ; f: ist eine interne Festplatte mit Daten
    Local $sCMD = '"c:\Program Files (x86)\AutoIt3\SciTE\SciTE.exe" "-loadsession:m:\SciTE_2.session"'
    ;~ Local $iPID = Run($sCMD, @UserProfileDir, @SW_HIDE)      ; Funktioniert!
    ;~ Local $iPID = Run($sCMD, @LocalAppDataDir, @SW_HIDE)     ; Funktioniert!
    ;~ Local $iPID = Run($sCMD, 'm:\', @SW_HIDE)                ; Funktioniert!
    ;~ Local $iPID = Run($sCMD, 'f:\Eigene Dateien\', @SW_HIDE) ; Funktioniert!
    ;~ DirCreate('f:\Test')
    ;~ Local $iPID = Run($sCMD, 'f:\Test\', @SW_HIDE)           ; Funktioniert!
    
    ;~ Local $iPID = Run($sCMD, '', @SW_HIDE)              ; Funktioniert nicht!
    ;~ Local $iPID = Run($sCMD, 'm:', @SW_HIDE)            ; Funktioniert nicht!
    ;~ Local $iPID = Run($sCMD, 'm:\Temp\', @SW_HIDE)      ; Funktioniert nicht!
    ;~ Local $iPID = Run($sCMD, @WorkingDir, @SW_HIDE)     ; Funktioniert nicht!
    DirCreate('m:\Test')
    Local $iPID = Run($sCMD, 'm:\Test\', @SW_HIDE)         ; Funktioniert nicht!
    
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : @WorkingDir      = ' & @WorkingDir & @CRLF)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $iPID = ' & $iPID & '  $sCMD = ' & $sCMD & @CRLF)
    Alles anzeigen

    @@ Debug(20) : @WorkingDir = M:\AutoIt 

    @@ Debug(21) : $iPID = 18952 $sCMD = "c:\Program Files (x86)\AutoIt3\SciTE\SciTE.exe" "-loadsession:m:\SciTE_2.session"

  • Irgendwas stimmt mit der Ausführungsgeschwindigkeit nicht...

    • Bitnugger
    • 23. November 2021 um 19:35

    So sieht es bei mir aus:

    Benchmark Result Zeilen 82/84 auskommentiert

    _01 12364ns +32.1% ->| int32 bitand & bitshift

    _02 10781ns +15.2% ->| int32 bitand & bitshift (array als int)

    _2A 10293ns +10.0% ->| int32 bitand & bitshift (ternärer operator umgestellt, array als int)

    _2B 9357ns +0.0% ->| int32 bitshift & bitand (array als int)

    _2C 10195ns +9.0% ->| int32 bitshift & bitand (array als int)

    _2D 9586ns +2.4% ->| int32 bitshift & bitand (array als int)

    _03 14952ns +59.8% ->| int32 stringoperationen (array als int)

    _04 11800ns +26.1% ->| int32 stringoperation für Alpha, rest bitoperationen (array als int)

    _05 11331ns +21.1% ->| int32 struct (byte[4] access index, array als int)

    _5A 13092ns +39.9% ->| int32 struct (byte;byte;byte;byte access element, array als int)

    _5B 10924ns +16.7% ->| int32 struct (byte[4] access index via name, array als int)

    Benchmark Result Zeilen 82/84 nicht auskommentiert

    _01 12184ns +30.6% ->| int32 bitand & bitshift

    _02 10858ns +16.4% ->| int32 bitand & bitshift (array als int)

    _2A 10207ns +9.4% ->| int32 bitand & bitshift (ternärer operator umgestellt, array als int)

    _2B 9602ns +2.9% ->| int32 bitshift & bitand (array als int)

    _2C 9332ns +0.0% ->| int32 bitshift & bitand (array als int)

    _2D 10208ns +9.4% ->| int32 bitshift & bitand (array als int)

    _03 15597ns +67.1% ->| int32 stringoperationen (array als int)

    _04 11523ns +23.5% ->| int32 stringoperation für Alpha, rest bitoperationen (array als int)

    _05 11763ns +26.1% ->| int32 struct (byte[4] access index, array als int)

    _5A 12719ns +36.3% ->| int32 struct (byte;byte;byte;byte access element, array als int)

    _5B 11102ns +19.0% ->| int32 struct (byte[4] access index via name, array als int)

  • SciTE mit Session aufrufen

    • Bitnugger
    • 23. November 2021 um 19:14

    So muss das aussehen:

    "c:\Program Files (x86)\AutoIt3\SciTE\SciTE.exe" -loadsession:C:\WebDriver\Entwicklung\BLPMenü.session

    " sind nur nötig, wenn der Pfad Leerzeichen beinhaltet. Sind im Pfad zur Session Leerzeichen enthalten, muss er mitsamt -loadsession: in " gesetzt werden - und muss direkt hinter (also ohne Leerzeichen!) -loadsession: stehen.

    Bsp.:

    "c:\Program Files (x86)\AutoIt3\SciTE\SciTE.exe" "-loadsession:C:\Web Driver\Entwicklung\BLPMenü.session"

  • SciTE - Array: Indexwerte automatisch setzen & statische Zuweisungen erstellen

    • Bitnugger
    • 23. November 2021 um 16:54

    Zeige bitte mal wie/wo man eine Tastenkombination zuweisen muss.

  • Verzeichnisse auslesen kombinieren und in txt speichern

    • Bitnugger
    • 14. November 2021 um 05:17

    Teste mal:

    AutoIt
    ;~ #include <MsgBoxConstants.au3>
    ;~ #include <Array.au3>
    #include <File.au3>
    #include <WinAPIConv.au3>
    
    Global $g_iOutEncoding = Int(StringRegExpReplace(ControlGetText(ControlGetHandle(WinGetHandle(@ScriptFullPath), '', '[CLASS:msctls_statusbar32; INSTANCE:1]'), '', ''), '.+Encoding \(IN/OUT\): (\d+)/(\d+).+', '\2'))
    
    Liste()
    
    Func Liste()
        Local $path1 = "G:\Videos\Filme\Neu"
        Local $path2 = "G:\Videos\Filme\Gesehen"
        Local $path3 = "G:\Videos\Filme" & "\Liste.txt"
        
        Local $aFileListNeu = _FileListToArray($path1, "*", $FLTA_FILES)
        Local $aFileListGesehen = _FileListToArray($path2, "*", $FLTA_FILES)
    
        _ArrayConcatenate($aFileListNeu, $aFileListGesehen, 1) ; Counter von $aFileListGesehen nicht mit kopieren
        _ArrayDelete($aFileListNeu, 0) ; Counter von $aFileListNeu löschen
        _ArraySort($aFileListNeu)
        For $i = 0 To UBound($aFileListNeu) -1 Step 1
            $aFileListNeu[$i] = _WinAPI_WideCharToMultiByte(StringRegExpReplace($aFileListNeu[$i], '(.+)\..*$', '\1'), @Compiled ? 1 : $g_iOutEncoding, True, False) ; Extension entfernen und Umlaute korrigieren
        Next
        _FileWriteFromArray($path3, $aFileListNeu, 0) ; Von 0 an, weil wir ja alle Counter entfernt haben!
        _ArrayDisplay($aFileListNeu, "Filmübersicht")
    EndFunc
    Alles anzeigen
  • Kontextmenü auslesen

    • Bitnugger
    • 13. November 2021 um 22:26
    AutoIt: _GUICtrlMenu_GetContextMenu_Example.au3
    ;-- TIME_STAMP   2021-11-13 22:20:09   
    
    ;~ #include <AutoItConstants.au3>
    #include <WindowsConstants.au3>
    ;~ #include <Array.au3>
    #include <GuiMenu.au3>
    #include <Process.au3>
    #include <SendMessage.au3>
    #include <WinAPISysWin.au3>
    
    
    _GUICtrlMenu_GetContextMenu_Example()
    
    Func _GUICtrlMenu_GetContextMenu_Example()
        Local $hDesktop = _WinAPI_GetDesktopWindow()
    
        Local $hWnd, $hPopUp, $hActive, $hParent, $hRoot, $hRootOwner, $sMenuText
        $hActive = WinGetHandle('[ACTIVE]')
        ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $hActive    --> " & $hActive & @CRLF & @CRLF & 'Open a popup menu...' & @CRLF & @CRLF)
        Do
            Sleep(250)
            $hWnd = WinGetHandle('[CLASS:#32768]')
        Until $hWnd
        $hParent = _WinAPI_GetAncestor($hWnd, $GA_PARENT)
        $hRoot = _WinAPI_GetAncestor($hWnd, $GA_ROOT)
        $hRootOwner = _WinAPI_GetAncestor($hWnd, $GA_ROOTOWNER)
        Local $iPID = WinGetProcess($hWnd)
        $sProcessName = _ProcessGetName($iPID)
        ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $iPID         --> " & $iPID & @CRLF)
        ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $sProcessName --> " & $sProcessName & @CRLF)
        ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $hWnd         --> " & $hWnd & @TAB & 'Title = "' & WinGetTitle($hWnd) & '"' & @CRLF)
        ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $hParent      --> " & $hParent & @TAB & 'Title = "' & WinGetTitle($hParent) & '"' & @CRLF)
        ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $hRoot        --> " & $hRoot & @TAB & 'Title = "' & WinGetTitle($hRoot) & '"' & @CRLF)
        ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $hRootOwner   --> " & $hRootOwner & @TAB & 'Title = "' & WinGetTitle($hRootOwner) & '"' & @CRLF)
    
        $hPopUp = _SendMessage($hWnd, $MN_GETHMENU)
        ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $hPopUp       --> " & $hPopUp & @CRLF)
    
        Local $sItemText, $aSplit, $aRect, $iItemCount = _GUICtrlMenu_GetItemCount($hPopUp), $hSub, $iSubItemCount, $sSubItemText, $iIndent = 16
        ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $iItemCount   --> " & $iItemCount & @CRLF)
        For $iItem = 0 To $iItemCount - 1 Step 1
            $sItemText = _GUICtrlMenu_GetItemText($hPopUp, $iItem)
            If $sItemText = '' Then $sItemText = '--------------------------------' ; Separator line
            $aSplit = StringSplit($sItemText & @TAB, @TAB, $STR_NOCOUNT)
            $aRect = _GUICtrlMenu_GetItemRect($hDesktop, $hPopUp, $iItem); Mit $hPopUp funktioniert es!
            ConsoleWrite(StringFormat('> $sItemText #%02i: %-48s %s $aRect[%5i,%5i,%5i,%5i]\n', $iItem, $aSplit[0], $aSplit[1], $aRect[0], $aRect[1], $aRect[2], $aRect[3]))
    
            $hSub = _GUICtrlMenu_GetItemSubMenu($hPopUp, $iItem)
            If $hSub Then
                $iSubItemCount = _GUICtrlMenu_GetItemCount($hSub)
                ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $hSub         --> " & $hSub & @CRLF)
                For $iSubItem = 0 To $iSubItemCount - 1 Step 1
                    $sSubItemText = _GUICtrlMenu_GetItemText($hSub, $iSubItem)
                    $aSplit = StringSplit($sSubItemText & @TAB, @TAB, $STR_NOCOUNT)
                    $aRect = _GUICtrlMenu_GetItemRect($hDesktop, $hSub, $iSubItem) ; Mit $hSub funktioniert es nicht!
                    ConsoleWrite(StringFormat('+ %'&$iIndent&'s$sSubItemText #%02i: %-48s %s $aRect[%5i,%5i,%5i,%5i]\n', '', $iSubItem, $aSplit[0], $aSplit[1], $aRect[0], $aRect[1], $aRect[2], $aRect[3]))
                Next
            EndIf
        Next
    EndFunc   ;==>_GUICtrlMenu_GetContextMenu_Example
    Alles anzeigen

    _GUICtrlMenu_GetContextMenu_Example.png

  • Kontextmenü auslesen

    • Bitnugger
    • 11. November 2021 um 18:32

    Schau mal, ob dir das hier weiterhilft:

    Das Ermitteln des Handles für $hWnd, $hMain, $hDatei und die Keys bei ControlSend musst du natürlich entsprechend anpassen!

    AutoIt
    ;-- TIME_STAMP   2021-11-10 21:53:36   v 0.1
    
    #include <AutoItConstants.au3>
    #include <GuiMenu.au3>
    
    Opt('SendKeyDelay', 10) ; Mit ControlSend kommt der Text oft fehlerhaft an, wenn KeyDelay auf 5 (Default) steht! Bei mir funktioniert es mit 10 sehr gut.
    ;~ Opt('SendKeyDownDelay', 20)
    Example_GUICtrlMenu_GetMenu()
    Opt('SendKeyDelay', 5)
    ;~ Opt('SendKeyDownDelay', 5)
    
    Func Example_GUICtrlMenu_GetMenu()
        Local $hWnd, $hMain, $hDatei
    
        ; Open Notepad
        Local $iPID = Run("notepad.exe")
        WinWaitActive("[CLASS:Notepad]")
        $hWnd = WinGetHandle("[CLASS:Notepad]")
        $hMain = _GUICtrlMenu_GetMenu($hWnd)
    
        Local $hDatei = _GUICtrlMenu_GetItemSubMenu($hMain, 0) ; Handle für das Menu "Datei"
        Writeln("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $hDatei      --> " & $hDatei & @LF)
        Local $sItemText, $aSplit, $iItemCount = _GUICtrlMenu_GetItemCount($hDatei)
        For $iItem = 0 To $iItemCount - 1 Step 1
            $sItemText = _GUICtrlMenu_GetItemText($hDatei, $iItem)
            If $sItemText = '' Then $sItemText = '--------------------------------' ; Separator line
            $aSplit = StringSplit($sItemText & @TAB, @TAB, $STR_NOCOUNT)
            Writeln(StringFormat('> $sItemText #%02i: %-32s %s\n', $iItem, $aSplit[0], $aSplit[1]))
        Next
        Writeln(@CRLF)
    
        ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        ; Namen der SubMenues, deren AcceleratorKeys und den dazu passenden ControlSend ausgeben.
        Local $sMenuText, $iMenuCount = _GUICtrlMenu_GetItemCount($hMain), $iKeyPos, $sAccelatorKey, $sSend
        Writeln("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $iMenuCount --> " & $iMenuCount & @LF)
        For $iMenu = 0 To $iMenuCount - 1 Step 1 ; Datei | Bearbeiten | Format | Ansicht | Hilfe
            $sMenuText = _GUICtrlMenu_GetItemText($hMain, $iMenu)
            $iKeyPos = StringInStr(StringReplace($sMenuText, '&&', '##'), '&') + 1
            $sAccelatorKey = $iKeyPos ? StringMid($sMenuText, $iKeyPos, 1) : '' ; Das ist das Zeichen hinter dem "&" - falls vorhanden!
            $sSend = $sAccelatorKey ? "ControlSend($hWnd, '', '', '" & '!' & $sAccelatorKey & "', $SEND_DEFAULT)" : ''
            Writeln(StringFormat('> $sMenuText #%02i: %-32s Alt+%-32s %s\n', $iMenu, $sMenuText, $sAccelatorKey, $sSend))
        Next
        Writeln(@CRLF)
    
        ; Get/Set File menu help context ID
        Writeln("> File (Datei) help context ID: " & _GUICtrlMenu_GetMenuContextHelpID($hDatei) & '\n')
        _GUICtrlMenu_SetMenuContextHelpID($hDatei, 1234)
        Writeln("> File (Datei) help context ID: " & _GUICtrlMenu_GetMenuContextHelpID($hDatei) & '\n')
    
        ; Möchten Sie die Änderungen an Unbekannt speichern?
        ; Wenn kein HotKey vorhanden ist.
    ;~     ControlSend($hWnd, "", "", StringFormat('!du{Enter}'), $SEND_DEFAULT) ; Send AcceleratorKey (Alt+du{Enter}) "Dateimenu öffnen"
        ; Wenn ein HotKey vorhanden ist.
        ControlSend($hWnd, "", "", StringFormat('^+s{Enter}'), $SEND_DEFAULT) ; Send HotKey (Strg+Shift+s{Enter}) "Dateimenu öffnen"
    
        MsgBox(64 + 262144, @ScriptName, 'Press Ok for Exit')
        ProcessClose($iPID)
    EndFunc   ;==>Example_GUICtrlMenu_GetMenu
    
    ; Write a line of text to Notepad
    Func Writeln($sText)
        ControlSend("[CLASS:Notepad]", "", "Edit1", StringFormat($sText), $SEND_RAW)
    EndFunc   ;==>Writeln
    Alles anzeigen
  • Suche Software zum Editieren von PDF-Dokumenten

    • Bitnugger
    • 10. November 2021 um 18:58
    Zitat von Musashi

    Nach längerem Suchen habe ich, sehr versteckt, die Option gefunden, das Formular im Browser zu editieren.

    Ja, klasse... das ist doch mal eine feine Lösung, oder?! ;)

  • LPT1 ade - suche Ersatz (erledigt)

    • Bitnugger
    • 8. November 2021 um 21:30
    Zitat von Alina

    Auf was könnte man da ausweichen und wo finde ich Information über die Pinbelegung?

    Als Alternative fällt mir dies ein:

    Ethernet relay

    USB relay

    WIFI relay

    Die Dinger haben programmierbare Ein- und Ausgänge (Relays)... habe selbst zwei ETH484 - 4 x 16A ethernet relays (bei amazon.de gekauft) und kenne mich recht gut damit aus.

    Habe mir dafür ein AutoIt-Script zum Steuern/Abfragen (via TCP/IP) geschrieben. Für USB und WIFI will ich mir auch noch holen... evtl. bringt mir das ja der Weihnachtsmann. ;)

    Pinbelegung für LPT findest du z.B. hier: https://de.wikipedia.org/wiki/IEEE_1284

  • Alternative zu "Sleep"

    • Bitnugger
    • 8. November 2021 um 20:46
    Zitat von smu

    Wird das aufpoppende WhatsApp-Fenster letztendlich aus Zeile 3 oder Zeile 4 heraus gestartet?

    Das ConsoleWrite von BananaJoe ist auf jeden Fall schon mal eine gute Idee...

    Damit bekommst du aber keine Info darüber, wem das Fenster gehört oder von wem der Proccess gestart wurde ... dafür muss man schon etwas mehr tun.

    Hier mal ein kleines Bsp., wie ich mir solche Infos anzeigen lasse, wenn ich ein neues Script schreibe:

    AutoIt
    ;-- TIME_STAMP   2021-11-08 20:33:14
    
    ; Nur nötig, wenn du Infos über fremde Processe haben willst (s. _GetProcessUser). Achtung: Hinter #RequireAdmin darf kein Kommentar stehen!!!
    ;~ #RequireAdmin
    
    #include <Array.au3>
    #include <WinAPIHObj.au3>
    #include <WinAPIProc.au3>
    
    _GetProcInfo_Example()
    
    Func _GetProcInfo_Example()
        Local $sNewFile = @ScriptDir & '\NeueTextdatei.txt'
        If Not FileExists($sNewFile) Then FileWrite($sNewFile, 'Testdatei, die mit Notepad geöffnet werden soll...')
        Local $iPID = Run('notepad.exe' & ' ' & $sNewFile)
        _PrintVar('$iPID', $iPID)
        Local $sProcessFileName = _WinAPI_GetProcessFileName($iPID)
        _PrintVar('$sProcessFileName', $sProcessFileName)
        Local $sCommandLine = _WinAPI_GetProcessCommandLine($iPID)
        _PrintVar('$sCommandLine', $sCommandLine)
    
        Local $aProcessUser = _GetProcessUser($iPID)
        _PrintVar('$aProcessUser', _ArrayToString($aProcessUser, '|', -1, -1, @CRLF & '>' & @TAB & @TAB))
    
        ; ProcessWindows anzeigen
        Local $bVisible = True, $aProcessWindows = _WinAPI_EnumProcessWindows($iPID, $bVisible) ; Handle|ClassName, ...
        ReDim $aProcessWindows[$aProcessWindows[0][0] + 1][3] ; Spalte für Title hinzufügen
        For $i = 1 To $aProcessWindows[0][0] Step 1
            $aProcessWindows[$i][2] = WinGetTitle($aProcessWindows[$i][0])
        Next
        _PrintVar('$aProcessWindows', _ArrayToString($aProcessWindows, '|', -1, -1, @CRLF & StringFormat('>%'&StringLen(@ScriptLineNumber) + 14&'s', ''))) ; Handle|ClassName|Title
    
        ConsoleWrite(@CRLF)
        ; Von welchem Proccess wurde Notepad gestartet?
        Local $iParentPID = _WinAPI_GetParentProcess($iPID)
        _PrintVar('$iParentPID', $iParentPID)
        Local $sParentProcessFileName = _WinAPI_GetProcessFileName($iParentPID)
        _PrintVar('$sParentProcessFileName', $sParentProcessFileName)
        Local $sParentCommandLine = _WinAPI_GetProcessCommandLine($iParentPID)
        _PrintVar('$sParentCommandLine', $sParentCommandLine)
    
        ConsoleWrite(@CRLF)
        ; Hier noch eine Ausgabe mit _PrintVar, bei der ein Fehler aufgetreten ist.
        Local $sShowExecuteError = Execute('#Alexa, go get some beer!')
        _PrintVar('$sShowExecuteError', $sShowExecuteError)
    
        ; @@ Debug(45) :      $sShowExecuteError               ==>>
        ; Wenn du einen Doppelklick auf so ^^ eine Zeile in dem Ausgabefenster machst, setzt SciTE das Caret in diese Zeile... hier wäre es die Zeile 45!!!
    
        ; Aufräumen
        MsgBox(64, @ScriptName, 'Klick auf OK, um Notepad zu beenden und die Textdatei wieder zu löschen.')
        ProcessClose($iPID)
        FileDelete($sNewFile)
    EndFunc   ;==>_GetProcInfo_Example
    
    Func _GetProcessUser($iPID)
        If IsAdmin() Then
            ; Enable "SeDebugPrivilege" privilege for obtain full access rights to another processes
            Local $aAdjust, $hToken = _WinAPI_OpenProcessToken(BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY))
            _WinAPI_AdjustTokenPrivileges($hToken, $SE_DEBUG_NAME, $SE_PRIVILEGE_ENABLED, $aAdjust)
        EndIf
    
        ; Retrieve the user (account) name, domain (computer) name for the specified process
        Local $aProcessUser = _WinAPI_GetProcessUser($iPID)
    
        If IsAdmin() Then
            ; Enable SeDebugPrivilege privilege by default
            _WinAPI_AdjustTokenPrivileges($hToken, $aAdjust, 0, $aAdjust)
            _WinAPI_CloseHandle($hToken)
        EndIf
    
        Return $aProcessUser
    EndFunc   ;==>_GetProcessUser
    
    Func _PrintVar($sVarName, $sValue, $iScriptLineNumber = @ScriptLineNumber, $iError = @error, $iExtended = @extended)
        If $iError Or $iExtended Then
    ;~         ConsoleWrite(StringFormat('@@ Debug(%i) : \t %-32s ==>> %s\n!  $iError = %i \t $iExtended = %i\n', $iScriptLineNumber, $sVarName, $sValue, $iError, $iExtended))
            ConsoleWrite(StringFormat('@@ Debug(%i) : \t %-32s ==>> %s\n-%' & StringLen($iScriptLineNumber) + 14&'s$iError = %i \t $iExtended = %i\n', $iScriptLineNumber, $sVarName, $sValue, '', $iError, $iExtended))
        Else
            ConsoleWrite(StringFormat('@@ Debug(%i) : \t %-32s ==>> %s\n', $iScriptLineNumber, $sVarName, $sValue))
        EndIf
    EndFunc   ;==>_PrintVar
    Alles anzeigen
  • Programm fernsteuern

    • Bitnugger
    • 6. November 2021 um 23:21

    So, hier noch ein Bsp. - mehr kann ich momentan nicht für dich tun...

    AutoIt
    ;-- TIME_STAMP   2021-11-07 00:20:21   v 0.1
    
    #include <AutoItConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiMenu.au3>
    
    _Example()
    
    ; Das Setzen des Fokus mit ControlFocus() ist nur nötig, wenn bei ControlSend kein Control-Handle, sondern eine Control-ID angegeben wird.
    Func _Example()
        Local $hActive = WinGetHandle('[ACTIVE]'), $hFocus = ControlGetHandle($hActive, '', '[CLASSNN:' & ControlGetFocus($hActive) & ']')
        ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $hActive    --> " & $hActive & @LF) ; SciTE
        ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $hFocus     --> " & $hFocus & @LF) ; Source-Pane
    
        Local $iPID = ProcessExists('notepad.exe')
        If Not $iPID Then $iPID = Run('notepad.exe')
        ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $iPID       --> " & $iPID & @LF)
    
        Local $hNotepad = WinWait('[REGEXPTITLE:.*Editor;CLASS:Notepad]', '', 3)
        ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $hNotepad   --> " & $hNotepad & @LF)
    
        If Not IsHWnd($hNotepad) Then Return SetError(1, 0, False)
    
        WinActivate($hNotepad)
        Local $hMainMenu = _GUICtrlMenu_GetMenu($hNotepad)
        ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $hMainMenu  --> " & $hMainMenu & @LF)
    
        ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        ; Alle Items eines SubMenues anhand des Index ausgeben - hier nehmen wir auch wieder das Menu "Datei", das hat den Index 0.
        ; Hier werden in der letzten Spalte evtl. HotKeys angezeigt, die mit der Aktion (Funktion) des MenuItems verknüpft sind. Via HotKey kannst du diese Aktion ausführen, ohne das Menu anzeigen zu lassen.
        ;
        ; Bsp.: > $sItemText #01: &Neues Fenster                   Strg+Umschalt+N
    ;~     ControlSend($hNotepad, '', '', '^+N', $SEND_DEFAULT) ; Send "Strg+Umschalt+N" - Neues Notepad-Fenster öffnen
        ;
        ; Gäbe es für dieses MenuItem kein Hotkey, ginge es so:
    ;~     ControlSend($hNotepad, '', '', '!D', $SEND_DEFAULT) ; Menü "Datei" anzeigen (Alt+D)
    ;~     Sleep(1000) ; Warten, bis Menu geöffnet wurde.
    ;~     ControlSend($hNotepad, '', '', '+N{Enter}', $SEND_DEFAULT) ; Send "Umschalt+N+Enter" - Neues Notepad-Fenster öffnen
        Local $hFile = _GUICtrlMenu_GetItemSubMenu($hMainMenu, 0) ; Handle für das Menu "Datei"
        ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $hFile      --> " & $hFile & @LF)
        Local $sItemText, $aSplit, $iItemCount = _GUICtrlMenu_GetItemCount($hFile)
        For $iItem = 0 To $iItemCount -1 Step 1
            $sItemText = _GUICtrlMenu_GetItemText($hFile, $iItem)
            If $sItemText = '' Then $sItemText = '--------------------------------' ; Separator line
            $aSplit = StringSplit($sItemText & @TAB, @TAB, $STR_NOCOUNT)
            ConsoleWrite(StringFormat('> $sItemText #%02i: %-32s %s\n', $iItem, $aSplit[0], $aSplit[1]))
        Next
        ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        ConsoleWrite(@CRLF)
    
        ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        ; Namen der SubMenues, deren AcceleratorKeys und den dazu passenden ControlSend ausgeben.
        Local $sMenuText, $iMenuCount = _GUICtrlMenu_GetItemCount($hMainMenu), $iKeyPos, $sAccelatorKey, $sSend
        ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $iMenuCount --> " & $iMenuCount & @LF)
        For $iMenu = 0 To $iMenuCount -1 Step 1 ; Datei | Bearbeiten | Format | Ansicht | Hilfe
            $sMenuText = _GUICtrlMenu_GetItemText($hMainMenu, $iMenu)
            $iKeyPos = StringInStr(StringReplace($sMenuText , '&&', '##'), '&') +1
            $sAccelatorKey = $iKeyPos ? StringMid($sMenuText, $iKeyPos, 1) : '' ; Das ist das Zeichen hinter dem "&" - falls vorhanden!
            $sSend = $sAccelatorKey ? "ControlSend($hNotepad, '', '', '" & '!' & $sAccelatorKey & "', $SEND_DEFAULT)" : ''
            ConsoleWrite(StringFormat('> $sMenuText #%02i: %-32s Alt+%-32s %s\n', $iMenu, $sMenuText, $sAccelatorKey, $sSend))
        Next
        ; Hier ein Bsp.:
        ControlSend($hNotepad, '', '', '!D', $SEND_DEFAULT) ; Menü "Datei" anzeigen (Alt+D)
        Sleep(2000) ; ...und 2 sec warten.
        ControlSend($hNotepad, '', '', '{ESC 2}', $SEND_DEFAULT) ; Menü "Datei" wieder verstecken (ESC+ESC)
        ; Durch das ControlSend (an Notepad!) wird (nicht immer) nach Beenden des Scripts auch in SciTE der Fokus auf das Menü "Datei" gesetzt... das ist definitiv ein Bug!
        ControlFocus($hActive, '', $hFocus) ; Hiermit korrigieren wird diesen Bug - erst ControlFocus, dann WinActivate... andersrum geht es nicht!
        WinActivate($hActive)
        ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
        ConsoleWrite('- Done...' & @CRLF)
    
        ; Aufräumen
        ProcessClose($iPID) ; Das mit Run gestartete Notepad beenden.
    EndFunc   ;==>_Example
    Alles anzeigen

    _GetMenu.png

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.14.5 2021.07.31)

    • Bitnugger
    • 6. November 2021 um 15:26

    Nicht wirklich ein Fehler, aber unschön...

    Bsp.: ControlSend

    Hier werden auf der linken Seite zwei Suchergebnisse angezeigt... was dann ergo bedeutet, dass es für diese Funktion eine deutsche Übersetzung gibt.

    In der Spalte Titel hast du es richtig gemacht... da steht einmal Funktion (deutsch) und Function (englisch)... aber unter der Spalte Position steht bei beiden "AutoIt-Hilfe".

    Korrekt wäre, wenn für die englische Version dann auch der englische Text "AutoIt-Help" stehen würde.

    Dies gilt für alle Übersetzungen in der deutschen Hilfe.

  • Programm fernsteuern

    • Bitnugger
    • 6. November 2021 um 07:11
    Zitat von JBO

    Wenn ich allerdings die Befehle in meinem Programm ausprobiere, dann passiert leider nichts.

    Dein Script aus deinem ersten Post kann so nicht funktionieren... daran ist so ziemlich alles falsch... oder macht keinen Sinn.

    Zitat von JBO

    Es gibt z. B. keine Möglichkeit mit STRG irgendwas zu steuern, ich müsste wissen, wie ich die Alt-Taste abfrage, bzw. ansteuere.

    Für ControlSend schaust du in der Hilfe bei Send... da stehen die Sachen, die du dafür wissen musst.

    ! = Alt-Taste

    + = Shift-Taste

    ^ = Strg bzw. Ctrl-Taste

    # = Windows-Taste

    Wenn ich morgen dazu komme, schreibe ich dir noch ein Bsp. dafür, wie du ein Menü "ausliest" und den zu dem jeweiligen Menüpunkt passenden ControlSend erstellen kannst.

    Zitat von JBO

    Wo ist das Script eigentlich her? Gibts dafür eine ausführliche Dokumentation?

    Das ist von mir... hatte ich extra für dich geschrieben... dafür brauche ich 10-15 Minuten... dein Problem ist, dass dir die nötigen Grundlagen fehlen, um mit AutoIt zu arbeiten und du deshalb gar nicht weißt, wo, wie und was du suchen musst. Sowas kommt nicht über Nacht...

  • Hauptanzeige ändern

    • Bitnugger
    • 4. November 2021 um 23:55

    Übrigens... es gibt auch noch eine andere sehr empfehlenswerte Option... so mache ich es... mit DisplayFusion kannst du endlos viele Einstellungen für Multi-Monitor-Betrieb sehr komfortabel automatisieren - z.B. wo welches Fenster in welcher Größe auf welchem Monitor angezeigt werden soll... und noch 100.000 Sachen mehr. Einziger Nachteil ist, es kostet was... aber das Tool ist jeden Cent wert und für mich mittlerweile quasi unverzichtbar!

  • Programm fernsteuern

    • Bitnugger
    • 4. November 2021 um 20:05

    Hier mal ein kleines Bsp. mit notepad.exe:

    AutoIt: Notepad_Example.au3
    #include <AutoItConstants.au3>
    
    _Example()
    
    Func _Example()
        Local $iPID = ProcessExists('notepad.exe')
        If Not $iPID Then $iPID = Run('notepad.exe')
        ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $iPID      --> " & $iPID & @LF)
    
        Local $hNotepad = WinWait('[REGEXPTITLE:.*Editor;CLASS:Notepad]', '', 3)
        ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $hNotepad  --> " & $hNotepad & @LF)
        If IsHWnd($hNotepad) Then
            WinActivate($hNotepad)
    
            ; Text einfügen
            ControlSend($hNotepad, '', '', 'Mit AutoIt Text in andere Programme einfügen ist ganz einfach...' & @LF, $SEND_RAW)
            ControlSend($hNotepad, '', '', 'aber möglichst mit ControlSend anstelle Send...' & @CRLF, $SEND_RAW)
            ControlSend($hNotepad, '', '', 'Und jetzt speichern wir das in eine Datei.' & @LF, $SEND_RAW)
    
            ControlSend($hNotepad, '', '', '^+s', $SEND_DEFAULT) ; Send STRG+SHIFT+S - Menü "Datei" -->> "Speichern unter..."
            Local $hSaveAs = WinWait('[TITLE:Speichern unter; CLASS:#32770]', '', 3) ; 3 Sekunden auf Fenster warten.
            ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $hSaveAs  --> " & $hSaveAs & @LF)
            Sleep(1000) ; Etwas warten, bis das Fenster komplett aufgebaut ist, da wir sonst evtl. kein Handle für die ToolBar (Pfadname) oder das Edit (Dateiname) bekommen.
    
            Local $hToolBar = ControlGetHandle($hSaveAs, '', '[CLASS:ToolbarWindow32; INSTANCE:4]')
            ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $hToolBar --> " & $hToolBar & @LF)
            ControlSetText($hToolBar, '', '', @ScriptDir) ; Pfad ändern, in dem die Datei gespeichert werden soll.
    
            Local $hEdit = ControlGetHandle($hSaveAs, '', '[CLASS:Edit; INSTANCE:1]')
            ConsoleWrite("@@_Debug_line" & @TAB & @TAB & @ScriptLineNumber & "   var: $hEdit    --> " & $hEdit & @LF)
    
            ControlSetText($hEdit, '', '', 'Test_mit_AutoIt.txt') ; Hier kommt der Dateiname hin.
            Sleep(5000) ; Kleine Pause, damit wir sehen können, ob der Pfad/Name korrekt geändert wurde.
            ControlClick($hSaveAs, '', '[CLASS:Button; INSTANCE:2]') ; Text speichern.
    
            ConsoleWrite('Done...' & @CRLF)
            Sleep(3000)
    
            ; Aufräumen
            If FileExists(@ScriptDir & '\Test_mit_AutoIt.txt') Then FileDelete(@ScriptDir & '\Test_mit_AutoIt.txt') ; Testdatei wieder löschen...
            ProcessClose($iPID) ; Notepad beenden.
        EndIf
    EndFunc   ;==>_Example
    Alles anzeigen
  • Hauptanzeige ändern

    • Bitnugger
    • 1. November 2021 um 20:05
    Zitat von tommii

    Ist es machbar, die Hauptanzeige temporär via autoit zu ändern, danach mein script durchlaufen lassen und am ende wieder die alte hauptanzeige einzustellen?

    Ja, das ist machbar... dazu muss man die Funktion ChangeDisplaySettingsEx via DllCall aufrufen und kann so den primären Monitor ändern. Bevor dein Script beendet wird, dann einfach noch mal die Funktion aufrufen und den primären Monitor wieder zurücksetzen.

    Kann dir bei der Umsetzung aber frühestens am WE weiterhelfen.

  • Problem mit SciTE

    • Bitnugger
    • 27. Oktober 2021 um 13:39
    Zitat von BigRox

    Der Eintrag ist (beim Beispiel von Bitnugger):


    openpath.$(au3)=$(SciteDefaultHome)\..\include;F:\AutoIt\AutoIt3_MyIncludes

    Wenn die Beta installiert ist, sind es zwei Einträge... den sollte man also auch erwähnen:

    openpath.beta.$(au3)=$(SciteDefaultHome)\..\beta\include;f:\AutoIt\AutoIt3_MyInclude

    Zitat von BigRox

    (ich lasse den Post als ungelöst, damit auch andere Foren-Mitglieder den Post sofort sehen können).

    Hm, wenn du ihn als gelöst markierst, können sie ihn nicht mehr sehen? Kann ich gar nicht glauben... weil ist ja nicht gerade intelligent, ihn als ungelöst stehen zu lassen, obwohl er ja gelöst ist.

  • Problem mit SciTE

    • Bitnugger
    • 26. Oktober 2021 um 18:41
    Zitat von BigRox

    Gibt es da etwa eine spezielle Einstellung in SciTe, damit es auch ohne öffnen und schließen geht?

    Ja. Du startest in SciTE aus dem Menü Extras die "SciTE Config" und gibst dort an, wo dein Include-Verzeichnis ist. Sonst brauchst du nichts machen.

    Scite-Config.png

  • emulierte Tastatureingabe eines RFID-Scanners in Variable schreiben

    • Bitnugger
    • 23. Oktober 2021 um 23:14

    Du willst es noch kürzer?

    AutoIt
    While GUIGetMsg() <> $GUI_EVENT_CLOSE And $sAusweisNr = ""
    WEnd
    _WinAPI_UnhookWindowsHookEx($hKeyHook)
    DllCallbackFree($hKeyProc)
    GUIDelete($hGui)

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™