Danke UEZ, aber damit besteht das Problem auch![]()
Beiträge von Tweaky
-
-
Wow perfekt

Edit
Trotzdem habe ich noch eine Frage dazu.
Ich habe das ganze mal auf mehrere Monitore erweitert. Außerdem wird danach noch ein Screenshot als Datei abgelegt.
Wenn ich nun die DPI auf meinem 2. Bildschirm größer wie 100% einstellt, dann wird das eingefrorene Bild korrekt angezeigt.
Allerdings ist die abgelegte Datei nicht korrekt.
Bild verschoben_autoscaled.jpg
Weißt du warum sich dies unterschiedlich verhält?
Wenn ich die DPI des 1. Bildschirms ändere sieht beides gleich aus
AutoIt
Alles anzeigen#Region ;************ Includes ************ #Include <WinAPISysWin.au3> #include <GUIConstantsEx.au3> #include <ScreenCapture.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #EndRegion ;************ Includes ************ ; enum _PROCESS_DPI_AWARENESS -> https://msdn.microsoft.com/en-us/library/windows/desktop/dn280512(v=vs.85).aspx Global Enum $DPI_AWARENESS_INVALID = -1, $PROCESS_DPI_UNAWARE = 0, $PROCESS_SYSTEM_DPI_AWARE, $PROCESS_PER_MONITOR_DPI_AWARE Global Enum $Context_UnawareGdiScaled = -5, $Context_PerMonitorAwareV2, $Context_PerMonitorAware, $Context_SystemAware, $Context_Unaware Global Const $WM_DPICHANGED = 0x02E0, $WM_GETDPISCALEDSIZE = 0x02E4 $aAufloesung = _GetGlobalResolution() _WinAPI_SetDPIAwareness() Local Const $hBitmap = _ScreenCapture_Capture("", 0, 0, $aAufloesung[2] - 1, $aAufloesung[3] - 1, False) Local Const $hGUI = GUICreate("", $aAufloesung[2], $aAufloesung[3], 0, 0, $WS_POPUP, $WS_EX_TOPMOST) Local Const $iPic = GUICtrlCreatePic("", 0, 0, $aAufloesung[2] - 1, $aAufloesung[3] - 1) _WinAPI_DeleteObject(GUICtrlSendMsg($iPic, $STM_SETIMAGE, $IMAGE_BITMAP, $hBitmap)) GUISetState() _ScreenCapture_Capture("D:\test.jpg", 0, 0, $aAufloesung[2] - 1, $aAufloesung[3] - 1, False) ;Bild wird erstellt Do If GUIGetMsg() = $GUI_EVENT_CLOSE Then _WinAPI_DeleteObject($hBitmap) GUIDelete($hGUI) Exit EndIf Until False Func _WinAPI_SetDPIAwareness($hGUI = 0) Switch @OSBuild Case 6000 To 9199 If Not DllCall("user32.dll", "bool", "SetProcessDPIAware") Then Return SetError(1, 0, 0) ;requires Vista+ / Server 2008+ Return 1 Case 9200 To 13999 _WinAPI_SetProcessDpiAwareness($PROCESS_PER_MONITOR_DPI_AWARE) ;requires Win 8.1+ / Server 2012 R2+ If @error Then Return SetError(2, 0, 0) Return 1 Case @OSBuild > 13999 #cs Context_Unaware = ((DPI_AWARENESS_CONTEXT)(-1)), Context_SystemAware = ((DPI_AWARENESS_CONTEXT)(-2)), Context_PerMonitorAware = ((DPI_AWARENESS_CONTEXT)(-3)), Context_PerMonitorAwareV2 = ((DPI_AWARENESS_CONTEXT)(-4)), Context_UnawareGdiScaled = ((DPI_AWARENESS_CONTEXT)(-5)) #ce _WinAPI_SetProcessDpiAwarenessContext($Context_PerMonitorAwareV2, $hGUI, 1) If @error Then Return SetError(3, @error, 0) Return 1 EndSwitch Return -1 EndFunc ;==>_WinAPI_SetDPIAwareness Func _WinAPI_SetProcessDpiAwareness($DPIAware) ;https://docs.microsoft.com/en-us/windows/desktop/api/shellscalingapi/nf-shellscalingapi-setprocessdpiawareness Local $aResult = DllCall("Shcore.dll", "long", "SetProcessDpiAwareness", "int", $DPIAware) ;requires Win 8.1+ / Server 2012 R2+ If @error Then Return SetError(1, 0, 0) Return 1 EndFunc ;==>_WinAPI_SetProcessDpiAwareness Func _WinAPI_SetProcessDpiAwarenessContext($DPIAwareContext = $Context_PerMonitorAware, $hGUI = 0, $iMode = 1) $DPIAwareContext = ($DPIAwareContext < -5) ? -5 : ($DPIAwareContext > -1) ? -1 : $DPIAwareContext $iMode = ($iMode < 1) ? 1 : ($iMode > 3) ? 3 : $iMode Switch $iMode Case 1 Local $hDC = _WinAPI_GetDC($hGUI) Local $aResult1 = DllCall("user32.dll", "int", "GetDpiFromDpiAwarenessContext", "ptr", $hDC) ;requires Win10 v1803+ / Server 2016+ If @error Or Not IsArray($aResult1) Then Return SetError(11, 0, 0) _WinAPI_ReleaseDC(0, $hDC) ;https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setprocessdpiawarenesscontext Local $aResult = DllCall("user32.dll", "Bool", "SetProcessDpiAwarenessContext", "int", $aResult1[0] + $DPIAwareContext) ;requires Win10 v1703+ / Server 2016+ If @error Or Not IsArray($aResult) Then Return SetError(12, 0, 0) Case 2 ;~ If Not $hGUI Then $hGUI = WinGetHandle(AutoItWinGetTitle()) Local $aResult2 = DllCall("user32.dll", "int", "GetWindowDpiAwarenessContext", "ptr", $hGUI) ;requires Win10 v1607+ / no server support If @error Or Not IsArray($aResult2) Then Return SetError(21, 0, 0) Local $aResult = DllCall("user32.dll", "Bool", "SetProcessDpiAwarenessContext", "int", $aResult2[0] + $DPIAwareContext) ;requires Win10 v1703+ / Server 2016+ If @error Or Not IsArray($aResult) Then Return SetError(22, 0, 0) Case 3 Local $aResult31 = DllCall("user32.dll", "ptr", "GetThreadDpiAwarenessContext") ;requires Win10 v1607+ / no server support If @error Or Not IsArray($aResult31) Then Return SetError(31, 0, 0) Local $aResult32 = DllCall("user32.dll", "int", "GetAwarenessFromDpiAwarenessContext", "ptr", $aResult31[0]) ;requires Win10 v1607+ / no server support If @error Or Not IsArray($aResult32) Then Return SetError(32, 0, 0) Local $aResult = DllCall("user32.dll", "Bool", "SetThreadDpiAwarenessContext", "int", $aResult32[0] + $DPIAwareContext) ;requires Win10 v1607+ / no server support If @error Or Not IsArray($aResult) Then Return SetError(33, 0, 0) EndSwitch Return 1 EndFunc ;==>_WinAPI_SetProcessDpiAwarenessContext Func _GetGlobalResolution() Local $aRes[4], $hWindow, $stRET $hWindow = _WinAPI_GetDesktopWindow() $stRET = _WinAPI_GetWindowPlacement($hWindow) If Not @error Then $aRes[0] = DllStructGetData($stRET, 'rcNormalPosition', 1) ; left $aRes[1] = DllStructGetData($stRET, 'rcNormalPosition', 2) ; top $aRes[2] = DllStructGetData($stRET, 'rcNormalPosition', 3) ; right $aRes[3] = DllStructGetData($stRET, 'rcNormalPosition', 4) ; bottom Return $aRes Else Return SetError(1, 0, 0) EndIf EndFunc ;==>_GetGlobalResolution -
Ne es soll nur das Bild eingeforen werden.
An eine Kopie des Desktops habe ich auch schon gedacht. Hoffe aber, dass es für das einfrieren einen eigenen Befehl gibt.
-
Hi,
bisher verwende ich immer #AutoIt3Wrapper_icon um der exe-Datei ein Icon mitzugeben.
Nun habe ich aber #pragma compile(Icon, ...) entdeckt.
Was ist da der Unterschied, bzw. was ist besser?
-
Hi,
wenn unter Win 10 das Tool "Ausschneiden und Skizzieren" verwendet wird, wird der Bildschirminhalt eingefroren (auch wenn ein Video abgespielt wird).
Wie macht man das mit AutoIt?
-
Was ist eigentlich der Vorteil wenn man Bilder usw direkt aus dem Speicher lädt? Ist es schneller als wenn man es in den Temp-Ordner entpackt und dann verwendet?
-
Traut sich keiner

