#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=..\..\Icon-Sammlung-Programmierung\1.ico
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

;MsgBox(4096, "Meldung", @AutoItX64)
#cs
	Version 1.1
	Author: Tuxedo auf Autoit.de
	Das Programm funktioniert sehr einfach, es können Text-Abschnitte Hyper-Links und Grafiken(allerdings nur solche
	die einen Link besitzen und vom Typ GIF JPG PNG sind) kopiert werden. Kopie erstellen bei Texten mit "CTRL + c",
	Links per "Linkadresse kopieren" oder per Markierung und "CTRL + c" oder per Contextmenü "kopieren",
	Bilder werden kopiert durch Contextmenü "Grafikadresse kopieren" bei gedrückter CTRL-Taste.
	Da es Seiten gibt die beim Bilder kopieren Probleme machen, habe ich zusätzlich eine Meldung eingebaut die
	erscheint wenn keine Bild-Kopie möglich ist und gleichzeitig wird im gespeicherten Clipboardeintrag statt
	des Bildes ein Hinweis und der Link zum Bild eingefügt, damit nach dem Einfügen auch sieht wo das Bild sein sollte.
	Dann kann es einfach manuell im Browser geladen und händisch kopiert werden, oder man macht es einfach so wie man es
	im Browser ohne das Tool machen würde(Grafik kopieren+einfügen oder Bild aufrufen und Drag and Drop).

	Eingefügt wird jeder kopierte Eintrag einzeln per "CTRL + v"
	Wenn der letzte verfügbare Eintrag kopiert wird erscheint beim nächsten Versuch eine kurze Meldung als Tooltip,
	damit man weiss was Sache ist und was zu tun ist.
	Wenn der letzte Eintrag eingefügt wird, kommt beim nächsten Versuch ebenfalls eine Tooltip-Meldung.
	Bei Bedarf kann eine Art Reset durchgeführt werden mit Taste F3, dann wird wieder von vorne begonnen.
	Wenn alles eingefügt wurde und beimnächsten Versuch die Ende Meldung kommt, kann man danach ebenfalls wieder
	mit dem Kopieren von vorne beginnen. Das Tool beenden kann man mit Taste F2
	Die Code-Teile um das Bild ins Clipboard zu bringen stammen vom User "UEZ" auf Autoit.de Herzlich Dank an "UEZ"
#ce


#include <Clipboard.au3>
;#include <WindowsConstants.au3>
#include <Gdiplus.au3>




HotKeySet("^c", "F_Kopieren")
HotKeySet("^v", "F_Einfuegen")
HotKeySet("{F2}", "F_Ende")
HotKeySet("{F3}", "F_DelArray")


Dim $Clip[15], $Cstep = 0, $Vstep = 0
$hUser32 = DllOpen("user32.dll")

$ClipAlt = ClipGet()
While 1
	If $ClipAlt <> ClipGet() And Not _IsPressed("11", $hUser32) Then F_LinkCopy()
	If $ClipAlt <> ClipGet() And _IsPressed("11", $hUser32) Then F_BildCopy()
	Sleep(200)
WEnd


Func F_LinkCopy()
	If $Cstep > UBound($Clip) - 1 Then
		ToolTip('Keine Clips mehr verfügbar' & @CRLF & 'Weitermachen mit "EINFÜGEN"', Default, Default, "Titel")
		Sleep(3000)
		ToolTip("")
		$ClipAlt = ClipGet()
		Return
	EndIf
	$Clip[$Cstep] = ClipGet()
	ToolTip("Clip " & $Cstep & " wurde gespeichert", Default, Default, "Titel")
	Sleep(1000)
	ToolTip("")
	$Cstep += 1
	$ClipAlt = ClipGet()
EndFunc   ;==>F_LinkCopy


Func F_BildCopy()
	If $Cstep > UBound($Clip) - 1 Then
		ToolTip('Keine Clips mehr verfügbar' & @CRLF & 'Weitermachen mit "EINFÜGEN"', Default, Default, "Titel")
		Sleep(3000)
		ToolTip("")
		$ClipAlt = ClipGet()
		Return
	EndIf

	$Url = ClipGet()
	;MsgBox(4096, "Meldung", $Url)
	;HttpSetUserAgent("Mozilla/5.0 (Windows NT 6.1; WOW64; rv:37.0) Gecko/20100101 Firefox/37.0")
	$Clip[$Cstep] = InetRead($Url, 18);Gibt dir Binary vom Bild
	If $Clip[$Cstep] = "" Then
		MsgBox(4096, "Meldung", "Download-Fehler" & @CRLF & "Das Bild muss händisch geladen werden")
		$Clip[$Cstep] = "Bild " & $Url & @CRLF & "muss von Hand nachgeladen werden"
	EndIf
	;MsgBox(4096, "Meldung", $Clip[$Cstep])

	ToolTip("Clip " & $Cstep & " wurde gespeichert", Default, Default, "Titel")
	Sleep(1000)
	ToolTip("")
	$Cstep += 1
	$ClipAlt = ClipGet()
EndFunc   ;==>F_BildCopy

