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

  • Keylogger für ein GDI Input

    • Bitnugger
    • 29. März 2019 um 16:13

    Evtl. hilft dir dann die Funktion _WinAPI_GetKeyboardState und _WinAPI_GetKeyNameText weiter... siehe Bsp. in der AutoIt-Hilfe.

  • Anwendungen automatisch an bestimmte Monitorposition mit definierter Größe öffnen

    • Bitnugger
    • 29. März 2019 um 15:22
    Zitat von Code4Fun

    dein Script fliegt hier raus If Not IsHWnd($hWnd) Then _ErrExit(4, 'Fehler bei WinWaitActive!') ; Fehlermeldung wird erzeugt, somit kann ich die beiden Handles noch nicht vergleichen.

    In dem Fall gibt es keine zwei Handles weil keines gefunden wurde... und somit auch nichts zu vergleichen. Eine Ausgabe von $hWnd mit ConsoleWrite bringt dann auch nicht mehr Erleuchtung.

    Ich sehe aber, das ich wieder mal einen blöden Fehler eingebaut habe... ändere folgende Zeile um...

    $hWnd = WinWaitActive("[TITLE:IBM Notes Arbeitsbereich: CLASS:SWT_Window0]", "", 1) ; Wartet maximal 1 Sekunde

    zu...

    $hWnd = WinWaitActive("[TITLE:IBM Notes Arbeitsbereich; CLASS:SWT_Window0]", "", 1) ; Wartet maximal 1 Sekunde

    oder so, wenn das auch nicht geht...

    $hWnd = WinWaitActive("[REGEXPTITLE:^(IBM Notes.+); CLASS:SWT_Window0]", "", 1) ; Wartet maximal 1 Sekunde

    Zitat von Code4Fun

    Du kennst ja sicherlich die Windows Tastenkombinationen "WinTaste" + Pfeiltasten

    Ja ok, das macht allerdings Sinn.

  • Keylogger für ein GDI Input

    • Bitnugger
    • 29. März 2019 um 00:29
    Zitat von autoiter

    OMG den Tipp hätte ich nicht in einem Thread gegeben, der mit Keylogger überschrieben ist..

    Ich vertraue auf das Gute im Menschen und habe zudem auch keine fertige Lösung präsentiert... lediglich einen Hinweis, dass in der AutoIt-Hilfe weitere Infos dazu stehen... die allerdings nur dann verständlich sind, wenn eine gewisse Erkenntnisstufe vorhanden ist. Wer sich mit Hilfe Anderer einen funktionierenden Keylogger erschleichen will und damit nichts Gutes im Sinn hat, lebt eh auf extrem dünnem Eis...

  • Anwendungen automatisch an bestimmte Monitorposition mit definierter Größe öffnen

    • Bitnugger
    • 28. März 2019 um 23:52

    Teste es mal so...

    Code
    Func _99_LotusNotes() ; Lotus Notes
            Local $hWnd, $iWait = 0, $iMove, $sAppName = "Lotus Notes", $iLocation, $aWinPos = [[3015, 34, 592, 996], [3015, 34, 592, 996]] ; <-- die Koordinaten sind ja identisch!?
            GUICtrlSetData($sLabel5, $sAppName)
            GUISetState(@SW_SHOW, $hGUI)
            Local $iPID = Run("C:\Program Files (x86)\IBM\Notes\notes.exe", "", @SW_MINIMIZE) ; starte Lotus Notes
            If Not $iPID Then _ErrExit(4, 'Fehler bei Run!') ; Fehlermeldung wird erzeugt
            Do
                ; Je mehr und je ausführlicher die angegeben Infos zum Fenster sind, umso sicherer wird das richtige Fenster gefunden. Deshalb, wenn bekannt, auch die CLASS angeben!
                $hWnd = WinWaitActive("[REGEXPTITLE:IBM Notes Arbeitsbereich; CLASS:SWT_Window0]", "", 1) ; Wartet maximal 1 Sekunde
                $iWait += 1
            Until $hWnd Or $iWait = 20
            If Not IsHWnd($hWnd) Then _ErrExit(4, 'Fehler bei WinWaitActive!') ; Fehlermeldung wird erzeugt
            ConsoleWrite('> $hWnd = ' & $hWnd & ' <-- Vergleiche das Handle mit dem was dir vom AutoIt-Info-Tool angezeigt wird, wenn WinMove nicht funktioniert!' & @CRLF)
            
            ;                                                *******************************************************************
            Sleep(250) ; Vorsichtshalber noch etwas warten! (Teste auch mal ohne, oder evtl. erhöhen, wenn WinMove nicht klappt!)
            ;                                                                     ^^^^^^^^^^^^^^^^^^
            ;                                                *******************************************************************
            
    ;~         WinActivate($hApp) ; Für WinMove muss das Fenster nicht den Focus haben, der wäre z.B. nötig, wenn du Tastatureingaben mit Send an dieses Fenser schicken willst!
            $iLocation = $sLocation = "GP" ? 0 : 1
            $iMove = WinMove($hWnd, "", $aWinPos[$iLocation][0], $aWinPos[$iLocation][1], $aWinPos[$iLocation][2], $aWinPos[$iLocation][3]) ; Verschiebt die Anwendung an obige Koordinaten
            ConsoleWrite('- $iMove = ' & $iMove & @CRLF)
        EndFunc   ;==>_99_LotusNotes
    Alles anzeigen
    Zitat von Code4Fun

    Das hier

    Send("{LWIN down}{UP}") ;

    geht irgendwie nicht. Es öffnet sich hier das Windows Menü. Ich dachte ich hole mir vorher nochmals von Lotus Notes den Focus, aber irgendwie will das nicht

    Durch das "down" bleibt LWIN gedrückt, solange kein {"LWIN up"} gesendet wird... das willst du aber gar nicht, deshalb einfach das "down" weglassen.

    Für dein Vorhaben ist die Verwendung von Send eh absolut an keiner Stelle sinnvoll...

  • Keylogger für ein GDI Input

    • Bitnugger
    • 27. März 2019 um 17:11

    Schau dir in der AutoIt-Hilfe die Funktion _WinAPI_SetWindowsHookEx und die Beispiele dazu mal genauer an...

  • Anwendungen automatisch an bestimmte Monitorposition mit definierter Größe öffnen

    • Bitnugger
    • 27. März 2019 um 16:25

    Ich Depp... ändere mal die Zeile...

    If Not IsHWnd($iWait) Then _ErrExit(4, 'Fehler bei WinWaitActive!')

    in...

    If Not IsHWnd($hWnd04) Then _ErrExit(4, 'Fehler bei WinWaitActive!')

  • Anwendungen automatisch an bestimmte Monitorposition mit definierter Größe öffnen

    • Bitnugger
    • 27. März 2019 um 15:58

    Teste das mal so...

    Code
    Local $iWait, $hWnd04, $iPID_W_04 = Run(@AppDataDir & "\Telegram Desktop\Telegram.exe") ; Telegram starten
    If Not $iPID_W_04 Then _ErrExit(4, 'Fehler bei Run!')
    Do
        $hWnd04 = WinWaitActive("[TITLE:Telegram]", "", 1) ; Maximal 1 Sekunde warten, bis das Fenster von Telegram den Fokus hat.
        $iWait += 1
    Until $hWnd04 Or $iWait = 20
    If Not IsHWnd($hWnd04) Then _ErrExit(4, 'Fehler bei WinWaitActive!')
    Sleep(250) ; Vorsichtshalber noch etwas warten! (Teste auch mal ohne, oder evtl. erhöhen, wenn WinMove nicht klappt.)
    Send("1234{ENTER}"); schreibe den Login und drücke ENTER - Besser/sicherer wäre, wenn du hier ControlSend() benutzen würdest!
    WinMove($hWnd04, "", -840, 34, 840, 626) ; Verschiebt Telegram auf die X-Position von -840 und Y-Position von 34 und setzt die Höhe auf 840 und Breite auf 626
    ; ...
    
    Func _ErrExit($iError, $sMsg, $iScriptLineNumber = @ScriptLineNumber)
        ConsoleWrite('! Error: ' & $iError & @TAB & $sMsg & @CRLF & '@@ ScriptLineNumber('&$iScriptLineNumber&') : <-- Mache einen Doppelklick auf diese Zeile, wenn SciTE zu der Zeile springen soll, in der _ErrExit aufgerufen wurde!' & @CRLF)
        Exit $iError
    EndFunc
    Alles anzeigen
  • BitShift (unsigned INT)

    • Bitnugger
    • 26. März 2019 um 20:52

    Habe die in Post #3 von mir geänderte Binary.au3 nochmals ein wenig umgeändert.

    Code
    ;  3. Change the Code in _BinaryAnd, _BinaryOR, _BinaryXOR, _BinaryNot,
    ;     _BinaryShift, _BinaryRotate, _BinaryReverse, _BinaryInBin, _BinaryReplace,
    ;    _BinaryRandom
    ;    From:
    ;      Static $CodeBufferPtr
    ;      If Not $CodeBufferPtr Then
    ;          Local $Code
    ;          If @AutoItX64 Then
    ;              $Code = Binary("0x...")
    ;          Else
    ;              $Code = Binary("0x...")
    ;          EndIf
    ;          $CodeBufferPtr = __BinaryCodeBufferAlloc($Code)
    ;      EndIf
    ;    To:
    ;      Local Static $aCode = ["0x...(X86)", "0x...(X64)"], _
    ;          $CodeBufferPtr = __BinaryCodeBufferAlloc($aCode[@AutoItX64])
    Alles anzeigen

    Und weil es zum Thema passt, findet ihr hier im Anhang noch eine kleine UDF von mir...

    Funktionen: _BinaryMidAND, _BinaryMidNOT, _BinaryMidOR, _BinaryMidXOR

    Dateien

    _BinaryMidBitOp.au3 8,46 kB – 399 Downloads _BinaryMidBitOp_Example.au3 2,13 kB – 401 Downloads
  • Excel Zellen auf Inhalt prüfen

    • Bitnugger
    • 26. März 2019 um 11:00

    Schau dir dazu in der AutoIt-Hilfe die Beispiele zu der Funktion_Excel_RangeRead an...

  • ComboBox dynamisch erweitern und abfragen

    • Bitnugger
    • 26. März 2019 um 10:39
    Zitat von Code4Fun

    Leider muss ich Dir sagen, dass das komplett am Thema vorbei ging.

    Was genau ging komplett am Thema vorbei? Habe deinen Text gelesen und vermute mal, dass dir nicht ganz klar ist, wie eine ComboBox funktioniert.

    Zitat von Code4Fun

    Die Position 1 (also der Wert der ComboBox, den man sieht, wenn man die ComboBox nicht aufklappt), soll als InputBox dienen.

    Der Satz ergibt so keinen Sinn... denn der Wert den du siehst, wenn die ComboBox nicht aufgeklappt ist, ist nicht zwingend der, der an Position 1 steht und "Die Position 1" kann nicht als InputBox dienen. Oder meinst du damit, dass nur dann eine Eingabe in das Input-Feld der ComboBox erlaubt sein soll, wenn der Wert, der an Position 1 steht, angezeigt wird, um einen Kunden hizuzufügen?

    Mit dem Script von mir kannst du neue Einträge hinzufügen oder bestehende löschen.

    Hinzufügen: Einen nicht vorhanden Namen in das Input-Feld der ComboBox (vorher evtl. leeren) eingeben, dann auf den Plus-Button drücken.

    Entfernen: Einen Namen aus der aufgeklappten Liste der ComboBox auswählen, dann auf den Minus-Button drücken. Der Eintrag an Position 1 (Platzhalter) kann nicht gelöscht werden.

    Es fehlt noch die Möglichkeit bestehende Einträge zu ändern. Dazu müsste die Nachricht $EN_CHANGE ausgewertet werden, die immer dann gesendet wird, wenn sich der Inhalt des Input-Feldes ändert. Diese Nachricht könnte man auch dafür nutzen, um die Liste der ComboBox anzuzeigen und in dieser den ersten Eintrag zu selektieren, der mit der Eingabe in dem Input-Feld übereinstimmt. Schau dir dazu in der AutoIt-Hilfe die Beispiele zu _GUICtrlEdit_Create an!

    Anmerkung: Input-Controls existieren nur in AutoIt und sind vereinfacht gesagt Edit-Controls mit nur einer Zeile. Deshalb funktioniert $EN_CHANGE mit beiden. Das EN bei $EN_CHANGE steht übrigens für Edit Notification.

    Wenn keiner der vordefinierten Einträge gelöscht oder geändert werden soll, ist das auch kein großes Ding... würde ich so aber nicht machen, denn auch hier kann sich ja was ändern und dann musst du diese Änderungen im Quellcode anpassen. Die vordefinierten Einträge würde ich nur beim ersten Start des Scripts verwenden, wenn noch keine Ini-Datei angelegt wurde. Danach dann nur die Werte aus der Ini-Datei verwenden, in der auch die vordefinierten Einträge gespeichert werden.

  • ComboBox dynamisch erweitern und abfragen

    • Bitnugger
    • 25. März 2019 um 13:20

    Meinst du das etwa so...

    Code
    #include <Array.au3>
    
    Global $hGui = GUICreate('Test')
    Global $sComboDefault = 'DB abfragen'
    Global $cCombo = GUICtrlCreateCombo($sComboDefault, 10, 10, 200)
    Global $sCombo = 'Val_1|Val_2|Val_3|Val_4'
    Global $aCombo = StringSplit($sComboDefault & '|' & $sCombo, '|', 2)
    GUICtrlSetData($cCombo, $sCombo)
    Global $cAdd = GUICtrlCreateButton('+', 220, 10, 20, 22)
    Global $cDel = GUICtrlCreateButton('-', 240, 10, 20, 22)
    
    GUISetState()
    
    Local $iIndex
    While True
        Switch GUIGetMsg()
            Case -3
                Exit
            Case $cAdd
                $sCombo = GUICtrlRead($cCombo)
                $iIndex = _ArraySearch($aCombo, $sCombo)
                If @error Then
                    ConsoleWrite("Add $sCombo    --> " & $sCombo & @CRLF)
                    $iIndex = _ArrayAdd($aCombo, $sCombo)
                    $sCombo = _ArrayToString($aCombo, '|')
                    ConsoleWrite('$sCombo = ' & $sCombo & @CRLF)
                GUICtrlSetData($cCombo, "|" & $sCombo, $aCombo[$iIndex])
                EndIf
            Case $cDel
                $sCombo = GUICtrlRead($cCombo)
                $iIndex = _ArraySearch($aCombo, $sCombo)
                If Not @error And $aCombo[$iIndex] <> $sComboDefault Then
                    ConsoleWrite("Remove $aCombo["&$iIndex&"] --> " & $aCombo[$iIndex] & @CRLF)
                    _ArrayDelete($aCombo, $iIndex)
                    $sCombo = _ArrayToString($aCombo, '|')
                    ConsoleWrite('$sCombo = ' & $sCombo & @CRLF)
                    GUICtrlSetData($cCombo, "|" & $sCombo, $aCombo[$iIndex -1])
                EndIf
        EndSwitch
    WEnd
    Alles anzeigen
  • MyBackupRestore - CPU-Last zu hoch

    • Bitnugger
    • 24. März 2019 um 19:14
    Zitat von mitac100

    In Zeile 1764 werden die _Backup_Einstellungen() aufgerufen.Der _Text_Editor ab 1961 und _Text_Editor_WM_NOTIFY ab 2042.


    Das ListView wird über die _Backup_Laufwerke_WM_Notify_EventsZeile 1517 gesteuert.

    Dem Text habe ich entnommen, dass du mehrere Funktionen registriert hast, um Nachrichten für die Windows Message ID WM_NOTIFY auszuwerten...

    GUIRegisterMsg($WM_NOTIFY, "_Backup_Laufwerke_WM_Notify_Events")

    GUIRegisterMsg($WM_NOTIFY, "_Backup_Protokoll_WM_Notify_Events")

    GUIRegisterMsg($WM_NOTIFY, "_Text_Editor_WM_NOTIFY")

    ...das geht aber nicht, denn du kannst in deinem Script eine Message ID nur für eine Funktion registrieren - in deinem Fall ist dies nun _Text_Editor_WM_NOTIFY.

    Die Funktionen kannst du aber leicht zusammenlegen und dann, wie ich weiter oben bereits angemerkt hatte, besser mit $hWndFrom anstelle $iIDFrom hantieren.

    Code
    Func _WM_Notify($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg, $wParam
        Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $tInfo, $tEnLink, $cpMin, $cpMax, $tMsgFilter, $sLink
    
        Local $tNMHDR   = DllStructCreate($tagNMHDR, $lParam)
        Local $hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
        Local $iIDFrom  = DllStructGetData($tNMHDR, 'IDFrom')
        Local $iCode    = DllStructGetData($tNMHDR, "Code")
    
        Switch $hWndFrom
            Case $g_hBackup_Laufwerke_ListView
                Switch $iCode
                    Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
                        $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
                        ; Tu was...
                EndSwitch
            Case $g_hRestore_Laufwerke_ListView
                Switch $iCode
                    Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
                        $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
                        ; Tu was...
                EndSwitch
            Case $g_hLoglistView
                Switch $iCode
                    Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button
                        $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
                        _Backup_Protokoll_OnLeftClick(DllStructGetData($tInfo, "Index"))
                    Case $NM_RCLICK ; Sent by a list-view control when the user clicks an item with the right mouse button
                        $tInfo = DllStructCreate($tagNMITEMACTIVATE, $lParam)
                        _Backup_Protokoll_OnRightClick(DllStructGetData($tInfo, "Index"))
                EndSwitch
            Case $g_hTextEditor
                Switch $iCode
                    Case $EN_LINK
                        $tMsgFilter = DllStructCreate($tagMSGFILTER, $iLparam)
                        If DllStructGetData($tMsgFilter, "msg") = $WM_LBUTTONUP Then
                            $tEnLink = DllStructCreate($tagENLINK, $iLparam)
                            $cpMin = DllStructGetData($tEnLink, "cpMin")
                            $cpMax = DllStructGetData($tEnLink, "cpMax")
                            $sLink = _GUICtrlRichEdit_GetTextInRange($g_hTextEditor, $cpMin, $cpMax)
                            ConsoleWrite($sLink & @LF)
                            If StringRegExp($sLink, "^(/|\\\\)") Then
                                ShellExecute($sLink)
                            Else
    ;~                             Run("Explorer.exe /e, " & $sLink)
                            EndIf
                            ; MsgBox, _ArrayDisplay, alles was blockierend ist, ist hier absolut tabu!!!
                        EndIf
                EndSwitch
    ;~      Case ...
        EndSwitch
        
        Return $GUI_RUNDEFMSG
    EndFunc ;==>_WM_Notify
    Alles anzeigen
  • MyBackupRestore - CPU-Last zu hoch

    • Bitnugger
    • 24. März 2019 um 17:58
    Zitat von mitac100

    Wenn ich die beiden Zeilen...


    Global $hBackup_Laufwerke_ListView = ControlGetHandle($hGUI, '', $Backup_Laufwerke_ListView)

    Global $hRestore_Laufwerke_ListView = ControlGetHandle($hGUI, '', $Restore_Laufwerke_ListView)


    ...vor der Funktion Platziere, erhalte ich die Meldung: Variable used without being declared

    Das Handle für ein Control besorgst du dir direkt nachdem du es erstellt hast, also eine oder ein paar Zeilen darunter.

    Code
    ; ...
    Global $Button_Stick_verschluesseln, $Backup_Einstellungen, $Backup_Einstellungen_Groesse, $Backup_Datenaufnahme, $Backup_Protokoll, $Backup_USB_Stick_GB, $Backup_Groesse_USB_Stick_GB, $Backup_Laufwerke_ListView, $hBackup_Laufwerke_ListView, $Backup_Zielpfad, $Backup_Label_ist_ein_USB_Stick_angeschlossen
    ; ...
    Global $Restore_Laufwerke_ListView, $hRestore_Laufwerke_ListView, $Restore_Pfad, $Restore_Laufwerk, $Restore_Laufwerke_Item, $Restore_Laufwerk_oeffnen
    ; ...
    $Restore_Laufwerke_ListView = GUICtrlCreateListView("Laufwerk|Typ|Dateisystem|Freier Speicher (GB)|Speicherkapazität (GB)|", 29, 60, 586, 83, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER))
    $hRestore_Laufwerke_ListView = GUICtrlGetHandle($Restore_Laufwerke_ListView)
    GUICtrlSetColor(-1, 0x000000)
    GUICtrlSetBkColor(-1, 0xDBF4FF)
    GUICtrlSetCursor(-1, 0) ; Hand Icon
    ; ...
    $Backup_Laufwerke_ListView = GUICtrlCreateListView("Laufwerk|Typ|Dateisystem|Freier Speicher (GB)|Speicherkapazität (GB)|", 29, 60, 586, 83, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS), BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_DOUBLEBUFFER))
    GUICtrlSetColor(-1, 0x000000)
    GUICtrlSetBkColor(-1, 0xDBF4FF)
    GUICtrlSetCursor(-1, 0) ; Hand Icon
    $hBackup_Laufwerke_ListView = GUICtrlGetHandle($Backup_Laufwerke_ListView)
    ; ...
    Alles anzeigen

    Zudem solltest du Variablen mit einem dem Typ entsprechenden Kürzel versehen... und globale Variablen sollten besser mit $g_ beginnen. Das hilft später ungemein bei der Fehlersuche!

    Global $g_idRestore_Laufwerke_ListView ; CtrlID

    Global $g_hRestore_Laufwerke_ListView ; Handle

    Global $g_sIniFile = @ScriptDir & '\IniFile.ini' ; String

    Global $g_iBackup_Einstellungen_Groesse ; Integer

    Global $g_aDrives ; Array

    Hier kannst du mehr dazu lesen: Best coding practices - AutoIt Wiki

    Variablen ausserhalb von Funktionen sind übrigens immer global, auch wenn du sie mit DIM oder Local deklarierst!

  • MyBackupRestore - CPU-Last zu hoch

    • Bitnugger
    • 24. März 2019 um 09:12
    Zitat von alpines

    Du holst dir einmal das Event ab und fragst immer dasselbe ab, du hast vergessen in der Schleife nochmal GUIGetMsg() in $nMsg zu speichern.

    Hihi, ja, ich Depp... danke - habe es korrigiert. ;)

  • MyBackupRestore - CPU-Last zu hoch

    • Bitnugger
    • 24. März 2019 um 01:47
    Zitat von mitac100

    Die CPU-Last ist viel zu hoch

    Das liegt an deinem Main-Loop, bzw. deiner While-Schleife...

    Code
    While 1
        Global $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
                Sleep(100) ; Das macht hier ja unheimlich viel Sinn! ;-)
        EndSwitch
    WEnd

    Im MsgMode wäre sie bis auf das überflüssige Sleep() fast korrekt... fast, weil die Variable $nMsg vor dem Loop deklariert werden sollte und anstelle des Global ein Local völlig ausreichend wäre.

    Code
    Local $nMsg
    While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd
    
    ; oder so, wenn die Message nur als Parameter für Switch benötigt wird.
    
    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
    WEnd
    Alles anzeigen

    Im MsgMode schaltet die Funktion GUIGetMsg die CPU bei Bedarf automatisch in den Idle-Mode (Leerlauf), sodass sie in Schleifen sicher verwendet werden kann, ohne die gesamte CPU zu belasten.

    Da du aber mit allen GUI's im OnEventMode arbeitest, sollte deine While-Schleife (Main-Loop) so aussehen:

    Code
    While 1
        Sleep(10) ; 10-250 sind akzeptable Werte
    WEnd
    Zitat von mitac100

    Wenn ich einen der Buttons, Einstellungen, Datenaufnahme oder Protokoll klicke, kann ich danach kein Laufwerk mehr wählen.

    Was muss ich tun um das ListView zu reaktivieren?

    Ich will dein Script bei mir nicht starten, weil sich die Spuren nur schwer beseitigen lassen. Meinst du mit Laufwerk auswählen geht danach nicht mehr, dass du keine Benachrichtigung mehr bekommst, wenn du mit der Maus in das Listview $Backup_Laufwerke_ListView bzw. $Restore_Laufwerke_ListView klickst?


    Hier noch ein paar Dinge, die mir beim Überfliegen deines Codes aufgefallen sind:


    Funktion _Bytes_KB_MB_GB

    Siehe _WinAPI_StrFormatByteSize, _WinAPI_StrFormatByteSizeEx und _WinAPI_StrFormatKBSize

    Code: __On_Button
    Switch @GUI_CtrlId
        Case $GUI_EVENT_CLOSE ; <-- wird von __On_Close verarbeitet und trifft hier somit niemals zu

    Aus __On_Close und __On_Button würde ich eine Funktion __On_Event machen... alle Events in einer Funktion.


    Funktion _Laufwerke_ListViewBox

    If @UserName = @UserName Or @UserName = @UserName Then

    Hust... das macht natürlich Sinn... ;)

    Funktion _Backup_Laufwerke_WM_Notify_Events

    Hier hast du bei #forceref $hWndGUI als Parameter angegeben... wobei $hWndGUI aber nirgends deklariert wird. Richtig wäre hier wohl $hWnd.

    Wenn man mit mehreren GUI's hantierst, kann die Frage nach der ControlID u.U. ins Auge gehen, deshalb sollte dafür anstelle der ControlID besser das Handle des Controls verwendet werden.

    Code
    ; ...
    Global $hBackup_Laufwerke_ListView  = ControlGetHandle($hGUI, '', $Backup_Laufwerke_ListView)
    Global $hRestore_Laufwerke_ListView = ControlGetHandle($hGUI, '', $Restore_Laufwerke_ListView)
    ; ...
    
    Func _Backup_Laufwerke_WM_Notify_Events($hWnd, $MsgID, $wParam, $lParam)
        #forceref $hWnd, $MsgID, $wParam
    
        Local $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
        Local $hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
        Local $nNotifyCode = DllStructGetData($tNMHDR, "Code")
        Local $iIDFrom = DllStructGetData($tNMHDR, 'IDFrom')
    
        Switch $hWndFrom
            Case $hBackup_Laufwerke_ListView
                If $nNotifyCode = $NM_CLICK Then
                    ; ...
                EndIf
            Case $hRestore_Laufwerke_ListView
                If $nNotifyCode = $NM_CLICK Then
                    ; ...
                EndIf
        EndSwitch
        
        ; ...
    
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>_Backup_Laufwerke_WM_Notify_Events
    Alles anzeigen

    _GDIPlus_Startup() / _GDIPlus_Shutdown()

    _GDIPlus_Startup() solltest du einmalig beim Start ausführen, und _GDIPlus_Shutdown() ebenso, wenn das Script beendet wird.

    Code
    _GDIPlus_Startup()
    OnAutoItExitRegister('_Exit')
    
    ; Tu was...
    
    Exit
    
    Func _Exit()
        _GDIPlus_Shutdown()
    EndFunc
    Code
    For $j = 1 To $Drives[0]

    Laufvariablen würde ich nicht im globalen Kontext benutzen, weil dies später zu extrem schwer auffindbaren Fehlern führen kann. Analog dazu würde ich es auch möglichst vermeiden, globale Variablen innerhalb von Funktionen und Schleifen (s. Main-Loop) zu deklarieren.

  • Umbenannt: Installierte Drucker Remote auslesen

    • Bitnugger
    • 21. März 2019 um 14:37
    Zitat von Lashandan

    Oder gibt es noch eine ganz andere Möglichkeit die installierten Drucker auszulesen?

    Ja, gibt es... hier ein Bsp.:

    C
    ;~ #include <WinAPI.au3>  ; AutoIt <= 3.3.14.2
    #include <WinAPIConv.au3> ; AutoIt >= 3.3.14.3
    
    _Example()
    
    Func _Example()
        Local $aComputer = _GetComputer()
        ConsoleWrite('$aComputer = ' & Join($aComputer, ',') & @CRLF & @CRLF)
    
        If IsArray($aComputer) Then
            For $i = 0 To UBound($aComputer) - 1 Step 1
                _GetPrintersInfo($aComputer[$i])
                If @error Then ConsoleWrite('! Keine Antwort von "' & $aComputer[$i] & '" bekommen!' & @CRLF & @CRLF)
            Next
        EndIf
    EndFunc  ;==>_Example
    
    Func _GetPrintersInfo($strComputer = ".")
        Local $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
        If Not IsObj($objWMIService) Then Return SetError(1)
        Local $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Printer", 'WQL', 48)
        For $objItem In $colItems
            ConsoleWrite("-------------------------------------------" & @CRLF)
            ConsoleWrite("Win32_Printer instance from '" & $strComputer & "'" & @CRLF)
            ConsoleWrite("-------------------------------------------" & @CRLF)
            ConsoleWrite("Attributes                 : " & $objItem.Attributes & @CRLF)
            ConsoleWrite("Availability               : " & $objItem.Availability & @CRLF)
            ConsoleWrite("AvailableJobSheets         : " & Join($objItem.AvailableJobSheets, ",") & @CRLF)
            ConsoleWrite("AveragePagesPerMinute      : " & $objItem.AveragePagesPerMinute & @CRLF)
            ConsoleWrite("Capabilities               : " & Join($objItem.Capabilities, ",") & @CRLF)
            ConsoleWrite("CapabilityDescriptions     : " & Join($objItem.CapabilityDescriptions, ",") & @CRLF)
            ConsoleWrite("Caption                    : " & $objItem.Caption & @CRLF)
            ConsoleWrite("CharSetsSupported          : " & Join($objItem.CharSetsSupported, ",") & @CRLF)
            ConsoleWrite("Comment                    : " & $objItem.Comment & @CRLF)
            ConsoleWrite("ConfigManagerErrorCode     : " & $objItem.ConfigManagerErrorCode & @CRLF)
            ConsoleWrite("ConfigManagerUserConfig    : " & $objItem.ConfigManagerUserConfig & @CRLF)
            ConsoleWrite("CreationClassName          : " & $objItem.CreationClassName & @CRLF)
            ConsoleWrite("CurrentCapabilities        : " & Join($objItem.CurrentCapabilities, ",") & @CRLF)
            ConsoleWrite("CurrentCharSet             : " & $objItem.CurrentCharSet & @CRLF)
            ConsoleWrite("CurrentLanguage            : " & $objItem.CurrentLanguage & @CRLF)
            ConsoleWrite("CurrentMimeType            : " & $objItem.CurrentMimeType & @CRLF)
            ConsoleWrite("CurrentNaturalLanguage     : " & $objItem.CurrentNaturalLanguage & @CRLF)
            ConsoleWrite("CurrentPaperType           : " & $objItem.CurrentPaperType & @CRLF)
            ConsoleWrite("Default                    : " & $objItem.Default & @CRLF)
            ConsoleWrite("DefaultCapabilities        : " & Join($objItem.DefaultCapabilities, ",") & @CRLF)
            ConsoleWrite("DefaultCopies              : " & $objItem.DefaultCopies & @CRLF)
            ConsoleWrite("DefaultLanguage            : " & $objItem.DefaultLanguage & @CRLF)
            ConsoleWrite("DefaultMimeType            : " & $objItem.DefaultMimeType & @CRLF)
            ConsoleWrite("DefaultNumberUp            : " & $objItem.DefaultNumberUp & @CRLF)
            ConsoleWrite("DefaultPaperType           : " & $objItem.DefaultPaperType & @CRLF)
            ConsoleWrite("DefaultPriority            : " & $objItem.DefaultPriority & @CRLF)
            ConsoleWrite("Description                : " & $objItem.Description & @CRLF)
            ConsoleWrite("DetectedErrorState         : " & $objItem.DetectedErrorState & @CRLF)
            ConsoleWrite("DeviceID                   : " & $objItem.DeviceID & @CRLF)
            ConsoleWrite("Direct                     : " & $objItem.Direct & @CRLF)
            ConsoleWrite("DoCompleteFirst            : " & $objItem.DoCompleteFirst & @CRLF)
            ConsoleWrite("DriverName                 : " & $objItem.DriverName & @CRLF)
            ConsoleWrite("EnableBIDI                 : " & $objItem.EnableBIDI & @CRLF)
            ConsoleWrite("EnableDevQueryPrint        : " & $objItem.EnableDevQueryPrint & @CRLF)
            ConsoleWrite("ErrorCleared               : " & $objItem.ErrorCleared & @CRLF)
            ConsoleWrite("ErrorDescription           : " & $objItem.ErrorDescription & @CRLF)
            ConsoleWrite("ErrorInformation           : " & Join($objItem.ErrorInformation, ",") & @CRLF)
            ConsoleWrite("ExtendedDetectedErrorState : " & $objItem.ExtendedDetectedErrorState & @CRLF)
            ConsoleWrite("ExtendedPrinterStatus      : " & $objItem.ExtendedPrinterStatus & @CRLF)
            ConsoleWrite("Hidden                     : " & $objItem.Hidden & @CRLF)
            ConsoleWrite("HorizontalResolution       : " & $objItem.HorizontalResolution & @CRLF)
            ConsoleWrite("InstallDate                : " & $objItem.InstallDate & @CRLF)
            ConsoleWrite("JobCountSinceLastReset     : " & $objItem.JobCountSinceLastReset & @CRLF)
            ConsoleWrite("KeepPrintedJobs            : " & $objItem.KeepPrintedJobs & @CRLF)
            ConsoleWrite("LanguagesSupported         : " & Join($objItem.LanguagesSupported, ",") & @CRLF)
            ConsoleWrite("LastErrorCode              : " & $objItem.LastErrorCode & @CRLF)
            ConsoleWrite("Local                      : " & $objItem.Local & @CRLF)
            ConsoleWrite("Location                   : " & $objItem.Location & @CRLF)
            ConsoleWrite("MarkingTechnology          : " & $objItem.MarkingTechnology & @CRLF)
            ConsoleWrite("MaxCopies                  : " & $objItem.MaxCopies & @CRLF)
            ConsoleWrite("MaxNumberUp                : " & $objItem.MaxNumberUp & @CRLF)
            ConsoleWrite("MaxSizeSupported           : " & $objItem.MaxSizeSupported & @CRLF)
            ConsoleWrite("MimeTypesSupported         : " & Join($objItem.MimeTypesSupported, ",") & @CRLF)
            ConsoleWrite("Name                       : " & $objItem.Name & @CRLF)
            ConsoleWrite("NaturalLanguagesSupported  : " & Join($objItem.NaturalLanguagesSupported, ",") & @CRLF)
            ConsoleWrite("Network                    : " & $objItem.Network & @CRLF)
            ConsoleWrite("PaperSizesSupported        : " & Join($objItem.PaperSizesSupported, ",") & @CRLF)
            ConsoleWrite("PaperTypesAvailable        : " & Join($objItem.PaperTypesAvailable, ",") & @CRLF)
            ConsoleWrite("Parameters                 : " & $objItem.Parameters & @CRLF)
            ConsoleWrite("PNPDeviceID                : " & $objItem.PNPDeviceID & @CRLF)
            ConsoleWrite("PortName                   : " & $objItem.PortName & @CRLF)
            ConsoleWrite("PowerManagementCapabilities: " & Join($objItem.PowerManagementCapabilities, ",") & @CRLF)
            ConsoleWrite("PowerManagementSupported   : " & $objItem.PowerManagementSupported & @CRLF)
            ConsoleWrite("PrinterPaperNames          : " & _WideCharToMultiByte(Join($objItem.PrinterPaperNames, ",")) & @CRLF)
            ConsoleWrite("PrinterState               : " & $objItem.PrinterState & @CRLF)
            ConsoleWrite("PrinterStatus              : " & $objItem.PrinterStatus & @CRLF)
            ConsoleWrite("PrintJobDataType           : " & $objItem.PrintJobDataType & @CRLF)
            ConsoleWrite("PrintProcessor             : " & $objItem.PrintProcessor & @CRLF)
            ConsoleWrite("Priority                   : " & $objItem.Priority & @CRLF)
            ConsoleWrite("Published                  : " & $objItem.Published & @CRLF)
            ConsoleWrite("Queued                     : " & $objItem.Queued & @CRLF)
            ConsoleWrite("RawOnly                    : " & $objItem.RawOnly & @CRLF)
            ConsoleWrite("SeparatorFile              : " & $objItem.SeparatorFile & @CRLF)
            ConsoleWrite("ServerName                 : " & $objItem.ServerName & @CRLF)
            ConsoleWrite("Shared                     : " & $objItem.Shared & @CRLF)
            ConsoleWrite("ShareName                  : " & $objItem.ShareName & @CRLF)
            ConsoleWrite("SpoolEnabled               : " & $objItem.SpoolEnabled & @CRLF)
            ConsoleWrite("StartTime                  : " & $objItem.StartTime & @CRLF)
            ConsoleWrite("Status                     : " & $objItem.Status & @CRLF)
            ConsoleWrite("StatusInfo                 : " & $objItem.StatusInfo & @CRLF)
            ConsoleWrite("SystemCreationClassName    : " & $objItem.SystemCreationClassName & @CRLF)
            ConsoleWrite("SystemName                 : " & $objItem.SystemName & @CRLF)
            ConsoleWrite("TimeOfLastReset            : " & $objItem.TimeOfLastReset & @CRLF)
            ConsoleWrite("UntilTime                  : " & $objItem.UntilTime & @CRLF)
            ConsoleWrite("VerticalResolution         : " & $objItem.VerticalResolution & @CRLF)
            ConsoleWrite("WorkOffline                : " & $objItem.WorkOffline & @CRLF & @CRLF)
        Next
    EndFunc  ;==>_GetPrintersInfo
    
    Func _GetComputer()
        Local $iPID = Run('net view', '', @SW_HIDE, $STDOUT_CHILD)
        ProcessWaitClose($iPID)
        Return StringRegExp(StdoutRead($iPID), '(?m)\\\\([\w|-]+)', 3)
    EndFunc  ;==>_GetComputer
    
    Func Join($aArray, $sDelimiter)
        Local $sJoin
        If IsArray($aArray) Then
            For $sItem In $aArray
                $sJoin &= $sItem & $sDelimiter
            Next
        EndIf
        Return $sJoin ? StringTrimRight($sJoin, 1) : ''
    EndFunc  ;==>Join
    
    ; Konvertiert den Text, damit Umlaute und Sonderzeichen in SciTE und in der Eingabeaufforderung korrekt dargestellt werden!
    Func _WideCharToMultiByte($vText, $iCodePage = @Compiled ? 1 : 65001, $bRetNoStruct = True, $bRetBinary = False)
        $vText = String($vText) ; Damit _WinAPI_WideCharToMultiByte nicht abstürzt, wenn kein String übergeben wurde!
        Return _WinAPI_WideCharToMultiByte($vText, $iCodePage, $bRetNoStruct, $bRetBinary)
    EndFunc  ;==>_WideCharToMultiByte
    Alles anzeigen
  • Timer anzeigen lassen...

    • Bitnugger
    • 20. März 2019 um 22:02
    Zitat von Ram3000

    Hallo Bitnugger,
    war Du schon dabei und hast ein neues Script erstellen können ? *VorsichtigFragNach* ;)
    Würde mich wirklich freuen, wenn Du da noch etwas machen würdest.

    Das Grundgerüst für dein Script habe ich bereits fertig und du stehst auch ganz oben auf meiner privaten ToDo-List... ich habe zu deinem Leidwesen aber auch noch eine geschäftliche ToDo-List... und die hat eine höhere Priorität. Ich denke, die werde ich zum WE hin abgearbeitet haben und dann bist du wieder dran. :saint:

  • Problem mit Parent- Child Fenster GUIGetMsg

    • Bitnugger
    • 18. März 2019 um 14:05

    Schau dir mal in der Hilfe die Syntax zu GUIGetMsg() an...

  • BitShift (unsigned INT)

    • Bitnugger
    • 14. März 2019 um 01:22
    Zitat von Musashi

    Ich wage kaum zu fragen :P , aber könntest Du Dich mit der Idee anfreunden im Header deiner UDF einen Modified-Eintrag zu machen, z.B. :

    Habe meinen Post #3 editiert und im Header in der von mir geänderten UDF im Anhang vermerkt, was ich wo geändert habe.

  • BitShift (unsigned INT)

    • Bitnugger
    • 13. März 2019 um 22:22
    Zitat von Musashi

    Hast Du dort irgendwelche Änderungen vorgenommen ?

    Ja, habe ich.

    In dem Script, in dem ich die UDF verwende, benutze ich die AutoIt3Wrapper-Direktive:

    #AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7

    Mit der Original-UDF bricht das Script dann mit Fehlermeldungen ab, weil die Variablen in den Zeilen 408-410 nicht verwendet werden. Deshalb habe ich die Zeilen auskommentiert - ähnlich auch in Zeile 487, wegen dem $Ret.

    Die Funktionen _BitXOR64, _BitAND64 und _BitOR64 habe ich so umgestrickt, dass anstatt 20 Parameter nun 255 übergeben werden können, so wie es bei BitXOR usw. in AutoIt ist.

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™