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

  • Unterschiede in der Funktion WinGetHandle (0x00000000) und AU3Info (0x0000000000020978) vom selben Fenster

    • Bitnugger
    • 6. Januar 2018 um 22:51

    Dim ist deprecated (veraltet) und sollte nicht mehr benutzt werden... verwende besser Local oder Global.

    Hier mal ein Beispiel, wie ich mir Infos zu einem Program/Window besorge... dass kann man natürlich noch endlos weiter treiben... z. B. kann man nun mit _WinAPI_EnumChildWindows() die Controls des Windows holen.

    GetInfo
    AutoIt
    ;-- TIME_STAMP   2018-01-06 22:42:39   v 0.1
    
    #Region    ;************ Includes ************
    #Include <WindowsConstants.au3>
    ;~ #include <Array.au3>;~~~
    #include <WinAPIProc.au3>
    #include <WinAPI.au3>
    ;~ #include <WinAPIInternals.au3>;~~~
    #EndRegion ;************ Includes ************
    
    Local $aWinInfo
    
    ConsoleWrite('- ------------------------------------' & @CRLF)
    $aWinInfo = _GetInfo('[CLASS:SunAwtDialog; TITLE:Ressourcensteuerung]')
    _PrintInfo($aWinInfo)
    $aWinInfo = _GetInfo('[CLASS:wxWindowNR; TITLE:sftp]') ; FileZilla
    _PrintInfo($aWinInfo)
    $aWinInfo = _GetInfo('Firefox.exe') ; Firefox - mit dem Namen der Exe...
    _PrintInfo($aWinInfo)
    _PrintInfo(_GetInfo('[CLASS:Progman]'))
    _PrintInfo(_GetInfo('[ACTIVE]')) ; das aktive Fenster... sollte SciTE sein
    
    Func _GetInfo($sTitle)
        Local $hWnd, $hAncestor, $sClassName, $iPID, $iIsWow64, $aResult[5]
    
        ConsoleWrite(StringFormat('> Suche Infos für $sTitle : "%s"\r', $sTitle))
    
        $hWnd = WinGetHandle($sTitle)
        If @error Then
            $iPID = ProcessExists($sTitle)
            If $iPID Then
                Local $aProcessWindows = _WinAPI_EnumProcessWindows($iPID, True) ; nur sichtbare Fenster!
                If UBound($aProcessWindows) Then
                    For $i = 1 To $aProcessWindows[0][0] Step 1
                        $hAncestor = _WinAPI_GetAncestor($aProcessWindows[$i][0], $GA_ROOTOWNER)
                        If $hAncestor = $aProcessWindows[$i][0] Then
                            $hWnd = $hAncestor
                            $sClassName = $aProcessWindows[$i][1]
                            ExitLoop
                        EndIf
                    Next
                EndIf
            EndIf
        Else
            $iPID = WinGetProcess($hWnd)
            $sClassName = _WinAPI_GetClassName($hWnd)
        EndIf
    
        If Not $hWnd Then Return SetError(1, 0, False)
    
        $sTitle = WinGetTitle($hWnd)
    
        If $iPID Then $iIsWow64 = _WinAPI_IsWow64Process($iPID)
    
        $aResult[0] = $hWnd
        $aResult[1] = $sTitle
        $aResult[2] = $sClassName
        $aResult[3] = $iPID
        $aResult[4] = $iIsWow64
    
        Return $aResult
    EndFunc   ;==>_GetInfo
    
    Func _PrintInfo($aWinInfo, $iError = @error)
        If $iError = 0 And UBound($aWinInfo) Then
            ConsoleWrite('+ hWnd       : ' & $aWinInfo[0] & @CRLF)
            ConsoleWrite('+ sTitle     : ' & $aWinInfo[1] & @CRLF)
            ConsoleWrite('+ sClassName : ' & $aWinInfo[2] & @CRLF)
            ConsoleWrite('+ iPID       : ' & $aWinInfo[3] & @CRLF)
            ConsoleWrite('+ iIsWow64   : ' & $aWinInfo[4] & ($aWinInfo[4] ? ' (x86)' : ' (x64)') & @CRLF)
        Else
            ConsoleWrite('! Ops... kein Handle - keine Info! ;-)' & @CRLF)
        EndIf
        ConsoleWrite('- ------------------------------------' & @CRLF)
    EndFunc   ;==>_PrintInfo
    Alles anzeigen
  • Infinite Image Zoom Flight build 2018-01-10

    • Bitnugger
    • 6. Januar 2018 um 17:50
    Zitat von UEZ

    _WinAPI_SetStretchBltMode($hDC, $STRETCH_HALFTONE)

    Wow... da schießt die v2.1 bei mir von 25 auf 250 Frames... und die v2.2 auf 400+... sehr schön gemacht!!!

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.14.2 2017.11.12)

    • Bitnugger
    • 6. Januar 2018 um 17:23

    Hier noch ein paar Fehler und Dinge, die ich anders schreiben würde...

    _WinAPI_SetParent, Mod, _MemVirtualAlloc, _WinAPI_GetParent

    _WinAPI_SetParent

    F: Erfolg: Ein Handle zu bisherigen Parent-Fensters

    R: Erfolg: Ein Handle zum vorherigen übergeordneten Fenster

    ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Mod ( value1, value2 )

    Bemerkungen

    F: Diese Funktion stellt nicht sicher, dass der Dividend oder Divisor genau dargestellt werden können, speziell mit Fließkommazahlen.

    R: Diese Funktion garantiert nicht, dass Dividend oder Divisor dargestellt werden können, insbesondere bei Gleitkommazahlen.

    F: Wenn Integer (Ganzzahlen) übergeben werden, so macht diese Funktion eine integrale Modulo-Operation. Sonst fällt es auf eine Fließkomma-Operation zurück. Dies bedeutet, dass es zu einem unerwarteten Ergebnis kommen kann.

    R: Wenn ganze Zahlen (Integer) übergeben werden, führt diese Funktion eine integrale Modulo-Operation aus. Andernfalls fällt es auf eine Gleitkommaoperation zurück, die gemäß der vorherigen Bemerkung bedeutet, dass sie möglicherweise nicht die erwartete Ausgabe erzeugt.

    Beispiel EN

    F: ; If the mudulus operation of $iNb by 2 equals to 0 then $iNb is even.

    R: ; If the modulus operation of $iNb by 2 equals to 0 then $iNb is even.

    Beispiel DE

    F: ; Wenn die Rechenoperation $iNb durch 2 gleich 0 sit, dass ist $iNb gerade

    R: ; Wenn die Modulo-Operation von $iNb durch 2 gleich 0 ist, dann ist $iNb gerade.

    F: ; Weist einer lokalen Variable die Rechenoperation von 4 geteilt durch 3/4zu.

    R: ; Weist einer lokalen Variable die Modulo-Operation von 1 geteilt durch 3/4 zu.

    PS: Rechenoperation ist korrekt, Modulo-Operation ist treffender.

    ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    _MemVirtualAlloc

    Parameter

    F: $MEM_RESERVE - Reserviert einen Bereich im virtuellen Adressraum des Prozesses, ohne jeglichen realen (physischen) Speicher zu allokieren zu stellen.

    R: $MEM_RESERVE - Reserviert einen Bereich des virtuellen Adressraums des Prozesses, ohne tatsächlichen physischen Speicher im Arbeitsspeicher oder in der Auslagerungsdatei auf der Festplatte zuzuweisen.

    F: $PAGE_GUARD - Geschützte Seiten; sie sind zwar eingebunden, lösen aber beim ersten Zugriff eine Ausnahme (Exception) aus, die vom VMM aufgefangen wird.

    R: $PAGE_GUARD - Seiten in der Region werden Guard-Seiten (Geschützte Seiten). Jeder Versuch, auf eine Schutzseite zuzugreifen, führt dazu, dass das System eine STATUS_GUARD_PAGE_VIOLATION-Ausnahme auslöst und den Schutzseitenstatus deaktiviert. Guard-Seiten fungieren somit als einmaliger Zugriffsalarm. Weitere Informationen finden Sie unter Erstellen von Schutzseiten. ...

    ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Func: _WinAPI_GetParent

    EN: call _WinAPI_GetLastError() to get extended error information

    F: Es ist _WinAPI_GetLastError() aufzurufen um erweiterte Fehlercodes zu erhalten.

    R: Rufen Sie _WinAPI_GetLastError() auf, um erweiterte Fehlerinformationen zu erhalten.

    ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Func: Fenstertitel und -text (erweitert)

    F: [EIGENSCHAFT1 : Wert1; EIGENSCHAFT2:Wert2]

    R: [EIGENSCHAFT1: Wert1; EIGENSCHAFT2:Wert2]

    ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

  • Problem mit GUICtrlListView_AddItem und Array

    • Bitnugger
    • 6. Januar 2018 um 12:16

    Oder so...

    AutoIt
    ;-- TIME_STAMP   2018-01-06 12:14:24
    
    #Region    ;************ Includes ************
    #Include <GuiListView.au3>
    #include <GUIConstantsEx.au3>
    #EndRegion ;************ Includes ************
    
    #Region - GUI Create
    Local $hGUI = GUICreate('GUICtrlCreateListView', 400, 200)
    Local $idLV = GUICtrlCreateListView('Name|Status', 2, 2, 396, 196)
    GUISetState()
    #EndRegion
    
    Local $aArray = ['Name1', 'Status1', 'Name2', 'Status2', 'Name3', 'Status3', 'Name4', 'Status4', 'Name5', 'Status5', 'Name6', 'Status6', 'Name7', 'Status7', 'Name8', 'Status8', 'Name9', 'Status9']
    ;~ _ArrayDisplay($aArray, '$aArray')
    
    If Mod(UBound($aArray), 2) Then Exit 999 ; $aArray muss eine gerade Anzahl an Elemente haben!!!
    
    Local $aLV[UBound($aArray) / 2][2]
    For $i = 0 To UBound($aArray) -1 Step 2
        $aLV[$i-$i/2][0] = $aArray[$i]
        $aLV[$i-$i/2][1] = $aArray[$i + 1]
    Next
    ;~ _ArrayDisplay($aLV, '$aLV')
    
    Local $aWJLV = [[250, 0], [140, 2]]
    For $i = 0 To UBound($aWJLV) -1 Step 1
        _GUICtrlListView_SetColumnWidth($idLV, $i, $aWJLV[$i][0])
        _GUICtrlListView_JustifyColumn($idLV, $i, $aWJLV[$i][1]) ; 0 left, 1 right, 2 center
    Next
    _GUICtrlListView_SetBkColor($idLV, 0x8BD08B)
    _GUICtrlListView_SetTextColor($idLV, 0xAFDC8F)
    _GUICtrlListView_SetTextBkColor($idLV, 0x808000)
    _GUICtrlListView_SetOutlineColor($idLV, 0xFF0000)
    
    _GUICtrlListView_AddArray($idLV, $aLV)
    
    #Region - GUI SwitchLoop
    While True
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                Exit
    ;~         Case
    ;~         Case
    ;~         Case
    ;~         Case Else
        EndSwitch
    WEnd
    #EndRegion
    Alles anzeigen
  • AlignComment richtet Kommentare aus Update 13.08.2016

    • Bitnugger
    • 6. Januar 2018 um 06:29

    Kein Fehler... aber unschön ist, dass der Kommentar nach EndFunc auch ausgerichtet wird. :saint:

    Zitat von Andy

    Das Autoit-Tidy zerschiesst ja leider den eingerückten ASM-Code. Ich frage mal an, ob es in Tidy eine Option gibt bestimmte Teile des Scripts von der Tidyfunktion auszunehmen.

    Ja, die gibt es...

    AutoIt
    ;-- TIME_STAMP   2018-01-06 06:32:49   v 0.1
    
    ;~ #AutoIt3Wrapper_UseX64=n                          ; 32Bit-Modus
    #AutoIt3Wrapper_UseX64=y ; 64Bit-Modus
    
    #include "assembleit2_64.au3"
    
    #Region ASM-Code_x64
    #Tidy_Off
    #cs x64
        Use64                                         ; 64Bit Modus!
        mov eax,0x40                                  ; ansonsten Fehlerwert laden
        ret                                           ; und zu AutoIt zurueck
    #ce
    #Tidy_On
    #EndRegion ASM-Code_x64
    
    #Region ASM-Code_x86
    #Tidy_Off
    #cs random
        Use32                                         ; 32Bit Modus!
        mov ecx,[esp+4]                               ; erster Parameter = "von"
        mov edi,[esp+8]                               ; zweiter Parameter = "bis"
        cmp ecx,edi                                   ; Ist "von" <= "bis"?
        jbe @f                                        ; Ja, dann ueberspringen
            mov eax,0xffffffff                        ; ansonsten Fehlerwert laden
            ret                                       ; und zu AutoIt zurueck
        @@:
        inc edi                                       ; edi++ (damit "bis" auch moeglich ist)
    ;~     _ASMDBG_()                                    ; Debug-GUI anzeigen
        sub edi,ecx                                   ; edi = "bis" minus "von" (= Bereich der Zufallszahlen)
        rdtsc                                         ; Time Stamp Counter (in EDX & EAX)
        rcl eax,cl                                    ; eax rotate left (Anzahl in CL)
        mov edx,123433                                ; Primzahl laden
        mul edx                                       ; eax damit multiplizieren
        xor edx,edx                                   ; edx = 0
        div edi                                       ; eax durch edi (Bereich) teilen (edx = Rest der Division)
        add edx,ecx                                   ; zu dem Rest der Division den "von"-Wert addieren (edx + ecx)
        mov eax,edx                                   ; edx nach eax kopieren
        ret                                           ; Funktion verlassen (eax = Rueckgabe an AutoIt)
    #ce
    #Tidy_On
    #EndRegion ASM-Code_x86
    
    If @AutoItX64 Then
        $ret = _AssembleIt2("dword", "x64", "dword", 1, "dword", 49)
        ConsoleWrite(@CRLF & _
                '> ################################################################' & @CRLF & _
                '+ ================================================================' & @CRLF & _
                '@@ Debug(' & @ScriptLineNumber & ') : ASM-Code_x64 (64) $ret: ' & $ret & @CRLF & '>' & @TAB & @TAB & 'Error code: ' & @error & @CRLF & _
                '- ================================================================' & @CRLF & _
                '> ################################################################' & @CRLF & @CRLF)
    Else
        $ret = _AssembleIt2("dword", "random", "dword", 1, "dword", 49)
        ConsoleWrite(@CRLF & _
                '> ################################################################' & @CRLF & _
                '+ ================================================================' & @CRLF & _
                '@@ Debug(' & @ScriptLineNumber & ') : ASM-Code_x86 (random) $ret: ' & $ret & @CRLF & '>' & @TAB & @TAB & 'Error code: ' & @error & @CRLF & _
                '- ================================================================' & @CRLF & _
                '> ################################################################' & @CRLF)
    EndIf
    Alles anzeigen
  • DllStructCreate mit align

    • Bitnugger
    • 4. Januar 2018 um 07:01
    Zitat von Oscar

    Wenn ich den Speicher per "_MemVirtualAlloc" anfordere, dann bekomme ich immer Adressen, bei denen die letzten 4 Stellen Nullen sind. Ist das normal?

    Weil du bei jedem Aufruf von _MemVirtualAlloc als Parameter für $pAddress eine null angibst.

  • Firefox Quantum: Button per Text oder Div klicken möglich?

    • Bitnugger
    • 3. Januar 2018 um 15:46
    Zitat von fakeraol

    Ja. Ich seh da allerdings bisher nichts, was ich vermisst hätte.

    Das sagt ja auch niemand... es geht doch nur darum, dass Tampermonkey mehr Optionen und Features anbietet, als Greasemonkey. Ich finde z. B. das "ZIP im-/exportieren" sehr gut.

  • Control-Positionierung/Skalierung bei resizable GUIs

    • Bitnugger
    • 3. Januar 2018 um 15:37
    Zitat von fakeraol

    Oh, das heißt dann wohl C++.

    Zur Option standen C++ und FreeBasic... wobei letzteres dann wohl den Vorzug bekommen würde.

  • Control-Positionierung/Skalierung bei resizable GUIs

    • Bitnugger
    • 3. Januar 2018 um 06:20

    Es war nicht geplant, eines der Toolkits in AutoIt einzubinden, sondern ein eigenes zu schreiben, zu dessen Umsetzung hauptsächlich Swing als wegweisende Vorlage dienen sollte, Wesentliche Elemente bzw. Kernpunkte dabei wären sicherlich die Container und Custom Controls. Der erste große Akt wäre dann die Umsetzung der Custom Controls...

  • Firefox Quantum: Button per Text oder Div klicken möglich?

    • Bitnugger
    • 3. Januar 2018 um 04:57

    Hast du in den Einstellungen bei Allgemein den Konfigurations-Modus auf Experte umgestellt?

  • WIN 10 Tablet - ScrollBar - WM_TOUCH

    • Bitnugger
    • 2. Januar 2018 um 16:50
    Zitat von TJF

    Hast Du noch eine Idee, warum in Deiner letzten Version der Funktion das y-Scrollen nur in eine Richtung möglich ist?

    Ja, sicher... viele Ideen... gib mir noch etwas Zeit... den Fehler werde ich garantiert finden!!! Doch welche Version meinst du genau? Link?

    Muss mal überlegen, wie ich bei mir eine WM_TOUCH-Message generieren kann, da ich ja kein Touch... habe...

    Zitat von TJF

    Scrollt leider nicht. Das liegt aber nicht unbedingt an Deiner WM_TOUCH Funktion! Ich habe bei meinen Tests die Funktionen von Melba auch nicht zum Scrollen gebracht.

    Das will mir einfach nicht in den Kopf... denn eigentlich passiert da hauptsächlich genau dasselbe, wie in der abgespeckten Mini-Version... wenn du möchtest/kannst, komme ich aber auch gerne mal mit AnyDesk auf dein ???, um den Fehler zu finden.

    Ich baue in Melba's Script noch ein paar Debug-Ausgaben ein... dann sehen wir, wo es hakt... momentan qualmt mir aber der Kopf, weil ich noch einige andere Dinge erledigen muss, die keinen Aufschub dulden. Es kann also noch 1-2 Tage dauern... ;)

  • Jahreswechsel 2017 -> 2018

    • Bitnugger
    • 2. Januar 2018 um 14:10
    Zitat von autoiter

    PS: Hat jemand eine Kopfschmerztablette für mich.

    Ich habe zwar einen Kopf, aber keine Schmerzen... und daher leider auch keine Tabletten, die ich dir mal kurz rüber beamen könnte... :rofl:

    Dieses Jahr war das erste Jahr in meinem Leben, in dem ich den Rutsch ins neue Jahr verschlafen habe... Lucifer wird mich mögen! :saint: :rock:

  • Wie filtere ich mit StringRegExp und/oder StringRegExpReplace den linken Teil eines Strings, der vor Chr(0) steht?

    • Bitnugger
    • 2. Januar 2018 um 13:45
    Zitat von alpines

    So wie du das im Moment machst, matcht du alles (durch den Punkt) greedy und danach matcht du alles ohne dem Chr(0).

    Du willst aber schon vorher alles ohne Chr(0) matchen, also nimm den Punktoperator weg und verlager das + hinter dem ausgelassenen Chr(0), dann klappt das auch.

    Boar... jetzt, wo ich die Lösung vor Augen habe... ich fasse es nicht, dass ich da nicht selbst drauf gekomen bin!!! :cursing:

    Das hast du übrigens echt super erklärt!!!

    AspirinJunkie / Andy

    Mit StringInStr habe ich es ja lösen können... auf StringFormat und StringSplit wäre ich heut sicher nicht mehr gekommen... beides super Lösungen! Damit steht also fest - ich bin (zumindest heute) zu dumm für diese Welt! 8o

    Wie auch immer, plötzlich kam mir der Gedanke, es mit RegEx lösen zu wollen... welcher mich nun dank alpines wieder ein paar Kilometer weiter gebracht hat, was RegExp angeht!

    Vielen Dank euch allen!

    PS: Andy, schau dir mal die Funktion _dllstructcreate64() in assembleit2_64.au3 genauer an... ==>> "DllStructGetPtr"

    Ich werde dich die Tage aber eh nochmals auf assembleit2_64 ansprechen, weil ich da einige Vorschläge habe, wie man das optimieren kann.

    PPS: Es gibt übrigens auch eine aktuellere fasm.dll... die v0.72.0.0... die ich in meinen geänderten Versionen (LZNT/LZMAT) bereits integriert habe... später mehr dazu...

  • Wie filtere ich mit StringRegExp und/oder StringRegExpReplace den linken Teil eines Strings, der vor Chr(0) steht?

    • Bitnugger
    • 2. Januar 2018 um 12:03

    Ich fasse es nicht... aber nach mehr als einer Stunde StringRegExp-Selbstfolterung ist mir die Lust vergangen... ich bin wohl einfach zu dumm dafür... ich wäre sehr erfreut, wenn mich jemand auf den rechten Pfad stoßen würde!

    Vielen Dank im Voraus!

    Das war mein letzter Versuch...

    AutoIt
    Local $sText = 'Wie filtere ich mit StringRegExp und/oder StringRegExpReplace den linken Teil eines Strings, der vor Chr(0) steht?' & Chr(0) & 'Das will ich auch nicht!!!' & @CRLF
    ConsoleWrite('+ Position des Chr(0) = ' & StringInStr($sText, Chr(0)) & @CRLF)
    $aText = StringRegExp($sText, '(.+[^\x00])', 1) & @CRLF
    _ArrayDisplay($aText, '$aText')
    If UBound($aText) Then
        ConsoleWrite('! Position des Chr(0) = ' & StringInStr($aText[0], Chr(0)) & @CRLF)
        ConsoleWrite('> Mano... wie bekomme ich das Chr(0) und den mistigen Rest dahinter weg?!' & @CRLF)
    EndIf
  • Control-Positionierung/Skalierung bei resizable GUIs

    • Bitnugger
    • 1. Januar 2018 um 20:18
    Zitat von fakeraol

    Wäre ein installiertes Java dann nicht auch Voraussetzung, damit diese Scripte dann laufen?

    Nein, denn die UDF soll ja das Erstellten der GUIs und Controls in AutoIt erledigen.

    Zitat von fakeraol

    Wenn ich das bis hier hin richtig verstanden habe, müssen alle WinApi-Programme ihre Oberflächen mit zusätzlichen Routinen repositionieren, weil es keine positionellen Abhängigkeiten von anderen Controls gibt unter Win32?

    Ich denke das ist korrekt. In AutoIt kannst du zwar mit GUICtrlSetResizing das Verhalten bei der Repositionierung eines Controls beeinflussen, was aber insgesamt keine befriedigende Lösung darstellt. Java bietet dafür Container-Klassen an, mit denen sich Bedienelemente (Controls) strukturieren und gruppieren lassen.

    Zitat von fakeraol

    Wäre es denn (technisch) möglich, ein anderes GUI-Toolkit per UDF für die AutoIt-GUI zu verwenden?

    Ja, sicher doch... genau das war mit dieser UDF ja geplant... indem sie die Möglichkeiten von Swing bereitstellt.

    Zitat von fakeraol

    Evtl. Tips, was sich da hinsichtlich Verbreitung auf Windows-Rechnern und Umsetzbarkeit anbieten würde? DotNet evtl.?

    Es gibt viele... die Verbreitung spielt weniger eine Rolle... entscheidend sind vor allem die Umsetzbarkeit und der erzielbare Mehrwert.

    Denkbar wären sicher folgende...

    Plattformübergreifend: GTK+, Qt, wxWidgets, Tk, FLTK, Swing (in Java)

    Der Vollständigkeit halber die komplette Liste...

    Windows: Microsoft Foundation Classes (MFC), Visual Component Library (VCL, in Delphi), Win32 (WinAPI), Windows Presentation Foundation (WPF), Windows Forms (.NET)

    Alle haben Pros und Kontras... die Auswahl der möglichen Kandidaten begrenzt sich letztendlich aber entsprechend den Fähigkeiten des Coders .

    Liste von GUI-Bibliotheken

  • Fehler in der deutschen Hilfe bitte hier melden (Hilfedatei 3.3.14.2 2017.11.12)

    • Bitnugger
    • 1. Januar 2018 um 11:46
    Zitat von Tweaky

    zu AutoItSetOption: Ändere du mal den Hilfetext mal so um, wie du es besser verstehen würdest.

    Dies kann er doch nur dann tun, wenn er ihn verstehen würde... hier ist die englische und auch die deutsche Hilfe aber auch nicht leicht zuverstehen.

    So würde ich es schreiben...

    Code
    Alters the position of a control defined by GUICtrlSetPos().
    0 = relative position to the start of the last control (upper left corner).
    1 = (default) absolute coordinates still relative to the dialog box.
    2 = cell positioning relative to current cell. A -1 for left or top parameter don't increment the start.
    So next line is -1, offset; next cell is offset,-1; current cell is -1,-1.
    Obviously, "offset" can not be -1 because it is reserved to indicate a non-increment. However, you can use a multiple of the width to skip or go back.
    
    Bestimmt, wie die Position eines Controls durch GUICtrlSetPos definiert wird.
    0 = relative Position zum Anfang des letzten Controls (obere linke Ecke).
    1 = absolute Koordinaten (Standard) relativ zur Dialog Box.
    2 = Zellenorientierte Positionierung relativ zur aktuellen Zelle. Eine -1 für den linken oder oberen Parameter erhöht nicht den Start.
    Ist die nächste Zeile -1, Offset; nächste Zelle ist Offset, -1; aktuelle Zelle ist -1, -1.
    Offensichtlich kann "Offset" nicht -1 sein, weil dieser reserviert ist, um ein Nicht-Inkrement anzugeben. Sie können jedoch ein Vielfaches der Breite verwenden, um zu überspringen oder zurückzugehen.
    Alles anzeigen
    Zitat von Tweaky

    zu ControlGetPos: Zeig mal ein Beispiel wo das so ist,

    Bitte schön... der Wert in der rot ausgegebenen Zeile - wenn das Fenster maximiert ist, hat sich geändert...

    AutoIt
    ;-- TIME_STAMP   2018-01-01 11:22:43   v 0.1
    
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    Global $WIN_STATE_VISIBLE   = 2        ; Fenster ist sichtbar.
    Global $WIN_STATE_MINIMIZED = 16    ; Fenster ist minimiert.
    Global $WIN_STATE_MAXIMIZED = 32    ; Fenster ist maximiert.
    
    #Region - GUI Create
    Local $hGUI = GUICreate('ControlGetPos-Test', 400, 200)
    Local $idButton = GUICtrlCreateButton('Exit', 10, 10, 380, 25)
    #EndRegion
    
    ; Position wie beim Erstellen angegeben
    GUISetState($hGUI)
    _GetControlPos($hGUI, 'ControlGetPos-Test', $idButton)
    
    ; Maximieren
    GUISetState(@SW_MAXIMIZE, $hGUI)
    _GetControlPos($hGUI, 'ControlGetPos-Test', $idButton)
    
    ; Restaurierte Position - wie beim Erstellen angegeben.
    GUISetState(@SW_RESTORE, $hGUI)
    _GetControlPos($hGUI, 'ControlGetPos-Test', $idButton)
    
    ; Minimieren
    GUISetState(@SW_MINIMIZE, $hGUI)
    _GetControlPos($hGUI, 'ControlGetPos-Test', $idButton)
    
    ;~ Exit
    
    Func _GetControlPos($hWnd, $sText, $iCtrlID)
        Local Static $iHeader, $aHeader = ['WinPos ($hGUI)', 'CtrlPos ($idButton)', '$WIN_STATE_VISIBLE', '$WIN_STATE_MINIMIZED', '$WIN_STATE_MAXIMIZED', '@SW_RESTORE']
    
        Local $aWinPos = WinGetPos($hWnd)
        Local $aCtrlPos = ControlGetPos($hWnd, $sText, $iCtrlID)
    
        Local $iState = WinGetState($hWnd), $aState[1][4], $sColor
    
        If BitAND($iState, $WIN_STATE_VISIBLE)   = $WIN_STATE_VISIBLE Then
            $aState[0][0] = 'Fenster ist sichtbar'
            If BitAND($iState, $WIN_STATE_MAXIMIZED) = $WIN_STATE_MAXIMIZED Then
                $aState[0][1] = 'Fenster ist maximiert.'
                $sColor = '!'
            ElseIf BitAND($iState, $WIN_STATE_MINIMIZED) = $WIN_STATE_MINIMIZED Then
                $aState[0][2] = 'Fenster ist minimiert.'
                $sColor = '-'
            Else
                $aState[0][3] = 'Restaurierte Position - wie beim Erstellen angegeben.'
                $sColor = '+'
            EndIf
        Else
            $aState[0][0] = 'Fenster ist nicht sichtbar.'
            $sColor = '@'
        EndIf
    
        If $iHeader = '' Then
            ConsoleWrite(StringFormat('> %-42s | %-42s | %-30s | %-23s | %-23s |%s\r', $aHeader[0], $aHeader[1], $aHeader[2], $aHeader[3], $aHeader[4], $aHeader[5]))
            $iHeader = True
        EndIf
        ConsoleWrite(StringFormat('%s x:%7i, y:%7i, w:%7i, h:%7i | x:%7i, y:%7i, w:%7i, h:%7i | %-30s | %-23s | %-23s | %-30s\r', _
            $sColor, _
            $aWinPos[0], $aWinPos[1], $aWinPos[2], $aWinPos[3], _
            $aCtrlPos[0], $aCtrlPos[1], $aCtrlPos[2], $aCtrlPos[3], _
            $aState[0][0], $aState[0][1], $aState[0][2], $aState[0][3]))
    EndFunc
    
    #Region - GUI SwitchLoop
    ;~ Local $iState
    ;~ While True
    ;~     Switch GUIGetMsg()
    ;~         Case $GUI_EVENT_CLOSE, $idButton
    ;~             Exit
    ;~     EndSwitch
    ;~ WEnd
    #EndRegion
    Alles anzeigen
  • Control-Positionierung/Skalierung bei resizable GUIs

    • Bitnugger
    • 30. Dezember 2017 um 21:22

    Yjuq (vormals @Make-Grafik) hatte dieses Problem schon vor langer Zeit erkannt und wollte dafür eine UDF schreiben, welche die Vorteile von Java bezüglich der Verwaltung, Erstellung und des Handlings von GUIs auch in AutoIt ermöglichen soll... ich hatte ihm meine Hilfe angeboten... die aber kaum von Bedeutung ist, da ich keine Ahnung von Java habe und meine Kentnisse in C(++) und FreeBasic (erste Wahl als Werkzeug, um die Kernkomponenten umzusetzen) auch sehr begrenzt sind.

    Yjuq, arbeitest du noch an diesem Projekt, oder hast du es verworfen? Falls du noch daran arbeitest und ich dir helfen kann, dann lasse es mich wissen - bin auch wieder via Discord erreichbar.

  • Firefox Quantum: Button per Text oder Div klicken möglich?

    • Bitnugger
    • 30. Dezember 2017 um 20:21
    Zitat von autoiter

    Innerlich habe ich den Danke-Button für deinen Beitrag gedrückt - netter Tipp.

    Hihi... das geht runter wie Öl... :)

  • Firefox Quantum: Button per Text oder Div klicken möglich?

    • Bitnugger
    • 30. Dezember 2017 um 20:11
    Zitat von fakeraol

    Greasemonkey

    Ich habe auch sehr lange Zeit Greasemonkey benutzt... und weil es mit der FireFox ESR-Version (weil ich mom. noch MozRepl brauche) nicht mehr lief, nachdem es sich aktualisiert hat, bin ich dann auf Tampermonkey umgestiegen... und war sehr erstaunt, dass es weit mehr zu bieten hat, als Greasemonkey!

    Tampermonkey ist eine kostenlose Browser-Erweiterung und der beliebteste Userscript-Manager mit über 10 Millionen Nutzern. Die Erweiterung ist verfügbar für Chrome, Microsoft Edge, Safari, Opera Next, und Firefox.

  • WIN 10 Tablet - ScrollBar - WM_TOUCH

    • Bitnugger
    • 30. Dezember 2017 um 19:25

    Borwatt... bin ich ein Troll... ja, daran liegt es... dies ist aber nur einer der beiden Fehler...

    Das wäre sofort ganz böse aufgefallen, wenn ich - wie in meinen Scripten üblich - folgende Option gesetzt hätte...

    AutoIt
    Opt('MustDeclareVars', 1)

    Zweiter Fehler: In Zeile 360 und Zeile 364 prüfe ich, ob sich $iX oder $iY verändert hat... also ob $iX bzw. $iY <> $aPoints[0][...] ist... wenn ja, dann soll $iDirectionX bzw. $iDirectionY ein Wert zugewiesen werden.

    In Zeile 361 und Zeile 365 muss ich dann natürlich prüfen, ob $iX bzw. $iY kleiner oder größer ist!!!

    Die Zeilen 360 und 364 (und die dazugehörigen Zeilen mit EndIf) habe ich eliminiert, weil sich die Abfrage auch in einer Zeile erledigen lässt. ;)

    AutoIt
    $iDirectionX = $iX = $aPoints[0][$eX] ? '' : $iX = $aPoints[0][$eX] ? $SB_LINERIGHT : $SB_LINELEFT ; Wenn $iDirectionX <> '' ist, dann müssen wir horizontal scrollen!
    $iX = $aPoints[0][$eX] ; neue Position merken
    $iDirectionY = $iY = $aPoints[0][$eY] ? '' : $iY > $aPoints[0][$eY] ? $SB_LINEDOWN : $SB_LINEUP ; Wenn  $iDirection <> '' ist, dann müssen wir vertikal scrollen!
    $iY = $aPoints[0][$eY] ; neue Position merken

    Ich habe das Beispiel aus Post #18 nochmals korrigiert... jetzt sollte es aber funktionierten!

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™