Beiträge von UEZ
-
-
Bin auch wieder dabei.
Letztes Jahr war es ein Zweikampf mit UEZ den ich knapp gewonnen habe.
Leider waren wir auch nur zu zweit
@Yaerox
bitte nicht nur wie letztes Jahr anmelden auch tippen
Diesmal kriege ich dich!

-
Bald fängt die neue Saison an und wer mitmachen möchte, einfach auf Kicktipp registrieren und unter http://www.kicktipp.de/autoit15-16/?tid=11686934 Mitglied werden.
Ich hoffe auf zahlreiche Teilnehmer.
PS: bitte auch KONTINUIERLICH mittippen
PSS: wer sich anmeldet und nicht tippt, wird "gekickt"
-
Das ist nicht einfach zu beantworten, wo das Problem liegen könnte.
Vielleicht hast du Leerzeichen in $kopier_quelle oder irgendwas stimmt nicht mit dem Inhalt der Variable.
Kannst ja dies probieren:
-
So funzt's auch
AutoIt
Alles anzeigen#include <GDIPlus.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WinAPI.au3> #include <WindowsConstants.au3> Opt('GUIOnEventMode', 1) $sPath = 'c:\Program Files (x86)\AutoIt3\Examples\GUI\' _GDIPlus_Startup() $hGui = GUICreate('Test', 800, 600) GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui') GUISetBkColor(0xF0F0F0) GUICtrlCreatePic($sPath & "msoobe.jpg", 0, 0, 800, 600) GUICtrlSetState(-1, $GUI_DISABLE) $idPic = GUICtrlCreatePic('', 80, 60, 440, 440) GUISetState(@SW_SHOW, $hGui) $hPic = GUICtrlGetHandle($idPic) $aCtrlSize = WinGetClientSize($hPic) $hBitmap = _GDIPlus_BitmapCreateFromScan0($aCtrlSize[0], $aCtrlSize[1]) $hGfxCtxt = _GDIPlus_ImageGetGraphicsContext($hBitmap) $hImage = _GDIPlus_BitmapCreateFromFile($sPath & 'Torus.png') _GDIPlus_GraphicsDrawImageRect($hGfxCtxt, $hImage, 0, 0, $aCtrlSize[0], $aCtrlSize[1]) $hBMP = _GDIPlus_BitmapCreateDIBFromBitmap($hBitmap) _WinAPI_DeleteObject(GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hBMP)) _WinAPI_DeleteObject($hBMP) MsgBox(0, 'Test', 'Nach dem schließen dieser MsgBox soll das große Bild Torus.png weg sein' & @CR & 'und nur noch das kleine Bild angezeigt werden.') _GDIPlus_GraphicsClear($hGfxCtxt, 0x00000000) _GDIPlus_GraphicsDrawImageRect($hGfxCtxt, $hImage, 0, 0, $aCtrlSize[0] / 2, $aCtrlSize[1] / 2) $hBMP = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap) _WinAPI_DeleteObject(GUICtrlSendMsg($idPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hBMP)) _WinAPI_DeleteObject($hBMP) _WinAPI_RedrawWindow($hGui, 0, 0, BitOR($RDW_INVALIDATE, $RDW_ALLCHILDREN)) WinWaitClose($hGui) _GDIPlus_GraphicsDispose($hGfxCtxt) _GDIPlus_BitmapDispose($hBitmap) _GDIPlus_BitmapDispose($hImage) _GDIPlus_Shutdown() Exit Func _CloseGui() GUIDelete($hGui) EndFunc
Getestet auf Win8 x64. -
Man sollte i.d.R. nie Global in Funktionen verwenden!
AutoIt
Alles anzeigen#include <File.au3> #include <FileConstants.au3> Global $BotSelected, $dir, $folder = "c:\temp" ;$folder = @AppDataDir & "\ClashSA Loader\Download\files\" _CountFiles() Global $FileOpenArray[$dir[0]] Global $FilePathArray[$dir[0]] Global $FileReadArray[$dir[0]] Global $BotInfoLines[$dir[0]][5] Global $BotSelected Global $FileOpenArray[$dir[0]] Global $FilePathArray[$dir[0]] Global $FileReadArray[$dir[0]] Global $BotInfoLines[$dir[0]][5] _ReadFiles() Func _CountFiles() Global $dir = _FileListToArray($folder, "*.edx", 1) MsgBox(0, "", $dir[0]) If @error = 1 Then MsgBox(16, "Error", "Folder not found or invalid" & @CR & @CR & "Please contact an admin of ClashSA", 10);Botfiles Ordner fehlt Exit EndIf If @error = 4 Then MsgBox(16, "Error", "No File(s) Found" & @CR & @CR & "Please contact an admin of ClashSA", 10);Botfiles Dateien fehlen Exit EndIf EndFunc ;==>_CountFiles Func _ReadFiles() For $x = 0 To $dir[0] - 1 Step 1; zählt bis anzahl der files in ordner X $FilePathArray[$x] = $folder & "\" & $x & ".edx"; erstellt $X Pfad Dateien mit [$X].edx Namen $FileOpenArray[$x] = FileOpen($FilePathArray[$x], $FO_READ); Öffnet Datei $X und speichert sie als Open session If $FileOpenArray[$x] = -1 Then MsgBox($MB_SYSTEMMODAL, "File not found", "An error occurred when reading the file " & $FilePathArray[$x] & "." & @CR & @CR & "Please contact an admin of ClashSA", 10) Return False EndIf ConsoleWrite(UBound($FileReadArray) - 1 & @CRLF) For $h = 0 To 4 Step 1;normal To 3 aber wegen der 5. Zeile $hAdd = $h + 1 $FileReadArray[$h] = FileReadLine($FileOpenArray[$x], $hAdd) $BotInfoLines[$x][$h] = $FileReadArray[$h] ;~ MsgBox(0, $count, $BotInfoLines[$x][$h] & "[" & $x & "]" & "[" & $h & "]" & @CR & $FilePathArray[$x]);only for debugging Next FileClose($FileOpenArray[$x]) $h = 0 Next _ArrayDisplay($BotInfoLines, "bot") EndFunc ;==>_ReadFilesIch sehe ein Array mit dem Inhalt der *.edx Dateien. Ich habe nur den Pfad auf C:\Temp umgelegt.
-
Was gibt dir denn
AutoItConsoleWrite(UBound($FileReadArray) - 1 & @CRLF) For $h = 0 To 4 Step 1;normal To 3 aber wegen der 5. Zeile $hAdd = $h + 1 $FileReadArray[$h]= FileReadLine($FileOpenArray[$x], $hAdd) $BotInfoLines[$x][$h] = $FileReadArray[$h] ;~ MsgBox(0, $count, $BotInfoLines[$x][$h] & "[" & $x & "]" & "[" & $h & "]" & @CR & $FilePathArray[$x]);only for debugging Nextaus?
Btw, die Begriffe "Bot*" sind nicht besonderns geschickt gewählt.
-
Du kannst auch das Picture Control nehmen oder machst den Button "Flat", wenn du den Button nicht als Button nehmen willst.
Dazu müsste mein Code umgeschrieben werden, aber Oscar ist ja eingesprungen, so dass du seine UDF nehmen kannst.
-
Wenn du tranparente PNG Bilder als Buttons verwenden möchtest, würde ich dir eher empfehlen die PNGs in den Button zu kopieren, um einfach das Neuzeichen zu vermeiden.
So was zum Beispiel:
AutoIt
Alles anzeigen#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <GDIPlus.au3> Global Const $hGUI = GUICreate("Test", 300, 250) GUISetBkColor(0x808080) Global Const $idButton = GUICtrlCreateButton("", 55, 20, 193, 184, $BS_BITMAP) SendImageToBtnCtrl("c:\Program Files (x86)\AutoIt3\Beta\Examples\GUI\Torus.png", $idButton) GUISetState() Do Switch GUIGetMsg() Case $GUI_EVENT_CLOSE GUIDelete() Exit EndSwitch Until False Func SendImageToBtnCtrl($sFile, $iCtrl, $bDeleteBmp = True) If Not FileExists($sFile) Then Return SetError(1, 0, 0) _GDIPlus_Startup() Local Const $hImage = _GDIPlus_ImageLoadFromFile($sFile) If @error Then Return SetError(2, 0, 0) Local Const $hBitmapGDI = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage) _WinAPI_DeleteObject(_SendMessage(GUICtrlGetHandle($iCtrl), $BM_SETIMAGE, $IMAGE_BITMAP, $hBitmapGDI)) _GDIPlus_ImageDispose($hImage) _GDIPlus_Shutdown() If $bDeleteBmp Then _WinAPI_DeleteObject($hBitmapGDI) Return 1 EndIf Return $hBitmapGDI EndFuncFunzt ab Vista. Für WinXP muss man einen Workaround machen, damit die Hintergrundfarbe des transparenten Bildes nicht schwarz ist.
-
Von hier: https://www.autoitscript.com/forum/topic/15…comment-1149008
Code
Alles anzeigenMessageBox("Text", "Caption", 64) For $i = 0 To 10 ConsoleWrite("Spleep" & @CRLF) Sleep(1000) Next Exit Func MessageBox($sText, $sCaption, $uType, $hWnd = 0) Local $dwOpcodeSize = 50 Local $dwTextSize = StringLen($sText) + 1 Local $dwCaptionSize = StringLen($sCaption) + 1 Local $dwSize = $dwOpcodeSize + $dwTextSize + $dwCaptionSize Local $pAddress = VirtualAlloc(0, $dwSize, 0x00001000, 0x40) ;MEM_COMMIT, PAGE_EXECUTE_READWRITE Local $hProcess = GetCurrentProcess() Local $pText = $pAddress + $dwOpcodeSize Local $tText = DllStructCreate("CHAR[" & $dwTextSize & "]") DllStructSetData($tText, 1, $sText) WriteProcessMemory($hProcess, $pText, DllStructGetPtr($tText, 1), $dwTextSize) Local $pCaption = $pText + $dwTextSize Local $tCaption = DllStructCreate("CHAR[" & $dwCaptionSize & "]") DllStructSetData($tCaption, 1, $sCaption) WriteProcessMemory($hProcess, $pCaption, DllStructGetPtr($tCaption, 1), $dwCaptionSize) Local $pMessageBoxA = GetProcAddress(GetModuleHandle("user32.dll"), "MessageBoxA") Local $pVirtualFree = GetProcAddress(GetModuleHandle("kernel32.dll"), "VirtualFree") Local $sOpcode = "0x" $sOpcode &= "68" & SwapEndian($uType) ;push uType $sOpcode &= "68" & SwapEndian($pCaption) ;push sCaption $sOpcode &= "68" & SwapEndian($pText) ;push sText $sOpcode &= "68" & SwapEndian($hWnd) ;push hWnd $sOpcode &= "B8" & SwapEndian($pMessageBoxA) ;mov eax, MessageBoxA $sOpcode &= "FFD0" ;call eax $sOpcode &= "68" & SwapEndian(0x8000) ;push MEM_RELEASE (dwFreeType) $sOpcode &= "68" & SwapEndian(0) ;push dwSize $sOpcode &= "68" & SwapEndian($pAddress) ;push pAddress $sOpcode &= "B8" & SwapEndian($pVirtualFree) ;mov eax, VirtualFree $sOpcode &= "FFD0" ;call eax $sOpcode &= "C3" ;ret Local $tOpcode = DllStructCreate("BYTE[50]", $pAddress) DllStructSetData($tOpcode, 1, $sOpcode) WriteProcessMemory($hProcess, $pAddress, DllStructGetPtr($tOpcode, 1), $dwOpcodeSize) Local $hThread = CreateThread(0, 0, $pAddress, 0, 0) CloseHandle($hThread) EndFunc ;==>MessageBox Func VirtualAlloc($pAddress, $dwSize, $flAllocationType, $flProtect) Return DllCall("kernel32.dll", "ptr", "VirtualAlloc", _ "ptr", $pAddress, _ "DWORD", $dwSize, _ "DWORD", $flAllocationType, _ "DWORD", $flProtect)[0] EndFunc ;==>VirtualAlloc Func CreateThread($pThreadAttributes, $dwStackSize, $pStartAddress, $pParameter, $dwCreationFlags) Return DllCall("kernel32.dll", "HANDLE", "CreateThread", _ "ptr", $pThreadAttributes, _ "DWORD", $dwStackSize, _ "ptr", $pStartAddress, _ "ptr", $pParameter, _ "DWORD", $dwCreationFlags, _ "ptr", 0)[0] EndFunc ;==>CreateThread Func CloseHandle($hObject) Return DllCall("kernel32.dll", "BOOL", "CloseHandle", _ "HANDLE", $hObject)[0] EndFunc ;==>CloseHandle Func GetProcAddress($hModule, $sProcName) Return DllCall("kernel32.dll", "ptr", "GetProcAddress", _ "HANDLE", $hModule, _ "str", $sProcName)[0] EndFunc ;==>GetProcAddress Func GetModuleHandle($sModuleName) Return DllCall("kernel32.dll", "HANDLE", "GetModuleHandle", _ "str", $sModuleName)[0] EndFunc ;==>GetModuleHandle Func WriteProcessMemory($hProcess, $lpAddress, $lpBuffer, $nSize) Return DllCall("kernel32.dll", "BOOL", "WriteProcessMemory", _ "HANDLE", $hProcess, _ "ptr", $lpAddress, _ "ptr", $lpBuffer, _ "DWORD", $nSize, _ "ptr", 0)[0] EndFunc ;==>WriteProcessMemory Func SwapEndian($dwValue) Return Hex(Binary($dwValue)) EndFunc ;==>SwapEndian Func GetCurrentProcess() Return DllCall("kernel32.dll", "HANDLE", "GetCurrentProcess")[0] EndFunc ;==>GetCurrentProcess
Ich habe es nicht getestet! -
$Leinwand=GetLeinwand($hwnd_GUI,Position,Größe) ;soweit ok
$Pinsel=DefinierePinsel($Leinwand,Eigenschaften) ;auch okMaleLinie($Leinwand,x1,y1,x2,y2,Pinsel) ;wie sonst^^
MaleRechteck($Leinwand,bla...)
MaleIrgendwas($Leinwand,blub...)
MaleFilter($Leinwand,tralala...)Filesave($Leinwand,Dateiname) ; fertig
Das würde ich so lösen:AutoIt
Alles anzeigen#include <GDIPlus.au3> Global $StarteGDIP = _GDIPlus_Startup, $L = _GDIPlus_ImageGetGraphicsContext, $BeendeGDIP = _GDIPlus_Shutdown, _ $MaleLinie = _GDIPlus_GraphicsDrawLine, $P = _GDIPlus_PenCreate, $B = _GDIPlus_BitmapCreateFromScan0, $SpeichereBild = _GDIPlus_ImageSaveToFile, _ $VerwerfePinsel = _GDIPlus_PenDispose, $VerwerfeLeinwand = _GDIPlus_GraphicsDispose $StarteGDIP() $Bild = $B(400, 300) $Leinwand = $L($Bild) $Pinsel = $P(0xFFFF0000) $MaleLinie($Leinwand, 0, 0, 400, 300, $Pinsel) $SpeichereBild($Bild, @ScriptDir & "\Test.jpg") $VerwerfePinsel($Pinsel) $VerwerfeLeinwand($Leinwand) $BeendeGDIP() ShellExecute(@ScriptDir & "\Test.jpg")Abgesehen davon gebe ich dir recht, dass das Verstehen der GDI / GDI+ Funktionen (Aufbau und Anwendungen) nicht einfach sind, aber ich der Meinung bin, dass wenn mal der Groschen gefallen ist, das Grafik System verständlicher ist, als am Anfang. Man muss nur intensiv damit auseinander setzen.
-
UEZ, du weisst genau, dass ich das Beispiel aus der Hilfe kopiert und um 3-4 Zeilen eigenen Code ergänzt habe
Ansonsten wären GARKEINE _Dispose()-Aufrufe im Script enthalten
*whispermode ON* und wenn es statt 12 auch 12000 Pens wären, Windows sorgt beim Beenden des Scripts dafür, dass der Speicher freigegeben wird...*whispermode OFF*Übrigens einer der Gründe, wieso ich die Variante mit _WinAPI_ - Funktionen vorziehe, da kümmerst du dich selbst um deinen Speicher bzw. dieser wird sowieso von Windows abgewickelt.. Für o.g. Beispiel brauche ich damit nicht mal die Hälfte der Befehle. Mal davon abgesehen, dass ich die _GDIPlus_- Funktionen sowieso nur zu 5% verstehe (und deswegen auch nutze).
Bis jetzt konnte mir noch niemand erklären, worin der Unterschied der GDI+ in Bezug auf -Graphics, -Image, -Bitmap, HBitmap usw besteht, ich habe EINE einzige GUI auf der ich mit mehreren Objekten jedes mal Saltos schlagen muss, um "ein bisschen" Grafik anzuzeigen
.Da hast du recht, dass nach dem Beenden des Skriptes der Speicher wieder freigegeben wird, aber wenn jemand dies in einer endlosen Schleife tut, gibt's eben ein Speicherleck.
Die Unterschiede zwischen GDI und GDI+ sind leider in der Hilfe nicht gut dokumentiert und viele schmeißen auch die Begriffe wild durcheinander. Aber in GDI+ gibt es einige Befehle, die die Brücke zu GDI (HBitmap) schlagen.
Die Unterschiede zwischen Bitmap und Image (in GDI+) und Bitmap (GDI) und Bitmap (GDI+) sind eben da und müssen verstanden sein, wenn man beide kombiniert nutzen möchte. Wenn man einmal den Bogen raus hat, ist es nicht mehr so kompliziert.
Der Hauptunterschied ist wohl der interne Aufbau, aber wer möchte, kann in MSDN sich informieren.
-
-
Andy, du solltest die _GDIPlus_PenCreate Ressourcen "sauber" freigeben, wenn du sie so oft benutzt.

