![]() |
Windows 7 Fotoanzeige Workaround
Moin zusammen,
ich möchte mich einem aktuellen Problem widmen, brauche da aber eure Erfahrung, evtl. hat schon jemand eine Lösung die er teilen mag, man muss das Rad ja nicht neu erfinden. Problematik: Ab Android 10 werden die Bilder, die in Apps (mit der Kamera) gemacht und komprimiert werden, leider für die Windows Fotoanzeige in windows 7 (und ggf. darunter) nicht mehr angezeigt (nur das Vorschaubild bei der Datei) und es gibt eine leicht irreführende Fehlermeldung: "Das Bild kann nicht angezeigt werden, da möglicherweise nicht genügend Arbeitsspeicher zur Verfügung steht. Schließen sie nicht verwendete Programme, oder geben sie Festplattenspeicher frei (wenn die Festplatte fast voll ist). Versuchen sie es anschließend erneut." Wir haben dazu leider keine Lösung innerhalb von Windows 7 gefunden und wollten ein anderes Programm als die Fotoanzeige verwenden. Diese bieten leider viel zu viele Funktionen (die Standard Fotoanzeige war hierfür ideal). Idee ist nun das in Delphi quasi selber nachzubauen (das TImage zeigt das Bild korrekt an), leider habe ich keine Ahnung wie Windows die Dateiinformation weitergibt, wenn man das Programm als "Standardprogramm" für Bilder hinterlegt hat. Von anderen Sachen wie "Bild drehen" etc. will ich erst mal noch gar nicht reden :( Oder ich speicher es einfach als bmp und öffne es dann in der Fotoanzeige (also als Middleware), das geht auch. Aber dafür muss ich wissen, wie Windows die Dateiinformation übergibt (Parameter?). |
AW: Windows 7 Fotoanzeige Workaround
Zitat:
Unter Windows 10 kam die Unterstützung glaube ich 2018. Das uralte Windows 7 hat natürlich kein solches Funktionsupdate mehr bekommen. Delphi selbst kann das Format auch nicht lesen, wenn das Betriebssystem es nicht kann. Unter Windows 10 kann man die Imaging-Routinen von Windows dafür nutzen. Es bleibt daher entweder nicht nur bei Android sondern auch bei Windows auf eine neue Version zu wechseln oder Drittanbieterlösungen wie diese auszuprobieren: ![]() Zitat:
|
AW: Windows 7 Fotoanzeige Workaround
Danke @ jaenicke. Ich war mir dessen nicht so sicher :)
Für den, den es interessiert hier der Code, jedoch für Lazarus:
Delphi-Quellcode:
Geht sicherlich auch schöner ohne Form etc. aber das sollte bis zur Umstellung auf W10 reichen.
unit Middleware;
{$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, LCLIntf, Windows; type { TFotoviewerMiddleware } TFotoviewerMiddleware = class(TForm) Image1: TImage; procedure FormCreate(Sender: TObject); private public end; var FotoviewerMiddleware: TFotoviewerMiddleware; implementation {$R *.lfm} { TFotoviewerMiddleware } procedure TFotoviewerMiddleware.FormCreate(Sender: TObject); var Filename : WideString; begin Application.ShowMainForm := false; if ParamStr(1) <> '' then begin Image1.Picture.LoadFromFile(ParamStr(1)); Filename := Widestring(Extractfilename(ParamStr(1))); Filename := Widestring(LeftStr(Filename, Length(Filename) - 3)); Filename := Widestring('C:\temp\' + Filename + 'bmp'); Image1.Picture.SaveToFile(Filename); OpenDocument(Filename); ShellexecuteW(Handle, 'open', PWideChar(Filename), PWideChar(''), nil, SW_MAXIMIZE); end; Application.Terminate; end; end. |
AW: Windows 7 Fotoanzeige Workaround
Hat sich erledigt :)
|
AW: Windows 7 Fotoanzeige Workaround
Den Dateinamen kannst du auch einfach mit
![]() Lazarus kann HEIC? Oder das ist doch kein HEIC, sondern irgendetwas anderes. Denn mit dem Picture.SaveToFile wird ja auch normalerweise nichts konvertiert nur weil der Dateiname anders ist, sondern nur im aktuellen Format neu gespeichert. Egal, die Hauptsache ist ja, dass es funktioniert. Denn für Windows 7 lohnen sich ja keine großen Untersuchungen mehr. |
AW: Windows 7 Fotoanzeige Workaround
Nein, zumal auch eine Umstellung auf W10 mehr oder weniger im Gange ist.
Weißt du (oder von mir aus auch jemand anders) wie ich den Registry Key für die Standard Programme richtig ändere? ... habs auf einem Testsystem mal manuell gesetzt, er setzt dann folgende Werte, das werde ich dann per Script auch setzen und hoffen das es klappt :) HKEY_CLASSES_ROOT\Applications\*.exe\shell\open\co mmand\ (Standard) "c:\custom\*.exe" "%1" HKEY_USERS\SSID\Software\Classes\Applications\*.ex e\shell\open\command\ (Standard) "c:\custom\*.exe" "%1" HKEY_USERS\SSID\Software\Microsoft\Currentversion\ Explorer\FileExts\.jpg\UserChoice ProgId REG_SZ Applications\*.exe HKEY_USERS\SSID_Classes\Applications\*.exe\shell\o pen\command\ (Standard) "c:\custom\*.exe" "%1" |
AW: Windows 7 Fotoanzeige Workaround
Es sollte unter Windows 7 genügen folgende Werte anzuschauen:
Code:
Dort kannst du nun unter shell\open\command\ (Standard) deine Anwendung eintragen.
HKEY_CLASSES_ROOT\.jpg
--> unter dem Standardwert steht etwas wie jpegfile Dann suchst du diesen Wert unter CLASSES_ROOT, z.B.: HKEY_CLASSES_ROOT\jpegfile Wichtig: Hier hat sich ab Vista viel geändert, weil Programme diese Änderung oft ohne Zustimmung des Benutzers gemacht haben. Unter Windows 10 wird immer nach einer Registrierung eines neuen Programms für einen Dateityp der Benutzer gefragt, wenn er das nächste Mal eine solche Datei öffnen möchte. |
AW: Windows 7 Fotoanzeige Workaround
Hallo jaenicke,
danke für den Input, wir werden das nur bei den W7 Rechnern ändern, da das Problem bei W10 ja nicht besteht. Ich test gerade noch die Registry zu ändern, da ich das aber mit einem AutoIt Script mache, wollte ich euch hier damit nicht behelligen ;) Aber geholfen hast du mir dennoch schon sehr. |
AW: Windows 7 Fotoanzeige Workaround
Zitat:
Code:
reg import blub.reg
|
AW: Windows 7 Fotoanzeige Workaround
Wir können jetzt noch paar Seiten um den heißen Brei drum rum reden. Daher jetzt mal Butter bei die Fische: Welche Erweiterung und mal den Anfang der Datei mit HxD ansehen.
|
AW: Windows 7 Fotoanzeige Workaround
@Redeemer: .jpg und es sind Bilder die ab Android 10 mit einem beliebigen Handy gemacht wurden.
|
AW: Windows 7 Fotoanzeige Workaround
Hab jetzt alle Registryeinträge auf einem weiteren Testsystem geändert, die ich finden konnte, wo meine Middleware im Regedit eingetragen wurde nach dem ich sie als "Standard" im Öffnen Mit Dialog ausgewählt habe.
Resumé ist: Die Änderungen ignoriert Windows bis zum Neustart, falls das noch wen interessiert. |
AW: Windows 7 Fotoanzeige Workaround
Du solltest das mit WM_SETTINGCHANGE veröffentlichen können. (explorer.exe abschießen und wieder starten wäre die dreckige (aber einfache) Lösung.)
|
AW: Windows 7 Fotoanzeige Workaround
Danke für den Tipp.
Ich muss mal schauen wie ich das entsprechend dann programmiertechnisch in AutoIt umsetzen kann, da ich mit WM_SETTINGCHANGE noch nie gearbeitet habe und das für mich absolutes Neuland ist. |
AW: Windows 7 Fotoanzeige Workaround
Inzwischen sind eine Menge Win32 API-Funktionen im AutoIT bereits drin - meist in der Unit WinAPI.au3. Wirf einen Blick auf die Funktion _WinAPI_SystemParametersInfo(). Mit den passenden Parametern gefüttert kann man damit WM_SETTINGCHANGE schicken.
Grüße Dalai |
AW: Windows 7 Fotoanzeige Workaround
Die Funktion hatte ich dort bereits auch schon gesehen, mir fehlt da jedoch leider das Verständnis was ich da wie ansprechen muss, damit ich das gewünschte Ergebnis erziele.
Ich möchte bei einem solchen Aufruf ja nichts verändern. Ich gehe davon aus, das ich bei deinem Beipiel (_WinAPI_SystemParametersInfo()) das ich $SPIF_UPDATEINIFILE mitgeben muss. Aber was davor rein muss, bin ich aktuell überfordert und komme mir etwas blöd vor das nicht selber hin zu bekommen eine Simple Funktion mit korrekten Werten zu füllen. _WinAPI_SystemParametersInfo("Screen saver parameters", "SPI_GETSCREENSAVESECURE", ?, $SPIF_UPDATEINIFILE) ;?? |
AW: Windows 7 Fotoanzeige Workaround
Die Parameter sind dieselben wie in der Win32 API-Funktion
![]()
Code:
Du kannst auch Informationen mit einer der $SPI_GET* Actions ermitteln und sie unverändert mit $SPI_SET* wieder setzen. Hauptsache es wird $SPIF_SENDCHANGE als Flag benutzt, damit WM_SETTINGCHANGE verschickt wird. Ungetestetes Beispiel:
_WinAPI_SystemParametersInfo($SPI_SETCURSORSHADOW, 0, 1, BitOr($SPIF_UPDATEINIFILE, $SPIF_SENDCHANGE))
Code:
Grüße
Global $iParam = 0, $vParam
_WinAPI_SystemParametersInfo($SPI_GETCURSORSHADOW, $iParam, $vParam, 0) _WinAPI_SystemParametersInfo($SPI_SETCURSORSHADOW, $iParam, $vParam, BitOr($SPIF_UPDATEINIFILE, $SPIF_SENDCHANGE)) Dalai |
AW: Windows 7 Fotoanzeige Workaround
Danke schon mal Dalai, so habe ich zumindest den Aufruf der Funktion nun besser verstanden, wie ich das aus den Windows Infos raus lesen muss.
Zum gewünschten Erfolg führt es leider dennoch nicht. Edit: Evtl. liegt hier noch ein anderes Problem vor. Ich muss noch mal schauen. Jetzt will er das trotz Registryänderungen nicht mehr nehmen -.- |
AW: Windows 7 Fotoanzeige Workaround
Konnte das Registry-Problem nun erst mal wieder lösen, musste von Current_User weg und direkt über die SSID des Benutzers die Werte setzen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz