Natürlich ändert sich die PID jedes Mal wenn du die Datei startest, aber das muss dich nicht daran hindern die herauszufinden.
Wenn du ein CUI Programm mit Run von deinem Script aus startest (du musst als letzten Parameter von Run 0x2 verwenden) gibt Run die PID des gestarteten Prozesses zurück. Die PID kannst du nun mit StdoutRead verwenden um alles auszulesen was normalerweise in die Konsole des Programms geschrieben wird.
Das wäre die Lösung deines Problems und wurde hier bereits mehrfach in anderer Form geschrieben ;). Und deine Beiträge sind wirklich schwer zu verstehen, nimm dir doch ein bisschen mehr Zeit sie zu formulieren, dann können wir dir schneller helfen (das ist wirklich nicht böse gemeint).
Beiträge von name22
-
-
Wenn ich mich nicht irre, hat Freeman in diesem Beitrag geschrieben, dass er der Inhaber eines Mafia-Spiels ist.
Es handelt sich hierbei also vermutlich um einen Spielebot dafür, der laut den Regeln untersagt ist. Ob ihm das Spiel nun wirklich gehört oder nicht, lässt sich im Moment schwer nachprüfen. Aber selbst wenn das der Fall sein sollte wird es trotzdem durch unsere Forenegeln untersagt.
Ich denke das Thema sollte erstmal auf Eis gelegt werden bis entweder ein Mod sich entscheidet den Thread zu schließen oder Freeman sich zu dieser Situation äußert. -
Zwischen der Version und einer mit _Ispressed liegt aber gar kein so großer Unterschied ^^.
-
Normalerweise benutzt man um sinnvollen Text zu erhalten die WM_CHAR Msg statt der WM_KEYDOWN Msg. Allerdings scheint die Registrierung dieser Nachricht bei einer AutoIt GUI nicht viel zu bringen. Ich weiß leider nicht wieso :S.
-
Sowas kann ich gerade gut gebrauchen :). Ich werd's gleich mal testen...
Edit: Habs nun getestet. Es funktioniert alles tadellos
. -
[autoit]
If StringRegExp($sString, $aChars[$i][0]) = 1 Then
[/autoit]ist meiner Meinung nach unnötig.
-
Du verwendest die Funktion StringRegExpReplace nicht korrekt soweit ich es erkennen kann:
Die Funktion gibt kein Array zurück, also macht die ungarische Notation bei "$aTest" keinen Sinn.
$sString wird in der For Schleife kein einziges Mal verändert. Der Inhalt bleibt gleich weil StringRegExpReplace gar nicht auf die Variable zugreift (das würde nicht mal funktionieren), StringRegExpReplace gibt den bearbeiteten String zurück, also musst du diesen Wert $sString zuweisen wenn du einen Effekt sehen willst.
Das Local Statement vor deiner Variable macht auf 2 Arten keinen Sinn. Erstens kannst du keine lokale Variable außerhalb einer Funktion deklarieren. Zweitens haben Deklarationen nichts in Schleifen verloren (einmal reicht ;)).ZitatIch habe mal gehört in C prüft man auf Sonderzeichen durch den Dezimalwert der ASCII-Tabelle. Geht sowas in AutoIt auch? Hat jemand einen Tipp für mich?
Das kann man machen, aber es bringt relativ wenig.
-
Syntax highlighting funktioniert nicht korrekt wenn man alle neuen Features verwendet (kein wirkliches Problem, aber mir geht es darum dass die Version nicht halb so fertig war wie andere Betas).
Au3Check muss komplett deaktiviert werden wenn man ein Script ausführen will in dem Funktionspointer in Variablen gespeichert werden oder Variablen ohne $ deklariert werden. Zumindest musste ich das tun um ein Script starten zu können. -
Das war auch keine vollständige Beta meiner Meinung nach. Es war lediglich ein Archiv vorhanden, von einem Beta installer fehlte jede Spur. Außerdem sind Scite und Au3Check praktisch inkompatibel mit dieser Version.
Es war mehr eine Alpha als eine Beta finde ich. Trotzdem schade, dass diese Entwicklung nun tot zu sein scheint. -
-
Es wird vehement "behauptet", dass es auf Win7 x64 funktioniert weil es das nun mal tut ;). Wenn bei uns allen das Script seine gewünschte Funktion erfüllt können wir nicht behaupten es gäbe ein Problem.
Ich weiß nicht ob man das direkt als Bug bezeichnen kann. Immerhin funktioniert diese Funktion bei so gut wie allen Usern perfekt. Da alle die selbe Version von AutoIt haben müsste es einen Unterschied zwischen den Systemen geben der diese Überprüfung verhindert.
Aber ohne zu wissen was das verursacht kann man ja leider noch nicht mal nach einem Bug suchen (sofern es einen gibt)... -
-
Ich kann auf den ersten Blick keinen Fehler erkennen. Ein lauffähiges Script wäre ganz praktisch...
-
Das ist etwas aufwändiger. Zumindest für die Drehung der Bilder benötigst du eine Matrix, der Rest ist simpel.
Wenn ich dich richtig verstanden habe, dann sollte das hier funktionieren:Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]$sPath_PicBG = FileOpenDialog("Select Background Picture", "", "JPG (*.jpg;*.jpeg)")
[/autoit] [autoit][/autoit] [autoit]
If @error Then Exit
$sPath_PicOver = FileOpenDialog("Select Overlay Picture", "", "JPG (*.jpg;*.jpeg)")
If @error Then Exit
$sPath_PicFrame = FileOpenDialog("Select Frame Picture", "", "PNG (*.png)")
If @error Then Exit
$sPath_Save = FileSaveDialog("Save Path", "", "JPG (*.jpg;*.jpeg)")
If @error Then Exit
$iAngle = InputBox("Angle", "Picture Angle (Degree):", 0, Default, 200, 120)_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hImage_BG = _GDIPlus_ImageLoadFromFile($sPath_PicBG)
[/autoit] [autoit][/autoit] [autoit]
$hImage_Over = _GDIPlus_ImageLoadFromFile($sPath_PicOver)
$hImage_Frame = _GDIPlus_ImageLoadFromFile($sPath_PicFrame)$aDim_BG = _GDIPlus_ImageGetDimension($hImage_BG)
[/autoit] [autoit][/autoit] [autoit]
$aDim_Over = _GDIPlus_ImageGetDimension($hImage_Over)
$aDim_Frame = _GDIPlus_ImageGetDimension($hImage_Frame)$hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage_BG)
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2)_GDIPlus_GraphicsTranslateTransform($hGraphics, $aDim_BG[0] / 2, $aDim_BG[1] / 2)
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsRotateTransform($hGraphics, $iAngle)
_GDIPlus_GraphicsTranslateTransform($hGraphics, -$aDim_BG[0] / 2, -$aDim_BG[1] / 2)
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage_Over, $aDim_BG[0] / 2 - $aDim_Over[0] / 2, $aDim_BG[1] / 2 - $aDim_Over[1] / 2, $aDim_Over[0], $aDim_Over[1])
_GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage_Frame, $aDim_BG[0] / 2 - $aDim_Over[0] / 2, $aDim_BG[1] / 2 - $aDim_Over[1] / 2, $aDim_Over[0], $aDim_Over[1])_GDIPlus_ImageSaveToFile($hImage_BG, $sPath_Save)
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_GraphicsDispose($hGraphics)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
_GDIPlus_ImageDispose($hImage_BG)
_GDIPlus_ImageDispose($hImage_Over)
_GDIPlus_ImageDispose($hImage_Frame)
_GDIPlus_Shutdown()#region GDIP.au3
[/autoit] [autoit][/autoit] [autoit]
; #FUNCTION# ====================================================================================================================
; Name...........: _GDIPlus_ImageGetDimension
; Description ...: Gets the width and height of an image
; Syntax.........: _GDIPlus_ImageGetDimension($hImage)
; Parameters ....: $hImage - Pointer to an Image object
; Return values .: Success - Array that contains the rectangle coordinates and dimensions:
; |[0] - Width of the image
; |[1] - Height of the image
; Failure - -1 and either:
; |@error and @extended are set if DllCall failed
; |$GDIP_STATUS contains a non zero value specifying the error code
; Remarks .......: None
; Related .......: None
; Link ..........; @@MsdnLink@@ GdipGetImageDimension
; Example .......; No
; ===============================================================================================================================
Func _GDIPlus_ImageGetDimension($hImage)
Local $aSize[2], $aResult$aResult = DllCall($ghGDIPDll, "uint", "GdipGetImageDimension", "hwnd", $hImage, "float*", 0, "float*", 0)
[/autoit] [autoit][/autoit] [autoit]
If @error Then Return SetError(@error, @extended, -1)$GDIP_STATUS = $aResult[0]
[/autoit] [autoit][/autoit] [autoit]
If $GDIP_STATUS Then Return -1$aSize[0] = $aResult[2]
[/autoit] [autoit][/autoit] [autoit]
$aSize[1] = $aResult[3]
Return $aSize
EndFunc ;==>_GDIPlus_ImageGetDimension; #FUNCTION# ====================================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name...........: _GDIPlus_GraphicsTranslateTransform
; Description ...: Updates a Graphics object's world transformation matrix with the product of itself and a translation matrix
; Syntax.........: _GDIPlus_GraphicsTranslateTransform($hGraphics, $nDX, $nDY[, $iOrder = 0])
; Parameters ....: $hGraphics - Pointer to a Graphics object
; $nDX - Horizontal component of the translation
; $nDY - Vertical component of the translation
; $iOrder - Order of matrices multiplication:
; |0 - The translation matrix is on the left
; |1 - The translation matrix is on the right
; Return values .: Success - True
; Failure - False and either:
; |@error and @extended are set if DllCall failed
; |$GDIP_STATUS contains a non zero value specifying the error code
; Remarks .......: None
; Related .......: None
; Link ..........; @@MsdnLink@@ GdipTranslateWorldTransform
; Example .......; No
; ===============================================================================================================================
Func _GDIPlus_GraphicsTranslateTransform($hGraphics, $nDX, $nDY, $iOrder = 0)
Local $aResult = DllCall($ghGDIPDll, "uint", "GdipTranslateWorldTransform", "hwnd", $hGraphics, "float", $nDX, "float", $nDY, "int", $iOrder)If @error Then Return SetError(@error, @extended, False)
[/autoit] [autoit][/autoit] [autoit]
$GDIP_STATUS = $aResult[0]
Return $aResult[0] = 0
EndFunc ;==>_GDIPlus_GraphicsTranslateTransform; #FUNCTION# ====================================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name...........: _GDIPlus_GraphicsRotateTransform
; Description ...: Updates the world transformation matrix of a Graphics object with the product of itself and a rotation matrix
; Syntax.........: _GDIPlus_GraphicsRotateTransform($hGraphics, $nAngle[, $iOrder = 0])
; Parameters ....: $hGraphics - Pointer to a Graphics object
; $nAngle - The angle, in degrees, of rotation
; $iOrder - Order of matrices multiplication:
; |0 - The rotation matrix is on the left
; |1 - The rotation matrix is on the right
; Return values .: Success - True
; Failure - False and either:
; |@error and @extended are set if DllCall failed
; |$GDIP_STATUS contains a non zero value specifying the error code
; Remarks .......: None
; Related .......: _GDIPlus_GraphicsMultiplyTransform
; Link ..........; @@MsdnLink@@ GdipRotateWorldTransform
; Example .......; No
; ===============================================================================================================================
Func _GDIPlus_GraphicsRotateTransform($hGraphics, $nAngle, $iOrder = 0)
Local $aResult = DllCall($ghGDIPDll, "uint", "GdipRotateWorldTransform", "hwnd", $hGraphics, "float", $nAngle, "int", $iOrder)If @error Then Return SetError(@error, @extended, False)
[/autoit]
$GDIP_STATUS = $aResult[0]
Return $aResult[0] = 0
EndFunc ;==>_GDIPlus_GraphicsRotateTransform
#endregion -
Versuch mal kurz mein Script, das ich oben gepostet habe, da wird der Rahmen mit der Größe des Hintergrundbildes gezeichnet. Ich hatte auch schon Probleme mit der GraphicsDrawImage Funktion.
-
Wenn im Endergebnis Transparente Bereiche sind und du es als JPG speicherst, dann werden die Breiche einfach ausgeschwärzt. Wenn du das verhindern willst speicher es als PNG wie Alcros vorhin geschrieben hat.

-
Das sollte ungefähr deinen Vorstellungen entsprechen, muss aber wahrscheinlich noch angepasst/ausgebaut werden.
Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]$sPath_PicBG = FileOpenDialog("Select Background Picture", "", "JPG (*.jpg;*.jpeg)")
[/autoit] [autoit][/autoit] [autoit]
If @error Then Exit
$sPath_PicFrame = FileOpenDialog("Select Frame Picture", "", "PNG (*.png)")
If @error Then Exit
$sPath_Save = FileSaveDialog("Save Path", "", "JPG (*.jpg;*.jpeg)")
If @error Then Exit_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hImage_BG = _GDIPlus_ImageLoadFromFile($sPath_PicBG)
[/autoit] [autoit][/autoit] [autoit]
$hImage_Frame = _GDIPlus_ImageLoadFromFile($sPath_PicFrame)$iWidth = _GDIPlus_ImageGetWidth($hImage_BG)
[/autoit] [autoit][/autoit] [autoit]
$iHeight = _GDIPlus_ImageGetHeight($hImage_BG)$hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage_BG)
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_GraphicsDrawImageRect($hGraphics, $hImage_Frame, 0, 0, $iWidth, $iHeight)
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_ImageSaveToFile($hImage_BG, $sPath_Save)
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_GraphicsDispose($hGraphics)
[/autoit]
_GDIPlus_ImageDispose($hImage_BG)
_GDIPlus_ImageDispose($hImage_Frame)
_GDIPlus_Shutdown()Edit: Da war jemand schneller :P... Meine Version streckt den Rahmen über das ganze Bild, die von Alcros orientiert sich an der Größe des Rahmens. Wenn dein Rahmen genau die selben Ausmaße hat wie das Bild, dann macht es keinen Unterschied was du benutzt.