12x erstellt und nur 1x freigegeben.
Oder so:
C
Alles anzeigen#include <GUIConstantsEx.au3> #include <GDIPlus.au3> Local $hGUI, $hGraphic, $hPen ; Create GUI $hGUI = GUICreate("GDI+", 400, 300) GUISetState(@SW_SHOW) ; Draw line _GDIPlus_Startup() $hGraphic_hwnd = _GDIPlus_GraphicsCreateFromHWND($hGUI) $hImage = _GDIPlus_BitmapCreateFromGraphics(400, 300, $hGraphic_hwnd) $hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage) _GDIPlus_GraphicsSetSmoothingMode($hGraphic, 4) $hPen = _GDIPlus_PenCreate(0xFF7f7f7f, 300) _GDIPlus_GraphicsDrawRect($hGraphic, 0, 0, 400, 300, $hPen) ;Hintergrund grau _GDIPlus_PenSetColor($hPen, 0xFFFFFFFF) _GDIPlus_PenSetWidth($hPen, 2) _GDIPlus_GraphicsDrawRect($hGraphic, 50, 50, 100, 200, $hPen) ;Rechteck weiß _GDIPlus_PenSetWidth($hPen, 3) For $i = 1 To 10 ;Linien _GDIPlus_PenSetColor($hPen, Random(0xFF000000, 0xFFFFFFFF, 1)) _GDIPlus_GraphicsDrawLine($hGraphic, 10, 10, Random(10, 390), 290, $hPen) Next ; Loop until the user exits. _GDIPlus_GraphicsDrawImage($hGraphic_hwnd, $hImage, 0, 0) Do Until GUIGetMsg() = $GUI_EVENT_CLOSE FileDelete("GDIPlus_Image.jpg") $a = _GDIPlus_ImageSaveToFile($hImage, "GDIPlus_Image.jpg") ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $a = ' & $a & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console ShellExecute("GDIPlus_Image.jpg") ; Clean up resources _GDIPlus_PenDispose($hPen) _GDIPlus_GraphicsDispose($hGraphic) _GDIPlus_Shutdown()
-
Alles senkrecht
Hast wohl die blaue Pille genommen.

