Ich hab dir schon einmal gesagt du sollst GUICtrlRead verwenden und in meinem anderen Post ist es sogar noch genauer erklärt. Du überließt scheinbar gerne wichtige Posts. ![]()
Beiträge von name22
-
-
Das Problem dabei ist: Dein Script funktioniert bereits ;).
Wenn du ein Bild machst, und einen Ausschnitt des selben Bildes noch einmal darüber zeichnest und zwar exakt an der Position wo es vorher war ist es doch völlig logisch, dass du keinen Unterschied siehst.
Als Beispiel habe ich den Ausschnitt des 2ten Screenshots mal an eine andere Position gezeichnet.Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit]
#include <ScreenCapture.au3>
#include <WinAPI.au3>
_GDIPlus_Startup()
$hBitmap1 = _ScreenCapture_Capture("")
$hImage1 = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap1)
$hBitmap2 = _ScreenCapture_Capture("", 0, 0, 100,100)
$hImage2 = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap2)
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage1)
_GDIPlus_GraphicsDrawImage($hGraphic,$hImage2,50,50)
_GDIPlus_ImageSaveToFile($hImage1, @DesktopDir & "\GDIPlus_Image.jpg")
_GDIPlus_BitmapDispose($hImage1) ;<-
_GDIPlus_BitmapDispose($hImage2) ;<-
_WinAPI_DeleteObject($hBitmap1)
_WinAPI_DeleteObject($hBitmap2)
_GDIPlus_Shutdown()
Außerdem sind deine Variablen $hImage1 und 2, Handles zu Bitmaps und müssen deswegen dementsprechend angepasst werden.
Edit: Was bitte sind Screenshorts?
Das klingt nach einer ziemlich eigenartigen Hose. 
-
Juhuuu sechster
.
Das Bild habe ich mit einem Programm gemacht mit welchem ich seit ca. 1 Tag gearbeitet hatte.
Das hier wäre sozusagen Version 2.0
-
-
Das Fenster verschiebt sich zwar ziemlich schnell in die alte Position zurück, aber eben einfach nicht schnell genug.