-
Dann hau rein :P. Du kannst ja, bis chess sein Script postet, mal anfangen dich mit TCP auseinanderzusetzen.
In der Hilfe zu den ganzen TCP... Befehlen findest du übrigens 2 Beispielscripte (1 Server und 1 Client).
Falls du nicht weiterkommst kannst du hier ja jederzeit fragen ;).Ich würde anfangen damit, lokal (dein PC ist gleichzeitig Server [IP:127.0.0.1] und Client) eine Verbindung zwischen 2 AutoIt Scripten aufzubauen. Danach verschickst du Daten in beide Richtungen. Dann machst du dich daran Befehle aus den Daten herauszulesen und sie auszuführen (zum Beispiel eine MsgBox vom anderen Script aus anzeigen lassen).
Dafür brauchst du dann u.A. folgende Befehle:Spoiler anzeigen
[autoit];TCP Service starten/stoppen:
[/autoit] [autoit][/autoit] [autoit]
TCPStartup
TCPShutdown;Bei Server auf Verbindung warten:
[/autoit] [autoit][/autoit] [autoit]
TCPListen
;und Akzeptieren:
TCPAccept;Vom Client zum Server verbinden:
[/autoit] [autoit][/autoit] [autoit]
TCPConnect;Daten senden:
[/autoit]
TCPSend
;und empfangen:
TCPRecv -
Ich würde eher den Haupt PC als Server wählen und die Clienten so konfigurieren, dass sie eine Verbindung zum Server aufbauen sobald soe online sind. Ansonsten musst du zu allen PCs die online sein könnten in regelmäßigen Abständen Verbindungsversuche starten um herauszufinden ob sie laufen oder nicht. Die Verbindung kann ja die ganze Zeit aktiv sein, deshalb müssen ja nicht ununterbrochen Daten gesendet werden ;). Und da es sich um ein lokales Netzwerk handelt (davon gehe ich aus?) brauchst du kein dynDNS o.Ä. sondern nur die IP des Haupt PCs. Die darf allerdings dann nicht dynamisch zugewiesen werden sondern muss immer gleich bleiben.
-
Zitat
Oh, wenn ich in die falsche Sektion poste, tuts mir leid... dachte wegen den Fragen (siehe post) wäre ich hier richtig...
Das hängt davon ab ob du bereit bist Eigeninitiative zu zeigen ;).
Du kannst einen Server vom Client aus steuern und umgekehrt. TCP braucht nur eine Verbindung um in beide Richtungen Daten verschicken zu können (sogar zeitgleich, wenn auch nicht unbedingt mit AutoIt).
Es ging mir eher um den Verbindungsaufbau. Die Stelle dessen Adresse bekannt ist sollte man als Server wählen, weil der Aufbau immer von einer Stelle gestartet wird die aber die Adresse der Gegenstelle dafür braucht. Der Server wartet nur bis sich etwas verbindet, die Adressen der Clienten können ihm egal sein.
Außerdem muss der Server natürlich bereits laufen wenn der Client sich verbinden will.Edit: @chess Dann poste es doch ^^. Ich hab auch noch ein Script in der Art rumliegen, es aber nie ausgiebig getestet. Im Grunde könnte man jedes chatartige TCP Script zu so etwas umfunktionieren...