-
Ich würde vorschlagen, dass Rene den Server an eine(n) abgibt, der/die noch Lust und Zeit hat, AutoIt.de komplett zu übernehmen.
Dann müsste man sich noch Gedanken über die Admins machen...
Der momentane Zombie Zustand bringt niemanden was und vertreibt eher die Leute.
-
Da du nur sehr wage die tatsächliche GUI beschreibst, ist es sehr schwer dir richtig zu helfen.
Vielleicht zeigst du uns mal, wie die tatsächliche GUI aussieht, so dass wir nicht "umsonst" Zeit verschwenden.
-
Probiere es mal damit:
AutoIt
Alles anzeigen#include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <GDIPlus.au3> _GDIPlus_Startup() Global Const $STM_SETIMAGE = 0x0172 Global $Image = _GDIPlus_ImageLoadFromFile(StringRegExpReplace(@AutoItExe, "(?i)AutoIt(?:[\dx_]+)\.exe", "Examples\\GUI\\Torus.png")) Global $Width = 400, $Height = 300 Global $Gui = GUICreate("Test Gui", $Width, $Height, -1, -1, BitOR($WS_POPUP, $WS_GROUP, $WS_SYSMENU)) Global $iPic_Bg = GUICtrlCreatePic("", 0, 0, $Width, $Height) GUICtrlSetState(-1, $GUI_DISABLE) Global $hBrush = _GDIPlus_LineBrushCreateFromRect(_GDIPlus_RectFCreate(0, 0, $Width, $Height), 0xFF009917, 0xFF0F6029, 1) Global $hBitmap = _GDIPlus_BitmapCreateFromScan0($Width, $Height) Global $hGraphic = _GDIPlus_ImageGetGraphicsContext($hBitmap) _GDIPlus_GraphicsFillRect($hGraphic, 0, 0, $Width, $Height, $hBrush) _GDIPlus_GraphicsDrawImageRectRect($hGraphic, $Image, 0, 0, 92, 90, 0, 0, 92, 90) Global $hBitmap_GDI = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hBitmap) _WinAPI_DeleteObject(GUICtrlSendMsg($iPic_Bg, $STM_SETIMAGE, $IMAGE_BITMAP, $hBitmap_GDI)) _GDIPlus_ImageDispose($Image) _GDIPlus_BrushDispose($hBrush) _GDIPlus_GraphicsDispose($hGraphic) _GDIPlus_ImageDispose($hBitmap) GUICtrlCreateLabel("Wo ist der Text und der Button, in der Live Vorschau, wenn das Fenster Minimiert ist?", 1, 94, 360, 152, $WS_BORDER) GUICtrlSetFont(-1, 24, 800, 0, "Arial", 5) GUICtrlSetColor(-1, 0xEEEEEE) GUICtrlSetBkColor(-1, -2) Global $BtnExit = GUICtrlCreateButton("Beenden", 150, 256, 100, 25) Global $BtnMinimize = GUICtrlCreateButton("Minimieren", 260, 256, 100, 25) GUISetState(@SW_SHOW, $Gui) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE, $BtnExit ExitLoop Case $BtnMinimize WinSetState($Gui, "", @SW_MINIMIZE) EndSwitch WEnd _WinAPI_DeleteObject($hBitmap_GDI) _GDIPlus_Shutdown() GUIDelete($Gui)Ps: Es macht mir ihrgentwie Angst wenn eine Foren Legende wie UEZ so was schreibt
Arbeite ich bei MS?
-
Warum im Vorschaufenster der Text nicht angezeigt wird, weiß ich nicht, aber du könntest den Text in das Bild schreiben, so dass du keine 2. GUI benötigst.
-
Dekompilier-, Programm-, Anti-Hack-Schutz, etc. ist ein Kampf gegen Windmühlen - Don Quichotte lässt Grüßen...
Was machst du denn so tolles, dass du mit allen Mitteln es schützen willst?