Hallo,
ich habe ein kleines Programm zum erstellen von Screenshots erstellt.
Update 1.1 Update 1.2 Funktionen:
Screenshots von einem Teilbereich des Desktops erstellen. Auswahl mit Vorschau.Screenshots von einem Fenster erstellen. Auswahl über bequeme Liste.
Update 1.3 Verbesserungen:
Screenshot von einem Fenster erstellen Funktion korrigiert.
Update 1.4 Verbesserungen:
Mann kann den Bilderorder per Tray-Menü öffnen"Nummer der letzten Datei auslesen"-Funktion (Startvorgang) verbessert
Update 1.5 Verbesserungen:
- Verbesserung der _foto() Funktion.
- Korrektur des Startvorgangs
Bedinung
- F2: Neuer Screenshot von einem Teilbereich des Desktops.
- F3: Neuer Screenshot von einem Fenster.
- F4: Ende
Quellentext
#Region ---Include---
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIListBox.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <ScreenCapture.au3>
#include <Misc.au3>
#include <GuiListBox.au3>
#include <Array.au3>
#EndRegion ---Include---
#Region ---Optionen---
Opt("TrayAutoPause", 0)
Opt("TrayIconDebug", 0)
Opt("TrayIconHide", 0)
Opt("TrayMenuMode", 1)
Opt("TrayOnEventMode", 0)
#EndRegion ---Optionen---
#Region ---Veriablendekleration---
Global $Nummer = 1
#EndRegion ---Veriablendekleration---
#Region ---Systray---
TraySetIcon(@SystemDir & "\shell32.dll", -142)
TraySetToolTip("Screenhot ersteller")
TraySetClick(17)
;~ MenuItems:
$TrayMenu_FotoAlles = TrayCreateItem("Screenshot erstellen")
$TrayMenu_FotoFenster = TrayCreateItem("Screenshot von einem Fenster")
TrayCreateItem("")
$TrayMenu_OrdnerOffnen = TrayCreateItem("Bilderordner öffnen")
TrayCreateItem("")
$TrayMenu_Exit = TrayCreateItem("Beenden")
#EndRegion ---Systray---
#Region ---Startup---
$Pfad = @ScriptDir & "\Bilder\" & @MDAY & "." & @MON & "." & @YEAR
If FileExists($Pfad) = 1 Then ;~ Es gibt schon Bilder von heute
$Grossse = DirGetSize($Pfad, 1)
If $Grossse[1] > 0 Then ;~ Wenn es eine Datei gibt
$Frage = MsgBox(262468, "Scrennhot ersteller", "Willst du die alten Bilder löschen?")
If $Frage = 6 Then ;~ Alte Bilder überschreiben
DirRemove($Pfad, 1)
DirCreate($Pfad)
Else
;~ Nummer des letten Bildes herausfinden:
$Durchlauf = 1
While 1
If FileExists($Pfad & "\BildNr." & $Durchlauf & ".jpg") = 0 Then
$Nummer = $Durchlauf
ExitLoop
EndIf
$Durchlauf += 1
WEnd
EndIf
EndIf
Else
DirCreate($Pfad)
EndIf
#EndRegion ---Startup---
#Region ---Hotkeys---
HotKeySet("{F2}", "_foto")
HotKeySet("{F3}", "_foto_von_Fenster")
HotKeySet("{F4}", "_exit")
#EndRegion ---Hotkeys---
#Region ---While---
While 1
Switch TrayGetMsg()
Case $TrayMenu_FotoAlles
_foto()
Case $TrayMenu_FotoFenster
_foto_von_Fenster()
Case $TrayMenu_Exit
_exit()
Case $TrayMenu_OrdnerOffnen
_bilderordner_offnen()
EndSwitch
WEnd
#EndRegion ---While---
#Region ---Funktionen---
Func _bilderordner_offnen() ;~ Ordner mit den Bildern öffnen
Run("explorer.exe " & $Pfad)
EndFunc ;==>_bilderordner_offnen
Func _foto_von_Fenster() ;~ Screenshot von einem Fenster erstellen
;~ Fensterauswahl-Gui erstellen:
$FensterAuswahl = GUICreate("Screenshots-Creator - Fensterauswahl", 731, 423, -1, -1, BitOR($WS_MAXIMIZEBOX, $WS_MINIMIZEBOX, $WS_SIZEBOX, $WS_THICKFRAME, $WS_SYSMENU, $WS_CAPTION, $WS_OVERLAPPEDWINDOW, $WS_TILEDWINDOW, $WS_POPUP, $WS_POPUPWINDOW, $WS_GROUP, $WS_TABSTOP, $WS_BORDER, $WS_CLIPSIBLINGS), BitOR($WS_EX_APPWINDOW, $WS_EX_OVERLAPPEDWINDOW, $WS_EX_TOOLWINDOW, $WS_EX_TOPMOST, $WS_EX_WINDOWEDGE))
GUISetBkColor(0xFFFF00)
$Label1 = GUICtrlCreateLabel("Wähl ein Fenster aus, das du fotographieren willst:", 8, 8, 709, 38)
GUICtrlSetFont(-1, 22, 800, 0, "Arial")
GUICtrlSetColor(-1, 0xFF0000)
$List1 = GUICtrlCreateList("", 8, 56, 713, 298, BitOR($WS_VSCROLL, $WS_BORDER), BitOR($WS_EX_CLIENTEDGE, $WS_EX_STATICEDGE))
GUICtrlSetFont(-1, 18, 400, 0, "Arial Narrow")
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlSetBkColor(-1, 0xA6CAF0)
$Button1 = GUICtrlCreateButton("OK", 12, 360, 375, 57, 0)
GUICtrlSetFont(-1, 22, 800, 0, "Arial Narrow")
$Button2 = GUICtrlCreateButton("Abrechen", 396, 360, 327, 57, 0)
GUICtrlSetFont(-1, 22, 800, 0, "Arial Narrow")
GUISetState(@SW_SHOW)
;~ Fensterliste erstellen:
Local $WinList = WinList()
Local $FensterHandls[1]
For $Durchlauf = 1 To $WinList[0][0]
If IniRead($Pfad, "Einstellungen", "GadgetsInBildFensterFunktion", "Nein") = "Nein" Then
If $WinList[$Durchlauf][0] <> "" And IsVisible($WinList[$Durchlauf][1]) And $WinList[$Durchlauf][0] <> "Program manager" And $WinList[$Durchlauf][0] <> "Screenshots-Creator - Fensterauswahl" And $WinList[$Durchlauf][0] <> "Start" And ProcessExists("sidebar.exe") <> WinGetProcess($WinList[$Durchlauf][0]) Then
_GUICtrlListBox_AddString($List1, $WinList[$Durchlauf][0])
_ArrayAdd($FensterHandls, $WinList[$Durchlauf][1])
EndIf
Else
If $WinList[$Durchlauf][0] <> "" And IsVisible($WinList[$Durchlauf][1]) And $WinList[$Durchlauf][0] <> "Program manager" And $WinList[$Durchlauf][0] <> "Screenshots-Creator - Fensterauswahl" And $WinList[$Durchlauf][0] <> "Start" Then
_GUICtrlListBox_AddString($List1, $WinList[$Durchlauf][0])
_ArrayAdd($FensterHandls, $WinList[$Durchlauf][1])
EndIf
EndIf
Next
;~ Variablen:
Local $FotoFenster = ""
;~ While:
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
GUIDelete($FensterAuswahl)
ExitLoop
Case $Button1
Local $FotoFenster = _GUICtrlListBox_FindString($List1, GUICtrlRead($List1), True)
GUIDelete($FensterAuswahl)
ExitLoop
Case $Button2
GUIDelete($FensterAuswahl)
ExitLoop
EndSwitch
WEnd
If $FotoFenster <> "" Then
;~ Alle anderen Fensteer verstecken:
Local $FensterListe[1]
$WinList = WinList()
For $Durchlauf = 1 To $WinList[0][0]
If $WinList[$Durchlauf][0] <> "" And IsVisible($WinList[$Durchlauf][1]) And $WinList[$Durchlauf][0] <> "Program manager" And $WinList[$Durchlauf][1] <> $FensterHandls[$FotoFenster + 1] And $WinList[$Durchlauf][0] <> "Start" And ProcessExists("sidebar.exe") <> WinGetProcess($WinList[$Durchlauf][0]) Then
WinSetState($WinList[$Durchlauf][0], "", @SW_HIDE)
_ArrayAdd($FensterListe, $WinList[$Durchlauf][0])
EndIf
Next
;~ Fenster fotographieren:
_ScreenCapture_CaptureWnd($Pfad & "\BildNr." & $Nummer & ".jpg", $FensterHandls[$FotoFenster + 1], 0, 0, -1, -1, False) ;~ Foto machen
;~ Alle anderen Fenster einblenden
For $b In $FensterListe
WinSetState($b, "", @SW_SHOW)
Next
TrayTip("", "Foto erfolgreich erstellt.", 2, 1) ;~ Erfolgreich erstellt Info anzeigen
[/autoit] [autoit][/autoit] [autoit]$Nummer += 1 ;~ Nummer hochsetztn für das nächste Bild
EndIf
EndFunc ;==>_foto_von_Fenster
Func _foto() ;~ Screenshot eines Teilausschnittes erstellen
;~ Variablendeklaration:
Dim $Foto[4]
;~ Verdunklungs-Gui erstellen
Local $VerdunklungsGui = GUICreate("", @DesktopWidth * @DesktopWidth + 50, @DesktopHeight + 50, -15, -25, -1, 0x00000080)
GUISetBkColor(0xFFFFFF) ;~ Farbe: Weiß
GUISetCursor(3) ;~ + Kurser
GUISetState(@SW_SHOW, $VerdunklungsGui)
WinSetTrans($VerdunklungsGui, "", 50) ;~ Transparent: 50
WinSetOnTop($VerdunklungsGui, "", 1) ;~ On top
;~ Linke obere Kante:
TrayTip("", "Verschieb die Maus zur linken oberen Kante, und klicke.", 5, 1) ;~ Info anzeigen
While Not _IsPressed(01) ;~ Warten bid die linke Maustaste gedrückt wird
Sleep(50)
WEnd
;~ Mausposition als obere linke Kante speichern
$Maus = MouseGetPos()
$Foto[0] = $Maus[0]
$Foto[1] = $Maus[1]
;~ Fotobereich-Markierungs-Gui erstellen:
Local $MarkierungsGui = GUICreate("", 1, 1, $Foto[0], $Foto[1], 0x80000000 + 0x00800000, 0x00000008)
GUISetBkColor(0xFFC600) ;~ Farbe: Weiß
GUISetCursor(3) ;~ + Kurser
GUISetState(@SW_SHOW, $MarkierungsGui)
WinSetTrans($MarkierungsGui, "", 140) ;~ Transparent: 140
WinSetOnTop($MarkierungsGui, "", 1) ;~ On top
;~ Mauskordinaten einschränken:
_MouseTrap($Foto[0], $Foto[1], @DesktopWidth, @DesktopHeight)
;~ Rechte untere Kante:
TrayTip("", "Lasse die Maustaste los, wenn du an der unteren rechten Kante bist.", 5, 1) ;~ Info anzeigen
While _IsPressed(01) ;~ Warten bid die linke Maustaste losgelassen wird
Sleep(25)
$Maus = MouseGetPos()
WinMove($MarkierungsGui, "", $Foto[0], $Foto[1], $Maus[0] - $Foto[0], $Maus[1] - $Foto[1])
WEnd
TrayTip("", "", 0) ;~ Info ausbelden
[/autoit] [autoit][/autoit] [autoit];~ Mausposition als unteren rechten Kante speichern
$Maus = MouseGetPos()
$Foto[2] = $Maus[0]
$Foto[3] = $Maus[1]
;~ Guis ausbelden
WinSetOnTop($VerdunklungsGui, "", 0)
GUIDelete($VerdunklungsGui)
WinSetOnTop($MarkierungsGui, "", 0)
GUIDelete($MarkierungsGui)
;~ Foto erstellen:
_ScreenCapture_Capture($Pfad & "\BildNr." & $Nummer & ".jpg", $Foto[0], $Foto[1], $Foto[2], $Foto[3], False) ;~ Foto machen
;~ Mausposition entschränken
_MouseTrap()
TrayTip("", "Foto erfolgreich erstellt.", 2, 1) ;~ Erfolgreich erstellt Info anzeigen
[/autoit] [autoit][/autoit] [autoit]$Nummer += 1 ;~ Nummer hochsetztn für das nächste Bild
EndFunc ;==>_foto
Func _exit() ;~ Programm beeden
Exit
EndFunc ;==>_exit
Func IsVisible($handle)
If BitAND(WinGetState($handle), 2) Then
Return 1
Else
Return 0
EndIf
EndFunc ;==>IsVisible
#EndRegion ---Funktionen---
Magnus