Func F_Kopieren()
	If $Cstep > UBound($Clip) - 1 Then
		ToolTip('Keine Clips mehr verfügbar' & @CRLF & 'Weitermachen mit "EINFÜGEN"', Default, Default, "Titel")
		Sleep(3000)
		ToolTip("")
		$ClipAlt = ClipGet()
		Return
	EndIf

	HotKeySet("^c")
	Send("^c")
	If $ClipAlt <> ClipGet() Then
		Sleep(300);Bei einem zweiten Durchgang wird ohne diesen Sleep der Clip[0] als Leerstring gespeichert k.A. warum??

		$Clip[$Cstep] = ClipGet()

		$ClipAlt = ClipGet()
		ToolTip("Clip " & $Cstep & " wurde gespeichert", Default, Default, "Titel")
		Sleep(1000)
		ToolTip("")
		$Cstep += 1
	EndIf
	$ClipAlt = ClipGet()
	HotKeySet("^c", "F_Kopieren")

EndFunc   ;==>F_Kopieren


Func F_Einfuegen()

	HotKeySet("^v")

	If $Vstep = $Cstep Then
		$Vstep = 0
		$Cstep = 0
		ToolTip("Alles eingefügt + Reset" & @CRLF & "Script wieder kopierbereit", Default, Default, "Titel")
		Sleep(3000)
		ToolTip("")
		HotKeySet("^v", "F_Einfuegen")

		Return
	EndIf


	;MsgBox(4096, "Meldung", StringLeft($Clip[$Vstep],10))
	If StringLeft($Clip[$Vstep], 10) = "0x89504E47" Then Return F_BildEinfuegen();0x89504E47 = .PNG
	If StringLeft($Clip[$Vstep], 10) = "0xFFD8FFE0" Then Return F_BildEinfuegen();0xFFD8FFE0 = .JPG
	If StringLeft($Clip[$Vstep], 8) = "0x474946" Then Return F_BildEinfuegen();0x89504E47 = .GIF
	;If StringLeft($Clip[$Vstep],10 = ".JPEG") Then Return F_BildEinfügen();0x89504E47 = .JPEG
	;If StringLeft($Clip[$Vstep],10 = ".BMP") True Then Return F_BildEinfügen();0x89504E47 = .BMP
	;If StringLeft($Clip[$Vstep],10 = ".TIF") Then Return F_BildEinfügen();0x89504E47 = .TIF
	ClipPut($Clip[$Vstep])
	Send("^v")
	ToolTip("Clip " & $Vstep & " von " & $Cstep - 1 & " wurde eingefügt ", Default, Default, "Titel")
	Sleep(1200)
	ToolTip("")
	$Clip[$Vstep] = ""
	$Vstep += 1

	HotKeySet("^v", "F_Einfuegen")
	$ClipAlt = ClipGet()
EndFunc   ;==>F_Einfuegen



Func F_BildEinfuegen()
	HotKeySet("^v")

	_GDIPlus_Startup()
	$hBild = _GDIPlus_BitmapCreateFromMemory($Clip[$Vstep], True) ;erstellt dir ein GDI Bitmap vom InetRead.
	$hClipboard_Bild = _WinAPI_CopyImage($hBild, 0, 0, 0, BitOR($LR_COPYDELETEORG, $LR_COPYRETURNORG))
	_ClipBoard_Open(0)
	_ClipBoard_Empty()
	_ClipBoard_SetDataEx($hClipboard_Bild, $CF_BITMAP)
	_ClipBoard_Close()
	_WinAPI_DeleteObject($hBild)
	_WinAPI_DeleteObject($hClipboard_Bild)
	_GDIPlus_Shutdown()
	Send("^v")

	If $Vstep = $Cstep Then
		$Vstep = 0
		$Cstep = 0
		ToolTip("Alles eingefügt + Reset" & @CRLF & "Script wieder kopierbereit", Default, Default, "Titel")
		Sleep(3000)
		ToolTip("")
		HotKeySet("^v", "F_Einfuegen")
		Return
	EndIf

	HotKeySet("^v", "F_Einfuegen")
	ToolTip("Clip " & $Vstep & " von " & $Cstep - 1 & " wurde eingefügt ", Default, Default, "Titel")
	Sleep(1200)
	ToolTip("")
	$Clip[$Vstep] = ""
	$Vstep += 1
	$ClipAlt = ClipGet()
EndFunc   ;==>F_BildEinfuegen


Func F_DelArray()
	;_ArrayDelete ist nicht brauchbar da nicht nur der Array-Inhalt gelöscht wird
	For $i = 0 To UBound($Clip) - 1
		$Clip[$i] = Null
	Next

	$Cstep = 0
	$Vstep = 0
	ClipPut("")
	$ClipAlt = ClipGet()
EndFunc   ;==>F_DelArray


Func _IsPressed($sHexKey, $vDLL = 'user32.dll')
	; $hexKey must be the value of one of the keys.
	; _Is_Key_Pressed will return 0 if the key is not pressed, 1 if it is.
	Local $a_R = DllCall($vDLL, "short", "GetAsyncKeyState", "int", '0x' & $sHexKey)
	If @error Then Return SetError(@error, @extended, False)
	Return BitAND($a_R[0], 0x8000) <> 0
EndFunc   ;==>_IsPressed


Func F_Ende()
	DllClose($hUser32)
	Exit
EndFunc   ;==>F_Ende


