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

Beiträge von BugFix

  • 3 Chromeprofile - Fenstergrösse ändern und am Monitor einer festen Position zuordnen

    • BugFix
    • 12. Februar 2020 um 13:15
    Zitat von svenjatzu

    Ich habe 6 Chrome Profile angelegt, wovon sich jeweils zwei nacheinander öffnen und schliessen sollen.

    Welchen Nutzen hast du davon, wenn du die Profile öffnest und wieder schliesst ohne etwas darin zu tun?!

    Zitat von svenjatzu

    Dazu aber möchte ich auch noch dass drei Profile gleichzeitig nebeinander auf dem Screen angezeigt werden.

    Hast du das per Hand ausprobiert, ist es überhaupt möglich?

    Ich weiß, dass du beliebig viele Profile in Chrome erstellen kannst, aber soweit ich weiß, kann nur jeweils eines aktiv sein. Das würde im Gegensatz zu deinem Vorhaben stehen.


    EDIT:

    Ich habe es mal probiert:

    Du kannst einzelne Profile per Kommandozeile aufrufen und erhälst die PID für dieses Fenster zurück.

    $PID = Run('"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --profile-directory="PROFILNAME"', "C:\Program Files (x86)\Google\Chrome\Application")

    Das funktioniert aber nur ab dem zweiten Profilaufruf. Die PID des ersten Aufrufs löst sich in Wohlgefallen auf, da Chrome erst mal seinen Main-Process starten muss und diverse Handler. Somit musst du vermutlich Chrome insgesamt beenden um das zuerst gestartete Profil zu schliessen.

    Anordnen und Größe der Fenster verändern geht mit WinMove. Um das Fenster-Handle zu bekommen, kannst du vielleicht hiermit probieren.

  • _GDIPlus_GraphicsDrawCurve ohne 'Abrundungen'

    • BugFix
    • 4. Februar 2020 um 10:04
    Zitat von Schmunke

    Das das Win 7 ist macht nicht den Unterschied, oder ?

    Ich verwende auch Win7, daran kann es nicht liegen.

  • _GDIPlus_GraphicsDrawCurve ohne 'Abrundungen'

    • BugFix
    • 4. Februar 2020 um 09:45
    Zitat von Schmunke

    1 mal mit dem Mouseover und 1 mal direkt nach dem Mouseover.

    Was bitte verstehst du unter "Mouseover"? Ich habe Tooltip und MsgBox drübergelegt - hat keinen Einfluß, der Text bleibt.

  • _GDIPlus_GraphicsDrawCurve ohne 'Abrundungen'

    • BugFix
    • 3. Februar 2020 um 18:13
    Zitat von Schmunke

    Ein MouseOver killt mir auch den Text ...

    ?? - Das kann ich nicht reproduzieren. Ist auch nicht erklärbar, da durch MouseOver das Fenster nicht den Fokus verliert und aktiv bleibt. Oder schreibst du in einen Bereich über dem die Maus ihren Zeiger ändert?

  • _GDIPlus_GraphicsDrawCurve ohne 'Abrundungen'

    • BugFix
    • 3. Februar 2020 um 10:32
    Zitat von Schmunke

    Leider verbleibt der Text nicht in der GUI wenn man das Fenster minimiert / maximiert oder ein anderes Fenster sich darüber legt.

    Stimmt, das ist ein Nachteil bei allen Zeichenoperationen mit _WinAPI_.... Da muss man die Message WM_Activate registrieren und erneut zeichnen lassen.

    EDIT: Hier mal als Bsp.

    C++
    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <StructureConstants.au3>
    
    Global $hGui = GUICreate('Test')
    GUISetState()
    
    _Draw($hGui) ; erstmaliger Aufruf erst NACH GuiSetState, da die GUI als Context benötigt wird
    
    GuiRegisterMsg(0x0006, '_WM_HANDLER') ; WM_ACTIVATE
    Global $bReDraw = False
    
    Do
        If $bRedraw Then
            $bRedraw = False
            _Draw($hGui)
        EndIf
    Until GUIGetMsg() = -3
    
    Func _Draw($_hGUI)
        _WriteRotateText($_hGUI, 'Hallo AutoIt', 10, 100, 90, 12)
        _WriteRotateText($_hGUI, 'Hallo AutoIt', 50, 20, 270, 12, 400, 1, -1, -1, -1, False) ; mit "False" das Löschen der GUI vorm Zeichnen verhindern
    EndFunc
    
    Func _WM_HANDLER($hWnd, $iMsg, $iwParam, $ilParam)
        Local $bActive = False
        Local $iLow = BitAND($iwParam, 0xFFFF) ; Low Word
        If $iLow = 1 Or $iLow = 2 Then $bActive = True ; WA_ACTIVE, WA_CLICKACTIVE
        If $bActive Then $bRedraw = True ; nur wenn aktiv
        Return 0
    EndFunc
    
    
    ;==================================================================================================
    ; Function Name:  _WriteRotateText($hWnd, $sWrite, $iX, $iY, $iDeg, $iSize [, $iWeight=400 _
    ; ..............  [, $iType=1 [, $sFont=-1 [, $iCol=-1 [, $iBkCol=-1 [,$bRedraw=True]]]]]])
    ; Description:    Schreibt einen Text mit bestimmtem Winkel in das angegebene Fenster
    ; Parameter(s):   $hWnd Handle des Fensters
    ; .............   $sWrite der zu schreibende Text
    ; .............   $iX x-Position auf dem Fenster
    ; .............   $iY y-Position auf dem Fenster
    ; .............   $iDeg Rotationswinkel des Textes
    ; .............   $iSize Höhe des Textes
    ; ....optional:   $iWeight Fontbreite 0 - 1000 (Standard 400)
    ; ....optional:   $iType Fonttyp 1=normal (Standard); 2=Italic; 4=Underline; 8=StrikeOut
    ; .............   1 oder 2 können mit 4 und 8 kombiniert werden (5;9 od. 6;10)
    ; ....optional:   $sFont Fontname -1=Font der Form (Standard)
    ; ....optional:   $iCol Fontfarbe -1=schwarz (Standard)
    ; ....optional:   $iBkCol Hintergrundfarbe -1=Hintergrundfarbe des Fensters (Standard)
    ; ....optional:   $bRedraw True=Fenster vorher neu zeichnen (vorige Beschriftung löschen - Standard)
    ; Requirement(s): #Include <WinAPI.au3>; #include <StructureConstants.au3>; #include <WindowsConstants.au3>
    ;==================================================================================================
    Func _WriteRotateText($hWnd, $sWrite, $iX, $iY, $iDeg, $iSize, $iWeight=400, $iType=1, $sFont=-1, $iCol=-1, $iBkCol=-1, $bRedraw=True)
        If $bRedraw Then _WinAPI_RedrawWindow($hWnd)
        Local $tRect = DllStructCreate($tagRECT)
        DllStructSetData($tRect, 'Left', $iX)
        DllStructSetData($tRect, 'Top', $iY)
        Local $rotate = $iDeg *10
        If ($rotate = 900) Or ($rotate = 1800) Or ($rotate = 2700) Then $rotate += 1
        Local $RotateMe = DllStructCreate($tagLOGFONT)
        DllStructSetData($RotateMe, 'Escapement', $rotate)
        DllStructSetData($RotateMe, 'Height', ($iSize * -20)/_WinAPI_TwipsPerPixelY())
        If $iWeight <> 400 Then DllStructSetData($RotateMe, 'Weight', $iWeight)
        If BitAND($iType, 2) Then DllStructSetData($RotateMe, 'Italic', True)
        If BitAND($iType, 4) Then DllStructSetData($RotateMe, 'Underline', True)
        If BitAND($iType, 8) Then DllStructSetData($RotateMe, 'StrikeOut', True)
        If $sFont <> -1 Then DllStructSetData($RotateMe, 'FaceName', $sFont)
        Local $rFont = _WinAPI_CreateFontIndirect($RotateMe)
        Local $hDC = _WinAPI_GetDC($hWnd)
        If $iCol <> -1 Then _WinAPI_SetTextColor($hDC, $iCol)
        If $iBkCol <> -1 Then _WinAPI_SetBkColor($hDC, $iBkCol)
        _WinAPI_SelectObject($hDC, $rFont)
        _WinAPI_DrawText($hDC, $sWrite, $tRect, BitOR($DT_NOCLIP,$DT_NOPREFIX))
        _WinAPI_ReleaseDC($hWnd, $hDC)
    EndFunc ;==>_WriteRotateText
    Alles anzeigen
  • _GDIPlus_GraphicsDrawCurve ohne 'Abrundungen'

    • BugFix
    • 3. Februar 2020 um 08:23

    Mars Hatte der TE hier (RE: Text 90° gedreht in GUI) nochmal separat gefragt, ist gelöst.

  • Text 90° gedreht in GUI

    • BugFix
    • 2. Februar 2020 um 18:03

    Du hast nicht auf der GUI gezeichnet, sondern auf dem Image. Meine Funktion verlangt aber die GUI als Parameter (Funktionskopf lesen hilft 8) )

    so gehts:

    C++
        ; _WriteRotateText($GUI, $Text, $X, $Y, $Degree, $Size, $Weight), $type, $readFont, $col, $bkcol)
        ; Group Weg-Kraft: 456,4
        _WriteRotateText($NF_Form1, "Kraft [N]", 456+10, 4+120, 90, 10, 100, 1, "Arial", -1, -1)
    ;~     _GDIPlus_GraphicsDrawString($hImage, "Kraft [N]", 83-76, 19+100, "Arial", 10, 2)
  • Text 90° gedreht in GUI

    • BugFix
    • 2. Februar 2020 um 17:00
    Zitat von Schmunke

    Nur müßte der Text jetzt noch um 180° gedreht werden. Leider gibt das die Funktion nicht her.


    Es gab dazu von BugFix eine Funktion : Link

    Mit dieser Funktion könnte ich das ja auch machen.

    Leider bekomme ich das ganze nicht in meiner GUI integriert (bin zu doof) ... irgendwo mach ich da was falsch.

    Beim Drehen des Textes musst du beachten. x, y bezieht sich immer auf oben links des lesbaren Textes. Bei 180° landet der Text auf Kopf und somit ist x,y an der Textposition unten rechts!

    Bezogen auf die gewünschte Position wäre also in diesem Fall: x = x+Breite und y = y+Höhe

    P.S.

    Du solltest ein lauffähiges Skript einstellen, möglichst kurz und auf das Problem heruntergebrochen. Dein Skript kann man leider nicht ausführen, da die einzulesende Text-Datei nicht vorhanden ist.

  • GDI+ Zeichnung trotz high quality mode sehr pixelig

    • BugFix
    • 2. Februar 2020 um 13:05

    Danke Oscar , das sieht schon wesentlich geschmeidiger aus.

  • GDI+ Zeichnung trotz high quality mode sehr pixelig

    • BugFix
    • 2. Februar 2020 um 12:10

    Ich habe hier eine Funktion mit der ich Kreisringe zeichne, deren Ringbreite abhängig vom Durchmesser nichtlinear skaliert wird. Trotz des verwendeten high quality mode sieht das aber sehr grob aus. Wie kann ich das "verfeinern"?

    C++
    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    
    Example()
    
    Func Example()
        Local $hGUI, $hGraphic, $hPen
    
        $hGUI = GUICreate("Ringe - Breite nichtlinear skaliert", 1000, 300)
        GUISetState(@SW_SHOW)
    
        _GDIPlus_Startup()
        $hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)
        _GDIPlus_GraphicsSetSmoothingMode($hGraphic, $GDIP_SMOOTHINGMODE_HIGHQUALITY)
        $hPen = _GDIPlus_PenCreate(0xFF0000FF, 1)
    
        Local $aX[] = [20,60,110,170,240,320,410,510,620,740,870]
        For $i = 0 To UBound($aX) -1
            _GDIPlus_GraphicsDrawBeltScaled($hGraphic, $aX[$i], 90, 20+$i*10, $hPen)
        Next
    
        Do
        Until GUIGetMsg() = $GUI_EVENT_CLOSE
    
        _GDIPlus_PenDispose($hPen)
        _GDIPlus_GraphicsDispose($hGraphic)
        _GDIPlus_Shutdown()
    EndFunc   ;==>Example
    
    ; minimum diameter (default) = 20
    Func _GDIPlus_GraphicsDrawBeltScaled($_hGraphic, $_iX, $_iY, $_iDiameter=20, $_hPen=0)
        $_iDiameter = $_iDiameter < 20 ? 20 : $_iDiameter
        Local Const $iBaseDiam = 20, $iBorderwideMin = 8
        Local $iCurrentBorder = ($iBorderwideMin * ($_iDiameter/$iBaseDiam))^0.45 *2 ; Anpassung nichtlinear
        $iCurrentBorder = Ceiling($iCurrentBorder < $iBorderwideMin ? $iBorderwideMin : $iCurrentBorder)
        Local $iDiamInside = $_iDiameter - $iCurrentBorder
        _GDIPlus_GraphicsDrawCircleByCentre($_hGraphic, $_iX, $_iY, $_iDiameter, $_hPen)
        _GDIPlus_GraphicsDrawCircleByCentre($_hGraphic, $_iX, $_iY, $iDiamInside, $_hPen)
    EndFunc
    
    Func _GDIPlus_GraphicsDrawCircleByCentre($_hGraphic, $_iX, $_iY, $_iDiameter, $_hPen=0)
        $_iX -= $_iDiameter/2
        $_iY -= $_iDiameter/2
        _GDIPlus_GraphicsDrawEllipse($_hGraphic, $_iX, $_iY, $_iDiameter, $_iDiameter, $_hPen)
    EndFunc
    Alles anzeigen
  • _GDIPlus_GraphicsDrawCurve ohne 'Abrundungen'

    • BugFix
    • 1. Februar 2020 um 18:34
    Zitat von Schmunke

    Mein Fehler war, das ich tatsächlich davon ausgegangen bin, das man den Mittelpunkt des Kreises angibt ...

    Das hat mich schon vor mehr als 10 Jahren gestört: GDI+ Kreis mit Mittelpunktkoordinaten zeichnen

  • Hilfe erweitern - Include AD.au3

    • BugFix
    • 31. Januar 2020 um 21:10
    Zitat von Schokolade

    das mit dem ? und dem : kannte ich noch gar nicht

    Nennt sich Ternärer Operator

  • Hilfe erweitern - Include AD.au3

    • BugFix
    • 31. Januar 2020 um 12:00

    Den Code würde ich (auch wenn inhaltlich letztlich gleich) in eine Zeile packen:

    Code
    $Gruss = "MfG " & ($Titel <> "" ? $Titel & " " : "") & $Vorname & " " & $Nachname
  • Dt.au3 - Funktionssammlung zu Berechnung und (umfangreicher) Formatierung von Datumswerten

    • BugFix
    • 30. Januar 2020 um 23:41
    Zitat von Musashi

    Allein der Name Dt.au3 ist etwas "aussageschwach". Eine DateEx.au3 gibt es aber schon (von Dir ;) ).

    Ja, irgendwann gehen einem dann die Namen aus. Oder ich mache es, wie die meisten Autohersteller: Statt Modellnamen gibt's Nummern. :P

  • Dt.au3 - Funktionssammlung zu Berechnung und (umfangreicher) Formatierung von Datumswerten

    • BugFix
    • 30. Januar 2020 um 21:44

    Kleine Korrektur und neues Bsp. mit direkter Gegenüberstellung: Date.au3 - Dt.au3

    Aktuelle Version in Post #1.

  • ControlClick Problem

    • BugFix
    • 27. Januar 2020 um 17:12

    Da musst du mal alles durchprobieren. Verwende die Childauflistung jetzt mal für das Mainwindow.

  • ControlClick Problem

    • BugFix
    • 27. Januar 2020 um 16:49

    Es gab (leider) mit der letzten Version von AutoIt eine Änderung in den WinAPI-UDF. Funktionen wurden in andere UDF-Gruppen verschoben, neue UDF-Gruppen kamen hinzu. Deshalb lasse ich die Includes immer weg, kann dann jeder nach seiner Version passend hinzufügen (ich bleibe vorerst bei 3.3.14.2).

    Gehe also zu allen _WinAPI-Funktionen aus meinem Skript in die Hilfe und übernimm das zugehörige Include - dann bekommst du auch keine Fehler mehr.

  • ControlClick Problem

    • BugFix
    • 27. Januar 2020 um 10:29

    Ob man Zugriff auf die Button bekommt ist fraglich, so kannst du die Childs ermitteln (wenn möglich):

    AutoIt
    Global $classMain = '[CLASS:OMain]'
    Global $classSub = '[CLASS:OFormSub; INSTANCE:11]'
    
    ; aktiviere Main Window
    WinActivate($classMain)
    ; warte bis aktiv und speichere Handle
    Global $hMain = WinWaitActive($classMain)
    If Not IsHWnd($hMain) Then Exit MsgBox(0, 'FEHLER', 'Main Window nicht ermittelbar')
    
    ; Abfrage Handle SubForm (enthält Button)
    Global $hSub = WinGetHandle($classSub)
    If Not IsHWnd($hSub) Then Exit MsgBox(0, 'FEHLER', 'Sub Window nicht ermittelbar')
    
    ; versuchen auf die in der SubForm enthaltenen Elemente zuzugreifen - das sind Child-Windows der SubForm
    ; Auflisten der enthaltenen Child-Windows
    Global $aEnum = _WinAPI_EnumChildWindows($hSub, False) ; "False"=auch nicht sichtbare Childs auflisten
    If @error Then 
        Exit MsgBox(0, 'FEHLER', 'Childs der SubForm lassen sich nicht ermitteln')
    Else
        ConsoleWrite(StringFormat('! hControl \thParent  \t  ID  \tClassname     \tControlText') & @CRLF)
        For $i = 1 To $aEnum[0][0]
            ConsoleWrite(StringFormat('> %s\t%s\t%7s\t%-15s\t%s', $aEnum[$i][0], _WinAPI_GetParent($aEnum[$i][0]), _WinAPI_GetDlgCtrlID($aEnum[$i][0]), $aEnum[$i][1], ControlGetText($hSub, '', _WinAPI_GetDlgCtrlID($aEnum[$i][0]))) & @CRLF)
        Next
    EndIf
    Alles anzeigen
  • ControlClick Problem

    • BugFix
    • 26. Januar 2020 um 16:35
    Zitat von Windi

    Auf den Button Rechnungen soll geklickt werden.

    Das ist schon klar. Die Frage lautet: "Wenn du mit dem Infotool über dem Button bist, wird dieser dann alleine ausgewählt? Oder liegt der Auswahlrahmen auf dem Hintergrundelement mit allen Button?"

    Falls Letzteres zutrifft, kannst du mit _WinAPI_EnumChildWindows versuchen die Elemente zu selektieren.

  • ControlClick Problem

    • BugFix
    • 26. Januar 2020 um 15:44

    Überprüfe immer Schritt für Schritt ob und was an Werten zurückgegeben wird und vergleiche mit dem, was du erwartest.

    AutoIt
    WinActivate("Winitas", "")
    Global $hWnd = WinWaitActive("Winitas","")
    ; sofort testen, ob ein Handle zurückgegeben wird und vergleichen ob es dasselbe wie vom InfoTool ist
    If IsHWnd($hWnd) Then
        MsgBox(0, 'Handle', $hWnd)
        ; ControlClick($hWnd, "", "[Class:OFormSub; Instance:11]", "Left", 1 , 104, 555) ; die Klickkoordinaten sind hier nicht sinnvoll
        ControlClick($hWnd, "", "[Class:OFormSub; Instance:11]")
    Else
        MsgBox(0, 'Handle', 'Handle wurde nicht erkannt')
    EndIf


    Edit:

    Habe gerade erst gelesen: "..da die Buttons nicht angezeigt werden..." - Ja, von was sind denn dann die Angaben des Info-Tools?

    Wenn du mit dem Zielkreuz über dem Button bist und dieser nicht eingefangen wird, kannst du ihn nicht mit ControlClick ansprechen.

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™