Dann musst du entweder AdlibRegister verwenden oder mit HotKeySet arbeiten, falls es vom Benutzer gestartet werden soll.
P.S. Könnte das mal jemand verschieben? ![]()
Beiträge von name22
-
-
Was wird das wenn es fertig ist?
Und suchst du zufällig nach HotKeySet? -
Ich hab das Bild einmal in WIndows Fotogallerie geöffnet und einmal in meinem Script mit $Angle = 0 und sie sind gleich groß

Ich hatte grad nichts zu tun und hab dir die Bilder schonmal in ein quadratisches Format gebracht
-
Welches Programm?
[autoit]
Für eine Exe nimm doch den Run Befehl. Ich kann/will übrigens nicht alles für dich machen :D.
Dafür gibt es ja schließlich die Hilfe.
Und nimm statt FileSaveDialog einfachFileSelectFolder("Pfad auswählen", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")
[/autoit] -
[autoit]ZitatBei der Angabe von dem Path kann ich momentan nur eine Datei auswählen jedoch keinen path wie z.B. " D:\" angeben.
FileSaveDialog("Pfad auswählen", @ScriptDir, "All (*.*)", 18)
[/autoit]
[autoit]
zuFileSaveDialog("Pfad auswählen", @ScriptDir, "All (*.*)")
[/autoit] -
Zitat
Warum meckert der Compiler bei : $sCom &= $i & "|" ??
Ups Füg einfach vor der For Schleife noch $sCom = "" ein.
Die Variablennamen kannst du doch auch ändern du hast schließlich die Handles der GUI Controls so benannt nicht ich.
ZitatWarum &= ?!?
-
Oh nunja ich glaube mit meiner Methode funktioniert das nur bei Quadratischen Bildern.
Hier nochmal ein wenig überarbeitet:Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>$iGUIWidth = 400
[/autoit] [autoit][/autoit] [autoit]
$iGUIHeight = 400
$GUIColorBG = 0xFFFFFFFF
$Angle = 0
Global Const $Pi_Div_180 = 4 * ATan(1) / 180$hWnd = GUICreate("DoodleRotate", $iGUIWidth, $iGUIHeight)
[/autoit] [autoit][/autoit] [autoit]
GUISetState()_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
[/autoit] [autoit][/autoit] [autoit]
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($iGUIWidth, $iGUIHeight, $hGraphic)
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)_GDIPlus_GraphicsClear($hGraphic, $GUIColorBG)
[/autoit] [autoit][/autoit] [autoit]$hImage_Doodle = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\Doodle.png")
[/autoit] [autoit][/autoit] [autoit]
$iWidth = _GDIPlus_ImageGetWidth($hImage_Doodle) / 2
$iHeight = _GDIPlus_ImageGetHeight($hImage_Doodle) / 2
$iDiag = Sqrt(($iWidth) ^ 2 + ($iHeight) ^ 2)AdlibRegister("_ReDrawWithAngle", 20)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_GraphicsDispose($hBuffer)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_ImageDispose($hImage_Doodle)
_GDIPlus_Shutdown()
Exit
EndSwitch
WEndFunc _ReDrawWithAngle()
[/autoit] [autoit][/autoit] [autoit]
$Angle += 10$iX1 = $iGUIWidth / 2 + Cos(($Angle + 0 - 135) * $Pi_Div_180) * $iDiag
[/autoit] [autoit][/autoit] [autoit]
$iY1 = $iGUIHeight / 2 + Sin(($Angle + 0 - 135) * $Pi_Div_180) * $iDiag
$iX2 = $iGUIWidth / 2 + Cos(($Angle + 90 - 135) * $Pi_Div_180) * $iDiag
$iY2 = $iGUIHeight / 2 + Sin(($Angle + 90 - 135) * $Pi_Div_180) * $iDiag
$iX3 = $iGUIWidth / 2 + Cos(($Angle + 270 - 135) * $Pi_Div_180) * $iDiag
$iY3 = $iGUIHeight / 2 + Sin(($Angle + 270 - 135) * $Pi_Div_180) * $iDiag_GDIPlus_GraphicsClear($hBuffer, $GUIColorBG)
[/autoit]
_GDIPlus_DrawImagePoints($hBuffer, $hImage_Doodle, $iX1, $iY1, $iX2, $iY2, $iX3, $iY3)
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iGUIWidth, $iGUIHeight)
EndFunc ;==>_ReDrawWithAngle -
So ungefähr?
Spoiler anzeigen
[autoit]#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit]#region ### START Koda GUI section ###
[/autoit] [autoit][/autoit] [autoit]
$Form1 = GUICreate("Setup", 539, 366, 222, 245)
$Path = GUICtrlCreateInput("Path", 40, 64, 153, 25)
$Browse = GUICtrlCreateButton("Browse", 208, 64, 65, 25, 0)
$Drive = GUICtrlCreateCombo("", 336, 64, 153, 25)
$Comport = GUICtrlCreateCombo("COM", 40, 120, 153, 25)
$Radio_Full = GUICtrlCreateRadio("Full", 48, 240, 113, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Radio_Menu = GUICtrlCreateRadio("Menu", 48, 176, 113, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$Radio_Main = GUICtrlCreateRadio("Main", 48, 208, 113, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$OK = GUICtrlCreateButton("OK", 296, 280, 105, 41, 0)
$Anzahl = GUICtrlCreateInput("Anzahl", 336, 120, 153, 21)
$Time = GUICtrlCreateInput("Time", 336, 176, 153, 21)
$Abbrechen = GUICtrlCreateButton("Abbrechen", 128, 280, 105, 41, 0)
GUISetState(@SW_SHOW)
#endregion ### END Koda GUI section ###GUICtrlSetData($Drive, _GetDrives())
[/autoit] [autoit][/autoit] [autoit]
For $i = 1 To 20
$sCom &= $i & "|"
GUICtrlSetData($Comport, $sCom)
NextWhile 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $Abbrechen
Exit
Case $Browse
GUICtrlSetData($Path, FileSaveDialog("Pfad auswählen", @ScriptDir, "All (*.*)", 18))
Case $Radio_Full
$sFunktion = "/FULL"
Case $Radio_Menu
$sFunktion = "/MENU"
Case $Radio_Main
$sFunktion = "/MAIN"
Case $OK
$sDrive = GUICtrlRead($Drive)
$sPath = GUICtrlRead($Path)
$sComport = GUICtrlRead($Comport)
$iAnzahl = GUICtrlRead($Anzahl)
$iTime = GUICtrlRead($Time)
EndSwitch
WEndFunc _GetDrives()
[/autoit] [autoit][/autoit] [autoit]
$sCD_Drives = ""
$aDrives = DriveGetDrive("CDROM")For $i = 1 To $aDrives[0]
[/autoit] [autoit][/autoit] [autoit]
$sCD_Drives &= StringUpper($aDrives[$i]) & "|"
NextReturn $sCD_Drives
[/autoit] [autoit][/autoit] [autoit]
EndFunc ;==>_GetDrives$Version = ('V:X:30:2:E');Robotic Version Info Command
[/autoit]
$Calibration = ('C:X:30:2:E');Calibration Command
$Load = ('I:X:30:2:E');Get Input (load) Command
$Unload = ('A:X:30:2:E');Unload the Drive Command
Global $iCount = 1
Um Texte in ein GUI zu bringen verwende Labels (GUICtrlCreateLabel) und ohne Koda lernst du sowas eher.
-
"Automatic DVD Ripper". Ich bin mir nicht sicher, ob ich das unterstützen möchte

-
INetRead gibt es nicht mehr?
Also bei mir schon und ich hab die aktuellste Version.
-
Ist auf beiden PCs die selbe IE Version?
-
Dann solltest du wirklich mal deine Firewall überprüfen...
Oder versuch mal #RequireAdmin an den Anfang des Scripts zu setzen. -
BugFix meinst du so?
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
Dim $aTest[20]For $i = 0 To UBound($aTest) - 1
[/autoit] [autoit][/autoit] [autoit]
$aTest[$i] = $i
Next_ArrayDisplay($aTest)
[/autoit] [autoit][/autoit] [autoit]
_ArrayShift($aTest, 21)
_ArrayDisplay($aTest); #FUNCTION# ====================================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name...........: _ArrayShift
; Description ...: Verschiebt den Inhalt eines Array um die angegebene Zahl nach links oder rechts
; Syntax.........: _ArrayShift(ByRef $aShift, $iShift)
; Parameters ....: $aShift - Zu bearbeitendes Array
; $iShift - Integerzahl um die verschoben werden soll (Bei $iShift < 0 wird nach links verschoben)
; Return values .: Erfolg - 1
; Fehler - 0, setzt @error:
; |-1 - $aShift ist kein Array
; |-2 - $iShift ist keine Integerzahl
; Author ........: name22, clezZ
; ===============================================================================================================================
Func _ArrayShift(ByRef $aShift, $iShift)
If Not IsInt($iShift) Then Return SetError(-2, 0, 0)
If Not IsArray($aShift) Then Return SetError(-1, 0, 0)$iShift *= -1
[/autoit] [autoit][/autoit] [autoit]
Local $iSize = UBound($aShift)If $iShift < 0 Then
[/autoit] [autoit][/autoit] [autoit]
$iShift *= -1
$iShift = $iSize - $iShift
EndIf
If $iShift > $iSize Then
While $iShift > $iSize
$iShift -= $iSize
WEnd
EndIfLocal $aBuffer[$iSize]
[/autoit] [autoit][/autoit] [autoit]
For $i = 0 To $iSize - 1
$iNew = $i + $iShift
If $iNew > $iSize - 1 Then $iNew -= $iSize
$aBuffer[$i] = $aShift[$iNew]
Next$aShift = $aBuffer
[/autoit]
Return 1
EndFunc ;==>_ArrayShift
Das ist jetzt logischerweise um einiges schneller
-
Was hast du nicht verstanden?^^
Das mit dem Backbuffer?Spoiler anzeigen
Du erstellst aus deiner Grafik eine Bitmap mit BitmapCreateFromGraphics.
Danach erstellst du aus dieser Bitmap im Prinzip eine 2te Grafik die alles was hineingezeichnet wird auf die Bitmap überträgt (ImageGetGraphicsContext).
Alles was du nachher auf deiner Grafik haben möchtest zeichnest du in diese 2te (Bitmap)Grafik.
Zum Schluss zeichnest du einfach die Bitmap in die Originalgrafik mit GraphicsDrawImageRect.
Das mit WM_PAINT?Spoiler anzeigen
Mit GUIRegisterMsg($WM_PAINT, "WM_PAINT")
ordnest du dem WM_PAINT Event die Funktion "WM_PAINT" zu.
Ein WM_PAINT Event wird gesendet wenn das Fenster neu gezeichnet werden muss (z.B. Wenn ein anderes Fenster dein Fenster überdeckt).
Im Endeffekt heißt das: Die Bitmap wird jedesmal neu auf das Fenster gezeichnet, wenn es verdeckt wurde und somit ein Teil des gezeichneten nicht mehr sichtbar ist. -
Funktioniert denn das hier?
[autoit]MsgBox(0, "", BinaryToString(INetRead('https://addons.mozilla.org/de/firefox/addon/3829')))
[/autoit]
Kann es sein, dass das Syntax Highlighting hier mal wieder upgedatet werden muss?
-
Hier mal ein Backbuffer Beispiel:
Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>
#include <WindowsConstants.au3>Opt("MouseCoordMode", 2)
[/autoit] [autoit][/autoit] [autoit]$iGUIWidth = 400
[/autoit] [autoit][/autoit] [autoit]
$iGUIHeight = 400
$GUIColorBG = 0xFFFFFFFF
$iX = 200
$iY = 200
$iSpeedMax = 20$hWnd = GUICreate("Test", $iGUIWidth, $iGUIHeight)
[/autoit] [autoit][/autoit] [autoit]
GUISetState()_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hWnd)
[/autoit] [autoit][/autoit] [autoit]
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($iGUIWidth, $iGUIHeight, $hGraphic)
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
_GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)
_GDIPlus_GraphicsClear($hGraphic, $GUIColorBG)GUIRegisterMsg($WM_PAINT, "WM_PAINT")
[/autoit] [autoit][/autoit] [autoit]AdlibRegister("_ReDraw", 20)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
AdlibUnRegister()
_GDIPlus_GraphicsDispose($hGraphic)
_GDIPlus_GraphicsDispose($hBuffer)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_Shutdown()
Exit
Case $GUI_EVENT_RESTORE
WM_PAINT()
EndSwitch
WEndFunc _ReDraw()
[/autoit] [autoit][/autoit] [autoit]
$aPosMouse = MouseGetPos()$iDiffX = $iX - $aPosMouse[0]
[/autoit] [autoit][/autoit] [autoit]
If $iDiffX < 0 Then $iDiffX *= -1
$iDiffY = $iY - $aPosMouse[1]
If $iDiffY < 0 Then $iDiffY *= -1$iSpeedX = $iDiffX / 10
[/autoit] [autoit][/autoit] [autoit]
If $iSpeedX > $iSpeedMax Then $iSpeedX = $iSpeedMax
$iSpeedY = $iDiffY / 10
If $iSpeedY > $iSpeedMax Then $iSpeedY = $iSpeedMaxIf $iX < $aPosMouse[0] Then
[/autoit] [autoit][/autoit] [autoit]
$iX += $iSpeedX
ElseIf $iX > $aPosMouse[0] Then
$iX -= $iSpeedX
EndIf
If $iY < $aPosMouse[1] Then
$iY += $iSpeedY
ElseIf $iY > $aPosMouse[1] Then
$iY -= $iSpeedY
EndIf_GDIPlus_GraphicsClear($hBuffer, $GUIColorBG)
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsFillRect($hBuffer, $iX - 25, $iY - 25, 50, 50)
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iGUIWidth, $iGUIHeight)
EndFunc ;==>_ReDrawFunc WM_PAINT()
[/autoit]
_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $iGUIWidth, $iGUIHeight)
EndFunc
Man braucht eigentlich kein WM_PAINT zu registrieren wenn das sowieso alle paar Millisekunden neu gezeichnet wird.
-
Ich hab dafür mal ein Beispiel geschrieben. Zu finden in diesem Anhang
-
Dann machs so, ist eh einfacher:
Spoiler anzeigen
[autoit]$hGUI = GUICreate("", 120, 60)
[/autoit] [autoit][/autoit] [autoit]
$hInput = GUICtrlCreateInput("", 10, 10, 100, 20)
$hButton = GUICtrlCreateButton("OK", 10, 35, 100, 20)
GUISetState()While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
Exit
Case $hButton
GUICtrlSetData($hInput, _Crypt(GUICtrlRead($hInput)))
EndSwitch
WEndFunc _Crypt($sString)
[/autoit] [autoit][/autoit] [autoit]
; Ja ich weiß, mit einem 2D-Array und einer For-Next Schleife wäre es 200 mal kürzer. Aber ich wollte es nicht unnötig kompliziert machen.
$sString = StringReplace($sString, "a", "123")
$sString = StringReplace($sString, "b", "y")
$sString = StringReplace($sString, "c", "x")
$sString = StringReplace($sString, "d", "w")
$sString = StringReplace($sString, "e", "v")
$sString = StringReplace($sString, "f", "u")
$sString = StringReplace($sString, "g", "t")
$sString = StringReplace($sString, "h", "s")
$sString = StringReplace($sString, "i", "r")
$sString = StringReplace($sString, "j", "q")
$sString = StringReplace($sString, "k", "p")
$sString = StringReplace($sString, "l", "o")
$sString = StringReplace($sString, "m", "n")
$sString = StringReplace($sString, "n", "m")
$sString = StringReplace($sString, "o", "l")
$sString = StringReplace($sString, "p", "k")
$sString = StringReplace($sString, "q", "j")
$sString = StringReplace($sString, "r", "i")
$sString = StringReplace($sString, "s", "h")
$sString = StringReplace($sString, "t", "g")
$sString = StringReplace($sString, "u", "f")
$sString = StringReplace($sString, "v", "e")
$sString = StringReplace($sString, "w", "d")
$sString = StringReplace($sString, "x", "c")
$sString = StringReplace($sString, "y", "b")
$sString = StringReplace($sString, "z", "a")
$sString = StringReplace($sString, "&", "&")Return _CleanUp($sString)
[/autoit] [autoit][/autoit] [autoit]
EndFunc ;==>_CryptFunc _CleanUp($sString)
[/autoit]
Return StringRegExpReplace($sString, "\[(\w+?)\]", "\1")
EndFunc ;==>_CleanUp
Ich würde RegExp nur verwenden, wenn man es braucht
-
Enferne die Zeile:
[autoit]$sString = _StringReplace($sString, "&", "&")
[/autoit]
Sie bringt dir doch sowieso nichts
-
autoBert: Dein Script zeigt aber nur ein gefundenes Laufwerk an

Hier die überarbeitete ComboBox Version:Spoiler anzeigen
[autoit]#include <GUIConstantsEx.au3>
[/autoit] [autoit][/autoit] [autoit]$CDTest = GUICreate("CDTest", 139, 120, 192, 124)
[/autoit] [autoit][/autoit] [autoit]
$CD_Drives = GUICtrlCreateCombo("", 5, 5, 120)
GUISetState()$sCD_Drives = ""
[/autoit] [autoit][/autoit] [autoit]
$aDrives = DriveGetDrive("CDROM")For $i = 1 To $aDrives[0]
[/autoit] [autoit][/autoit] [autoit]
$sCD_Drives &= StringUpper($aDrives[$i]) & "|"
NextGUICtrlSetData($CD_Drives, $sCD_Drives, $aDrives[1])
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit]
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd