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

Beiträge von Stoani

  • Pixelfläche in "Raster" unterteilen

    • Stoani
    • 2. November 2011 um 14:42

    Sorry,

    sind die in Pixel/mm/?

  • Pixelfläche in "Raster" unterteilen

    • Stoani
    • 2. November 2011 um 13:19

    s und h ?

  • Pixelfläche in "Raster" unterteilen

    • Stoani
    • 2. November 2011 um 13:07

    Danke danke schon viiiiel besser ;D

    Nur diese Werte sind mir noch ned klar (200,30)
    _Create(@ScriptDir & "\Test.emf", 200, 30)

    Das war aber wirklich die letzte ;)

  • Pixelfläche in "Raster" unterteilen

    • Stoani
    • 2. November 2011 um 12:01

    Erstmal:

    Danke fürs Lesen :thumbup:


    chip: Weil ich nicht 100mal das gleiche Zeichnen möchte. Die zwei Werte (s/h) sind variabel. Außerdem ist dies nur ein kleiner Teil eines größeren Tools. Es soll im Endeffekt nicht nur für mich sein sondern auch für den Ottonormalverbraucher.

    eukalyptus

    Danke für die Mühe! :thumbup:
    Leider versteh ich ned alles im Skript (-> DLLCall's), da ich noch nie mit DLLCall oder WinApi gearbeited hab.
    Würde es dir was ausmachen, kleine Komments zu den wichtigsten Vorgängen zu machen?
    Also, was gerade damit gemacht wurde?


    Wäre super! :thumbup:


    Grüße
    Stoani


    Ps.: Danke nochmals :)

  • Pixelfläche in "Raster" unterteilen

    • Stoani
    • 2. November 2011 um 01:28

    Servus,

    Zusammengefasst:

    Ich möchte(der übliche Anfang) in Adobe Illustrator eine Grafik erstellen. Damit ich dies nicht per Hand erledigen muss, sollte das AutoIt für mich erledigen :)
    Derweilen bin ich soweit, dass ein neues Dokument größe A4 erstellt wird. Um nun mit dem Zeichnen zu beginnen müsste ich den Mittelpunkt des Blattes herrausfinden. Um außerdem das Zeichnen selber zu erleichtern(bzw. das Rechnen zu erleichtern) wäre es gut wenn man ein virtuelles, metrisches "Raster" über die Pixelfläche des Blattes legen könnte.


    Skript um ein neues Dokument zu öffnen:

    [autoit]

    #RequireAdmin
    Opt('MustDeclareVars', 1)

    [/autoit][autoit][/autoit][autoit]

    ShellExecute("Illustrator.exe")
    WinWaitActive("Adobe Illustrator CS5")
    WinActivate("Adobe Illustrator CS5")
    Sleep(3000)
    Send("^n")
    Sleep(2000)
    ControlClick("Neues Dokument", "", "ComboBox2", "left", "1", "933", "348")
    Sleep(100)
    ControlClick("Neues Dokument", "", "ComboBox2", "left", "1", "930", "444")
    Sleep(100)
    ControlClick("Neues Dokument", "", "Button2", "left", "1", "1062", "230")
    Sleep(100)
    Send("{ENTER}")
    Exit

    [/autoit]

    Hier ist das neu geöffnete Dokument
    [Blockierte Grafik: http://www9.picfront.org/picture/kAmrj1VPP/thb/001.jpg]

    Nun müsste man die Pixel des Blattes ermitteln.
    Die Farbe in Hex: 0xffffff [Weiß]
    Das sind diese hier:
    [Blockierte Grafik: http://www9.picfront.org/picture/X67gXmIh5Gw/thb/002.jpg]
    Dies sollte mit Pixelsearch funktionieren:

    [autoit]

    HotKeySet("!n","_a")
    Func _a()
    $coord = PixelSearch(560,262,1062,732,0x000000)

    [/autoit][autoit][/autoit][autoit]

    If Not @error Then
    MsgBox(0, "X and Y are:", $coord[0] & "," & $coord[1])
    EndIf
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    while 1
    sleep(100)
    WEnd

    [/autoit]

    Um den Rahmen der Pixel(also die äußerste Pixelreihe) zu bekommen müsste man einfach linear,kreuzförmig von Innen nach außen suchen lassen oder?
    Ich weiß leider nicht, wie ich diesen Ansatz realisieren könnte ;(

    Als nächstes das unterteilen des Pixelfeldes in metrische Sektoren.
    Sollte in etwa virtuell so aussehen:
    [Blockierte Grafik: http://www9.picfront.org/picture/pRKZUl21Z/thb/003.jpg]


    Um die Pixel(also die "Koordinatenpunkte" des Bildschirms in ein metrisches System umzuwandeln benötigt man die Formel:
    x(cm) * $dpi / 2,54 = y(pixel)
    y(pixel) * 2,54/$dpi = x(cm)
    Hierfür finde ich die UDF von [James1337] recht nützlich.

    [autoit]

    #cs
    UDF by James1337
    Functions: _MillimetersToPixel, _CentimetersToPixel, _PixelToMillimeters, _PixelToCentimeters
    #ce

    Func _MillimetersToPixel($Millimeters)
    Local $DC = DllCall("user32.dll", "long", "GetDC", "long", 0)
    Local $DeviceCaps = DllCall("gdi32.dll", "long", "GetDeviceCaps", "long", $DC[0], "long", 90)
    Local $DC = DllCall("user32.dll", "long", "ReleaseDC", "long", 0, "long", $DC)
    Local $DPI = $DeviceCaps[0]
    Local $Centimeters = $Millimeters * 10
    Return $Centimeters * $DPI / 2.54
    EndFunc

    Func _CentimetersToPixel($Centimeters)
    Local $DC = DllCall("user32.dll", "long", "GetDC", "long", 0)
    Local $DeviceCaps = DllCall("gdi32.dll", "long", "GetDeviceCaps", "long", $DC[0], "long", 90)
    Local $DC = DllCall("user32.dll", "long", "ReleaseDC", "long", 0, "long", $DC)
    Local $DPI = $DeviceCaps[0]
    Return $Centimeters * $DPI / 2.54
    EndFunc

    Func _PixelToMillimeters($Pixel)
    Local $DC = DllCall("user32.dll", "long", "GetDC", "long", 0)
    Local $DeviceCaps = DllCall("gdi32.dll", "long", "GetDeviceCaps", "long", $DC[0], "long", 90)
    Local $DC = DllCall("user32.dll", "long", "ReleaseDC", "long", 0, "long", $DC)
    Local $DPI = $DeviceCaps[0]
    Return $Pixel / $DPI * 0.254
    EndFunc

    Func _PixelToCentimeters($Pixel)
    Local $DC = DllCall("user32.dll", "long", "GetDC", "long", 0)
    Local $DeviceCaps = DllCall("gdi32.dll", "long", "GetDeviceCaps", "long", $DC[0], "long", 90)
    Local $DC = DllCall("user32.dll", "long", "ReleaseDC", "long", 0, "long", $DC)
    Local $DPI = $DeviceCaps[0]
    Return $Pixel / $DPI * 2.54
    EndFunc

    [/autoit]


    Wenn man nun also die Mitte des Blattes ermittelt hatt, kann man zu zeichnen beginnen.
    Was wird gezeichnet?

    Das hier:
    [Blockierte Grafik: http://www9.picfront.org/picture/lOtjXMM4/thb/004.jpg]

    Es wird aus einer Inputbox der Wert $s und $h ausgelesen.
    Danach wird, mithilfe dieser Formel: r = (1/2) • { [(s/2)² / h] +h } , der Kreisradius (r) ermittelt.


    In AutoIt schaut das in etwa so aus:

    [autoit]

    include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit][autoit][/autoit][autoit]

    $Form1 = GUICreate("Test", 278, 316, 472, 247)
    $Input1 = GUICtrlCreateInput("s", 32, 32, 217, 21)
    $Input2 = GUICtrlCreateInput("h", 32, 64, 217, 21)
    $Button1 = GUICtrlCreateButton("= r", 33, 96, 217, 33)
    $Button2 = GUICtrlCreateButton("Zeichnen", 33, 143, 217, 33)
    GUISetState(@SW_SHOW)

    [/autoit][autoit][/autoit][autoit]

    ;Damit kein , in AutoIt gelangt!====================================================================================
    HotKeySet("{,}","Komma")
    HotKeySet("{NUMPADDOT}","Komma")
    Func Komma()
    Send(".")
    EndFunc
    ;===================================================================================================================
    _Test()

    [/autoit][autoit][/autoit][autoit]

    Func _Test()
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit

    [/autoit][autoit][/autoit][autoit]

    Case $Button1
    $s = GUICtrlRead($Input1)
    $h = GUICtrlRead($Input2)
    $r1 = $s/2
    $r2 =($r1)^2
    $r3 = $r2/$h
    $r4 = $r3 + $h
    $r5 = $r4 * 0.5
    $rT = ConsoleWrite($r5&@CRLF)
    Case $Button2
    _Draw()
    EndSwitch
    WEnd
    EndFunc


    Func _Draw()
    ;Blablabla
    EndFunc ;==>_Exit

    [/autoit]


    Eine Idee hab ich, nur mit dem Umsetzen hauts noch nicht ganz so hin...
    Wäre dankbar wenn mich jemand dabei unterstützen könnte :)


    Danke fürs Lesen und
    Grüßé
    Stoani :rock:

  • Minimieren

    • Stoani
    • 31. Oktober 2011 um 22:11

    Sollte funktionieren:

    [autoit]

    HotKeySet("!y","_Ruhezustand")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _Ruhezustand()
    WinMinimizeAll()
    $msg = MsgBox(36,"Ruhezustand","Der Computer wird sich nun in den Ruhezustand versetzen.")
    If $msg = 7 Then
    Exit
    ElseIf $msg = 6 Then
    Shutdown(32)
    Exit
    EndIf
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    While 1
    Sleep(100)
    WEnd

    [/autoit]
  • ListView_Werte addieren?

    • Stoani
    • 27. Oktober 2011 um 22:19

    War gerade dabei das erste umzuschreiben^^

    Trotzdem vielen Dank!

  • ListView_Werte addieren?

    • Stoani
    • 27. Oktober 2011 um 22:16

    Danke Raupi! für die Arbeit und die Zeit :)

  • ListView_Werte addieren?

    • Stoani
    • 27. Oktober 2011 um 22:02

    Halloo erstmal.
    Ich hab zwar ein Skript darüber gefunden, dieses allerdings nicht ganz verstanden.
    Bei dem Meinigen handelt es sich um ein Skript welches die Laufzeit eines Programmes Dokumentiert und auf Wunsch [Berechnen] die komplette Liste addiert als Ergebniss ausgibt.
    Muss wirklich kein fertiges Skript sein, ich möcht schließlich noch was drauß lernen :)

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <ListViewConstants.au3>
    #include <GuiListView.au3>
    #include <Array.au3>
    #region - GUI Create
    $GUI = GUICreate("", 411, 508, 315, 150,$WS_POPUP)
    GUISetBkColor(0xD7E4F2)
    $ListView1 = GUICtrlCreateListView("Time past ", 16, 16, 313, 473)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $Button1 = GUICtrlCreateButton("Beenden", 336, 16, 65, 233)
    $Button2 = GUICtrlCreateButton("Berechnen", 336, 248, 65, 241)
    GUISetState(@SW_SHOW)
    #endregion

    [/autoit][autoit][/autoit][autoit]

    GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")

    [/autoit][autoit][/autoit][autoit]

    Global $c
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit][autoit][/autoit][autoit]

    Case $Button1
    Exit
    Case $Button2
    $count = _GUICtrlListView_GetItemCount($ListView1)
    For $i = 0 To $count -1
    _GUICtrlListView_GetItemText($ListView1,0)
    Next
    GUICtrlCreateListViewItem($?,$ListView1)
    EndSwitch
    If ProcessExists("Calc.exe") = True Then
    $i = TimerInit()
    Do
    Sleep(100)
    Until ProcessExists("Calc.exe") = False
    $Test = TimerDiff($i)
    GUICtrlCreateListViewItem(Round($Test,2),$ListView1)
    EndIf

    [/autoit][autoit][/autoit][autoit]

    WEnd

    [/autoit][autoit][/autoit][autoit]

    Func WM_NCHITTEST($hWnd, $Msg, $wParam, $lParam)
    Local $iProc
    $iProc = DllCall("user32.dll", "int", "DefWindowProc", _
    "hwnd", $hWnd, "int", $Msg, "int", $wParam, "int", $lParam)
    If @error Then SetError(@error, 0, 0)
    $iProc = $iProc[0]
    If $iProc = $HTCLIENT Then Return $HTCAPTION
    Return $GUI_RUNDEFMSG
    EndFunc

    [/autoit]


    Das Problem ist nun, dass ich nicht weiß wie ich die, mit "_GUICtrlListView_GetItemText($ListView1,0)" erworbenen Daten addieren und darstellen kann.
    Darstellen wäre in diesem Fall einfach ein neues ListViewItem.


    Grüße Stoani

  • progandy hat Geburtstag!

    • Stoani
    • 12. Oktober 2011 um 09:27

    Herzlichen Glückwunsch ;)

    "Kollege" warst doch um einen Tag schneller als ich ;D Jedes Jahr wieder :P

    Feier ordentlich und Danke für deine peräzise und nett formulierte Hilfe! :thumbup:
    Solche Leute brauchts auch auf der Welt!


    Danke.

  • PortableApps - Launcher

    • Stoani
    • 9. Oktober 2011 um 19:14

    Funktioniert bei mir nicht.
    Ich hab nur eben den Code kopiert, aber da rührt sich rein gar nix(außer dem GUI Fenster)

    ....
    Vll solltest du dir ein ausgereifteres und brauchbareres Projekt suchen :)
    Ist echt nicht bös gemeint, aber ich wüsst nicht für was ich es brauchen könnte.


    Grüße
    Stoani

  • Abbruch Button der GUI funktioniert nicht

    • Stoani
    • 9. Oktober 2011 um 13:29

    Wo genau liegt nun das Problem:

    Bei Case $Button1 oder Zeile 34-35?

    Probier mal #RequireAdmin

  • Anfängerfrage bezüglich ShellExecute

    • Stoani
    • 8. Oktober 2011 um 23:54

    Aber nicht echt? ARRRGHHHHHH
    While 1
    KOPF -> TISCH
    Wend

  • Anfängerfrage bezüglich ShellExecute

    • Stoani
    • 8. Oktober 2011 um 22:43

    Ich bin echt am Ende meines Wissens....

    Tut mir Leid.

  • Anfängerfrage bezüglich ShellExecute

    • Stoani
    • 8. Oktober 2011 um 22:02

    Kannst du es über CMD Manuell starten?

  • Console: Exit. Skript läuft aber teilweise weiter... Bug?

    • Stoani
    • 8. Oktober 2011 um 22:00

    Danke das stimmt!

    Weißt du auch, warum das das Drucken nicht funktioniert?


    Grüße
    Stoani

  • Console: Exit. Skript läuft aber teilweise weiter... Bug?

    • Stoani
    • 8. Oktober 2011 um 20:02

    das ist richtig. doch da es sich komplett gleich verhält, liegt der schluß nahe, dass es das gleiche Problem ist....

  • Console: Exit. Skript läuft aber teilweise weiter... Bug?

    • Stoani
    • 8. Oktober 2011 um 19:55

    Compiled das gleiche Ergebnis....

  • Anfängerfrage bezüglich ShellExecute

    • Stoani
    • 8. Oktober 2011 um 19:33

    Soo.

    Dann halt über CMD.:

    Code
    $input = InputBox("Password-Abfrage Fifa12", "Bitte Passwort eingeben zum Starten eingeben:")
    $passwort = "123"
        If($input = $passwort) Then
            Run("cmd.exe")
    		WinWaitActive("C:\Windows\system32\cmd.exe")
    		ControlSend("C:\Windows\system32\cmd.exe","","","start set.exe"&"{Enter}")
    		WinClose("C:\Windows\system32\cmd.exe")
        ElseIf($input <> $passwort) Then
            Exit
    EndIf


    WICHTIG: Das Skript muss aus dem selben Ordner ausgeführt werden, in dem auch die set.exe liegt.


    Njahs

    Zitat von Njahs

    #RequireAdmin
    If IsAdmin() Then
    $input = InputBox("Password-Abfrage", "Bitte Passwort eingeben zum Starten eingeben:")
    $passwort = "xxx"
    If $input = $passwort Then
    Run("D:/Spiele/Fifa 12/Game/set.exe", "")
    Else
    Exit
    EndIf
    Endif

    Alles anzeigen

    Wenn du den ganzen Thread gelesen hättest, wäre dir aufgefallen, dass ich das schon lange vorgeschlagen habe.
    -> geht nicht.


    Grüße
    Stoani

  • Console: Exit. Skript läuft aber teilweise weiter... Bug?

    • Stoani
    • 8. Oktober 2011 um 18:51

    Servus liebe AutoIt's

    nachdem ich Probleme mit dem Ausdrucken eine ListView hatte und mir Blume(User) geholfen hatte, sah ich etwas merkwürdiges:

    >"C:\Program Files (x86).\Test.au3"
    >Exit code: 0 Time: 1.611

    Das Seltsame daran war eigentlich, dass der Code laut Console schon beendet, die GUI aber noch sichtbar und teilweise verwendbar war....

    Könnt ihr euch diesen Vorgang erklären?

    Hier der Code:

    C
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <File.au3>
    #include <GUiListview.au3>
    #RequireAdmin
     
    $Form1_1 = GUICreate("Rechner", 450, 446, 355, 157)
    $Berechnen = GUICtrlCreateButton("Berechnen", 216, 152, 225, 33)
    $Drucken = GUICtrlCreateButton("Drucken", 216, 8, 65, 41)
    $Mensur = GUICtrlCreateInput("z.B.: 650", 376, 16, 57, 21)
    $Buende = GUICtrlCreateInput("z.B.: 21", 376, 40, 57, 21)
    $Edit = GUICtrlCreateListView("Bund|Abstand zum Sattel", 8, 0, 202, 422)
    Dim $inhalt[1]
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    GUISetState()
     
     
    While 1
            $nMsg = GUIGetMsg()
            Switch $nMsg
    Case $GUI_EVENT_CLOSE
    						Exit
    Case $Berechnen
                            For $Bundzahl = 1 To GUICtrlRead($Buende)
     
                            Next
                            Local $a = GUICtrlRead($Mensur), $b
                            For $i = 1 To GUICtrlRead($Buende)
                                    If $i == 1 Then
                                            $b = ($a / (2 ^ (1 / 12)))
                                    Else
                                            $b = ($b / (2 ^ (1 / 12)))
                                    EndIf
     
                                    ReDim $inhalt[UBound($inhalt) + 1]
                                    $inhalt[$i - 1] = GUICtrlCreateListViewItem($i & "|" & Round($a - $b, 2), $Edit)
                            Next
     
    Case $Drucken
     
                            FileWrite(@ScriptDir & "\Output.html", StringFormat("<html>\n<head>\n\t<title>Druckausgabe</title>\n</head>\n<body>\n<table border=""1"">\n<tr>\n\t<td>Bund</td>\n\t<td>Abstand zum Sattel</td>\n</tr>\n"))
     
                            For $iX = 0 To _GUICtrlListView_GetItemCount($Edit) - 1
                                    FileWrite(@ScriptDir & "\Output.html", StringFormat("<tr>\n\t<td>%s</td>\n\t<td>%s</td>\n</tr>\n", _GUICtrlListView_GetItemText($Edit, $iX, 0), _GUICtrlListView_GetItemText($Edit, $iX, 1)))
                            Next
     
                            FileWrite(@ScriptDir & "\Output.html", StringFormat("</table>\n</body>\n</html>"))
     
                            _FilePrint(@ScriptDir & "\Output.html") ;Datei drucken (Funktion aus <File.au3>)
     
            EndSwitch
    WEnd
    Alles anzeigen


    Grüße aus Oberösterreich
    Stoani


    Ps.: Danke nochmals an Blume!

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™