Sorry,
sind die in Pixel/mm/?
Sorry,
sind die in Pixel/mm/?
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 ![]()
Erstmal:
Danke fürs Lesen ![]()
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.
Danke für die Mühe!
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! ![]()
Grüße
Stoani
Ps.: Danke nochmals ![]()
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)
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
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:
HotKeySet("!n","_a")
Func _a()
$coord = PixelSearch(560,262,1062,732,0x000000)
If Not @error Then
MsgBox(0, "X and Y are:", $coord[0] & "," & $coord[1])
EndIf
EndFunc
while 1
sleep(100)
WEnd
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.
#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
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>
$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)
;Damit kein , in AutoIt gelangt!====================================================================================
HotKeySet("{,}","Komma")
HotKeySet("{NUMPADDOT}","Komma")
Func Komma()
Send(".")
EndFunc
;===================================================================================================================
_Test()
Func _Test()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
Exit
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
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 ![]()
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
While 1
Sleep(100)
WEnd
War gerade dabei das erste umzuschreiben^^
Trotzdem vielen Dank!
Danke Raupi! für die Arbeit und die Zeit ![]()
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 ![]()
#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
GUIRegisterMsg($WM_NCHITTEST, "WM_NCHITTEST")
[/autoit][autoit][/autoit][autoit]Global $c
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
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
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
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
Herzlichen Glückwunsch ![]()
"Kollege" warst doch um einen Tag schneller als ich ;D Jedes Jahr wieder ![]()
Feier ordentlich und Danke für deine peräzise und nett formulierte Hilfe!
Solche Leute brauchts auch auf der Welt!
Danke.
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
Wo genau liegt nun das Problem:
Bei Case $Button1 oder Zeile 34-35?
Probier mal #RequireAdmin
Aber nicht echt? ARRRGHHHHHH
While 1
KOPF -> TISCH
Wend
Ich bin echt am Ende meines Wissens....
Tut mir Leid.
Kannst du es über CMD Manuell starten?
Danke das stimmt!
Weißt du auch, warum das das Drucken nicht funktioniert?
Grüße
Stoani
das ist richtig. doch da es sich komplett gleich verhält, liegt der schluß nahe, dass es das gleiche Problem ist....
Compiled das gleiche Ergebnis....
Soo.
Dann halt über CMD.:
$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.
Alles anzeigen#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
Wenn du den ganzen Thread gelesen hättest, wäre dir aufgefallen, dass ich das schon lange vorgeschlagen habe.
-> geht nicht.
Grüße
Stoani
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:
#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!