Deswegen sieht es ein bisschen danach aus als würde es flackern. -
Beispiel aus der Hilfe (die scheinbar niemand ließt der es gebrauchen könnte)
Spoiler anzeigen
[autoit]#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
[/autoit] [autoit][/autoit] [autoit]
#include <GDIPlus.au3>
#include <ScreenCapture.au3>
#include <WinAPI.au3>Opt('MustDeclareVars', 1)
[/autoit] [autoit][/autoit] [autoit]_Main()
[/autoit] [autoit][/autoit] [autoit]Func _Main()
[/autoit] [autoit][/autoit] [autoit]
Local $hBitmap1, $hBitmap2, $hImage1, $hImage2, $hGraphic, $width, $height; Initialisiert (startet) Microsoft Windows GDI+
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_Startup(); Erstellt vom kompletten Bildschirm einen Screenshot
[/autoit] [autoit][/autoit] [autoit]
$hBitmap1 = _ScreenCapture_Capture("")
$hImage1 = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap1); Erstellt von einem Bereich einen Screenshot
[/autoit] [autoit][/autoit] [autoit]
$hBitmap2 = _ScreenCapture_Capture("", 0, 0, 400, 300)
$hImage2 = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap2)$width = _GDIPlus_ImageGetWidth($hImage2)
[/autoit] [autoit][/autoit] [autoit]
$height = _GDIPlus_ImageGetHeight($hImage2); Zeichnet ein Bild in ein anderes
[/autoit] [autoit][/autoit] [autoit]
$hGraphic = _GDIPlus_ImageGetGraphicsContext($hImage1); DrawInsert($hGraphic, $hImage2, $iX, $iY, $nAngle, $iWidth, $iHeight, $iARGB = 0xFF000000, $nWidth = 1)
[/autoit] [autoit][/autoit] [autoit]
DrawInsert($hGraphic, $hImage2, 350, 100, 0, $width + 2, $height + 2, 0xFFFF8000, 2)
DrawInsert($hGraphic, $hImage2, 340, 50, 15, 200, 150, 0xFFFF8000, 4)
DrawInsert($hGraphic, $hImage2, 310, 30, 35, $width + 4, $height + 4, 0xFFFF00FF, 4)
DrawInsert($hGraphic, $hImage2, 320, 790, -35, $width, $height); Speichert das neue Bild
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_ImageSaveToFile($hImage1, @DesktopDir & "\GDIPlus_Image.jpg"); Ressourcen freigeben
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_ImageDispose($hImage1)
_GDIPlus_ImageDispose($hImage2)
_WinAPI_DeleteObject($hBitmap1)
_WinAPI_DeleteObject($hBitmap2)
; Gibt die durch Microsoft Windows GDI+ verwendeten Ressourcen wieder frei
_GDIPlus_Shutdown()EndFunc ;==>_Main
[/autoit] [autoit][/autoit] [autoit]; #FUNCTION# ==================================================================================================
[/autoit] [autoit][/autoit] [autoit]
; Name...........: DrawInsert
; Beschreibung...: Zeichnet ein Bild in ein anderes
; Syntax.........: DrawInsert($hGraphic, $hImage2, $iX, $iY, $nAngle, $iWidth, $iHeight, $iARGB = 0xFF000000, $nWidth = 1)
; Fügt das Bild $hImage2 in $hGraphic ein
;
; Parameter......: $hGraphics - Handle zum Grafikobjekt
; $hImage - Handle zum einzufügenden Bild-Objekt
; $iX - X-Koordinate der oberen linken Ecke des eingefügten Bildes
; $iY - Y-Koordinate der oberen linken Ecke des eingefügten Bildes
; $iWidth - Breite des Rechteckrahmens um das eingefügte Bild
; $iHeight - Höhe des Rechteckrahmens um das eingefügte Bild
; $iARGB - Alpha, Rot, Grün und Blau: Komponenten der Stiftfarbe des Rahmens
; $nWidth - Breite des Zeichenstifts für den Rahmen
; (die Einheit wird im $iUnit-Parameter der _GDIPlus_PenCreate-Funktion festgelegt)
;
; Rückgabewerte..: Erfolg - True
; Fehler - False
;==================================================================================================
Func DrawInsert($hGraphic, $hImage2, $iX, $iY, $nAngle, $iWidth, $iHeight, $iARGB = 0xFF000000, $nWidth = 1)
Local $hMatrix, $hPen2; Rotationsmatrix
[/autoit] [autoit][/autoit] [autoit]
$hMatrix = _GDIPlus_MatrixCreate()
_GDIPlus_MatrixRotate($hMatrix, $nAngle, "False")
_GDIPlus_GraphicsSetTransform($hGraphic, $hMatrix)_GDIPlus_GraphicsDrawImage($hGraphic, $hImage2, $iX, $iY)
[/autoit] [autoit][/autoit] [autoit]; Ermittelt Stift + Farbe
[/autoit] [autoit][/autoit] [autoit]
$hPen2 = _GDIPlus_PenCreate($iARGB, $nWidth); Zeichnet einen Rahmen um das eingefügte Bild
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsDrawRect($hGraphic, $iX, $iY, $iWidth, $iHeight, $hPen2); Ressourcen freigeben
[/autoit]
_GDIPlus_MatrixDispose($hMatrix)
_GDIPlus_PenDispose($hPen2)
Return 1
EndFunc ;==>DrawInsert -
Du zeichnest einen Pacman um danach ein Bild von ihm zu laden ohne dessen Handle in einer Variable zu speichern?
Hast du dir mal ein Tutorial durchgelesen wie wir es dir vermutlich schon oft empfohlen haben? Wohl kaum... Du kennst scheinbar nicht mal den Unterschied zwischen Back- und Frontbuffer, verwendest es aber gleich mal in "deinem" Script.
Das ist zwar immer noch völlig ineffizient, da du Tastendrücke mitten in der GUILoop abfragst, und alles in 5ms Abständen neu zeichnest, aber so müsste es funktionieren...
Spoiler anzeigen
[autoit]#include <GDIPlus.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>
#include <Misc.au3>Global $GUIWidth = 600
[/autoit] [autoit][/autoit] [autoit]
Global $GUIHeight = 600
Global $iX = 100
Global $iY = 100
Global $piewidth = 0
Global $pieheight = 320$form = GUICreate("Test", 600, 600)
[/autoit] [autoit][/autoit] [autoit]
$hwnd = WinGetHandle($form)
GUISetState(@SW_SHOW)_GDIPlus_Startup()
[/autoit] [autoit][/autoit] [autoit]$hgraphics = _GDIPlus_GraphicsCreateFromHWND($hwnd)
[/autoit] [autoit][/autoit] [autoit]
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($GUIWidth, $GUIHeight, $hgraphics)
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
_GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)
;~ $pac = _GDIPlus_BrushCreateSolid (0xFFFFFF00)
;~ _GDIPlus_GraphicsFillPie ($hgraphics, 100,100, 25, 25,0,320, $pac)$hImage_pac = _GDIPlus_ImageLoadFromFile("pacman.jpg")
[/autoit] [autoit][/autoit] [autoit]_GDIPlus_GraphicsDrawImageRect($hgraphics, $hBitmap, 0, 0, $GUIWidth, $GUIHeight)
[/autoit] [autoit][/autoit] [autoit]While 1
[/autoit] [autoit][/autoit] [autoit]
$nMsg = GUIGetMsg(1)
Switch $nMsg[0]
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
If _IsPressed("25") Then
$iX -= 3
Draw()
EndIf
If _IsPressed("26") Then
$iY -= 3
Draw()
EndIf
If _IsPressed("27") Then
$iX += 3
Draw()
EndIf
If _IsPressed("28") Then
$iY += 3
Draw()
EndIf
WEndFunc Draw()
[/autoit] [autoit][/autoit] [autoit]
_GDIPlus_GraphicsClear($hgraphics)
_GDIPlus_GraphicsDrawImageRect($hgraphics, $hImage_pac, $iX, $iY, 25, 25)
_GDIPlus_GraphicsDrawImageRect($hBuffer, $hBitmap, 0, 0, $GUIWidth, $GUIHeight)
EndFunc ;==>DrawFunc _Exit()
[/autoit]
_GDIPlus_GraphicsDispose($hBuffer)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_GraphicsDispose($hgraphics)
_GDIPlus_ImageDispose($hImage_pac)
_GDIPlus_Shutdown()
EndFunc ;==>_Exit -
Ich hätte nicht gedacht, dass ich das mal sagen muss, aber ließ mal die Hilfe JuraX.