-
So, wo sind die Fußballgötter unter euch.
Mittippen, in 3 Tagen am Freitag gehts los mit dem DFB-Pokal.
Bitte macht mit, ich will nicht schon wieder Erster werden

-
-
Hi,
es gibt eine neue Version der deutsch / englischen Hilfe für AutoIt 3.3.14.5.
deutsche Hilfe / deutsche au3.api / deutsche Beispiele
Schaut euch die Hilfe bitte genau an.
Fehler könnt ihr dann hier melden.
Gibt es eine deutsche Funktionsbeschreibung, so wird diese direkt angezeigt und man kann man durch das Flaggen-Symbol rechts oben von deutsch auf englisch umstellen.
Gibt es noch keine deutsche Funktionsbeschreibung so wird direkt die englische Funktionsbeschreibung angezeigt.
Diese Dateien können hier übersetzt werden.
Danke an alle Übersetzer und Helfer.
Viel Spaß damit
-
Wie groß der Aufwand wäre, kann ich gar nicht sagen, da ich davon keine Ahnung habe.
Einfaach so wie Bitnugger beschrieben hat suchen, dann klappts besser
-
gesehen und hinzugefügt

-
-
-
-
Hast du jetzt noch den DFB-Pokal dazugenommen?
-
Wow

Vielen, vielen Dank BugFix

Ich habe neue Dateien hochgeladen:
-
-
-
BugFix Wow, danke für das schnelle Übersetzen.
Passt soweit bis auf eine Kleinigkeit die ich selbst geändert habe.
Bei ###ReturnValue### muß nach Erfolg bzw. Fehler ein Tab stehen, keine Leerzeichen.
In Neue Dateien 08 wurden wieder neue Dateien hochgeladen