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

Beiträge von UEZ

  • MsgBox ohne skript Pause

    • UEZ
    • 8. Juli 2015 um 14:04

    Von hier: https://www.autoitscript.com/forum/topic/15…comment-1149008

    Code
    MessageBox("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
    Alles anzeigen


    Ich habe es nicht getestet!

  • GUI als Bild abspeichern

    • UEZ
    • 3. Juli 2015 um 16:27
    Zitat von Andy

    $Leinwand=GetLeinwand($hwnd_GUI,Position,Größe) ;soweit ok
    $Pinsel=DefinierePinsel($Leinwand,Eigenschaften) ;auch ok

    MaleLinie($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
    #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")
    Alles anzeigen

    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.

  • GUI als Bild abspeichern

    • UEZ
    • 3. Juli 2015 um 13:18
    Zitat von Andy

    UEZ, du weisst genau, dass ich das Beispiel aus der Hilfe kopiert und um 3-4 Zeilen eigenen Code ergänzt habe :D Ansonsten wären GARKEINE _Dispose()-Aufrufe im Script enthalten 8)
    *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.

  • ListView sortieren, erst Spalte 1, dann Spalte 2, dann Spalte 3 wie in Excel

    • UEZ
    • 2. Juli 2015 um 21:09

    Probiere es mal damit: Array sortieren

  • GUI als Bild abspeichern

    • UEZ
    • 2. Juli 2015 um 20:06

    Andy, du solltest die _GDIPlus_PenCreate Ressourcen "sauber" freigeben, wenn du sie so oft benutzt. ;)

    12x erstellt und nur 1x freigegeben.


    Oder so:

    C
    #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 anzeigen

    :D

  • Active Directory Funktionen - Neue Version 1.5.0.0 freigegeben!

    • UEZ
    • 1. Juli 2015 um 16:14
    Zitat von water

    Alles senkrecht :)

    Hast wohl die blaue Pille genommen. ;)

  • Zukunft für AutoIt.de - Impressionen und Ideen

    • UEZ
    • 26. Juni 2015 um 23:32

    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.

  • GDI+ & LAYERED Window == Keine Live Preview?

    • UEZ
    • 26. Juni 2015 um 21:52

    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.

  • GDI+ & LAYERED Window == Keine Live Preview?

    • UEZ
    • 26. Juni 2015 um 20:42

    Probiere es mal damit:

    AutoIt
    #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)
    Alles anzeigen
    Zitat von Taz77

    Ps: Es macht mir ihrgentwie Angst wenn eine Foren Legende wie UEZ so was schreibt

    Arbeite ich bei MS?

  • GDI+ & LAYERED Window == Keine Live Preview?

    • UEZ
    • 26. Juni 2015 um 11:20

    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.

  • Start- / Endadresse Skript im Speicher finden

    • UEZ
    • 25. Juni 2015 um 20:06

    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?

  • _CreateHBitmapArrayFromIconfile

    • UEZ
    • 18. Juni 2015 um 20:23

    Danke euch beiden für die UDF! Kann ich bestimmt gebrauchen!

  • rundes Fenster - rahmenlos - beliebige Fensterformen - geht sowas mit Autoit

    • UEZ
    • 16. Juni 2015 um 21:25

    Schaue mal hier nach: https://www.autoitscript.com/forum/topic/170565-circular-gui/?do=findComment&comment=1247029

  • Eye Clock v1.3.1 build 2015-06-28

    • UEZ
    • 15. Juni 2015 um 20:44

    Danke fürs Testen! Ich konnte auch dein Problem nicht nachstellen. Somit kann ich keine Fehlersuche durchführen. Sorry.

  • Flac nach mp3 ?

    • UEZ
    • 13. Juni 2015 um 23:05

    Du muss die LAME Version nehmen, die auch FLAC unterstützt -> LAME 3.99.5 using libsndfile 1.0.25

    Ist ein Commandline Tool.

  • Eye Clock v1.3.1 build 2015-06-28

    • UEZ
    • 13. Juni 2015 um 19:25

    Ok, danke dir.

  • Eye Clock v1.3.1 build 2015-06-28

    • UEZ
    • 13. Juni 2015 um 19:11

    In meiner Win7 x64 VM funktioniert es ohne Probleme. Auch auf meiner physikalien Win8 Maschine läuft's problemlos, wenn ich SCR starte.

    ?(

  • Eye Clock v1.3.1 build 2015-06-28

    • UEZ
    • 13. Juni 2015 um 18:40

    Hmm, kann ich leider nicht nachstellen. Wenn ich eine Textur auswähle, die Einstellung übernehme und die SCR starte, wird der Bildschirmschoner beendet, wenn ich die Maus bewege oder eine Taste drücke.

    Analog, wenn der Bildschirmschoner automatisch gestartet wird.

    Kannst du die Schritte beschreiben, so dass ich sie analog nachstellen kann?

    Danke. :thumbup:

    PS: ich kann nur unter meinen VMs den Bildschirmschoner testen, da die GPO mir verbietet einen Bildschirmschoner auszusuchen.

  • AutoIt Sysinternal Tools Synchronizer v0.99.6 build 2020-09-23 beta

    • UEZ
    • 13. Juni 2015 um 16:58

    Danke Bazii. :thumbup:

    Gut zu wissen, dass jemand meine Arbeit zu schätzen weiß. :rolleyes:

  • Eye Clock v1.3.1 build 2015-06-28

    • UEZ
    • 13. Juni 2015 um 16:55

    Kannst du bitte diese Version testen?: https://autoit.de/index.php/Attachment/311-Eye-Clock-7z/ (Post 29)


    Vielen DANK!

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™