-
-
Du müsstest vermutlich alles ein wenig überlappend zeichnen.
Das Problem hatte ich auch schon oft... Es hängt damit zusammen, dass der SmoothingMode die Kanten nach außen hin leicht transparent macht.Edit: Versuche nur das mit SmoothingMode zu zeichnen was nötig ist. Du kannst ja mit mehreren Bitmaps und Grafiken arbeiten.

-
Was spricht dagegen _Timer_GetIdleTime zu verwenden?

-
-
Da fehlt aber eine Funktion.

-
Wieso nicht gleich _ArrayUnique verwenden?

-
Ich kann mir beim besten Willen nicht vorstellen was genau du willst, aber suchst du vielleicht WinSetOnTop ?
-
Zitat
Dann aber auch mit den richtigen Variablen

Die waren von Anfang an falsch, und ich hab es übersehen, siehe Edit in meinem 1ten Post. -
[autoit]
$w1=WinList("A") ;anazhl aller fenster die mit "A" beginnen
[/autoit]
$w2=WinList("T") ;anazhl aller fenster die mit "T" beginnen
$w3=$w1 [0][0] + $w2 [0][0] ;summer aller fenster mit "A" und "T"
ToolTip("Counter"& @CRLF &$w3,1840,1135)
"$w3" Ist kein Array ;).
Edit: Außerdem hast du fast alle Variablen/Arrays falsch benannt.
So korrigiert. -
Zitat
Aber mit dem downloaden habe ich immer noch net hinbekommen.
Probier ich mal weiter
Ich melde mich später nochmal
Ich bin mir nicht sicher wie du das anstellen willst, ich kenne das bis jetzt nur mit INetGet.
-
Zitat
Die Schüler sollen schneller fertig sein, damit man sie früher in die Arbeitslosigkeit entlassen kann

Ach so, jetzt verstehe ich endlich wofür wir das Kultusministerium eigentlich brauchen.
-
Zitat
Ja, G8 ist echt schei*e!
Stimmt! Danke Kultusministerium...
Wo wir gerade dabei sind :D, was sollte das ganze eigentlich bringen?