![]() |
ShellExecute liefert ERROR_ACCESS_DENIED
Mit den unten stehenden Prozeduren will ich einen Beitrag aus Wikipedia anzeigen bzw. in GoogleMaps eine bestimmte Position.
Das funktioniert nur dann problemlos, wenn der Internet Explorer geöffnet ist. Ist der IE nicht geöffnet gibt ShellExecute als Returncode 5 (ERROR_ACCESS_DENIED) zurück. Weiß jemand was der Grund für dieses Verhalten, und ob und wie man das beheben kann.
Delphi-Quellcode:
type
TGeoPos=packed Record Latitude:Extended; Longitude:Extended; end; PROCEDURE ShowGoogleMaps(GP:TGeoPos); var S,S1,S2:String; begin S1:=Trim(FloatToStrF(GP.Latitude,ffFixed,6,6)); S2:=Trim(FloatToStrF(-GP.Longitude,ffFixed,6,6)); S:='http://maps.google.de/maps?q='+S1+','+S2+'&z=12'; ShellExecute(0,'open',PWideChar(S),nil,nil,SW_SHOWNORMAL); end; PROCEDURE ShowWikipedia(const Term:String); var S:String; begin S:='https://de.wikipedia.org/wiki/'+Term; ShellExecute(0,'open',PWideChar(S),nil,nil,SW_SHOWNORMAL); end; |
AW: ShellExecute liefert ERROR_ACCESS_DENIED
Schau mal bitte hier:
![]() Das hieße: Statt SW_SHOWNORMAL bitte SW_SHOWDEFAULT nehmen. Literatur dazu: ![]() |
AW: ShellExecute liefert ERROR_ACCESS_DENIED
Zitat:
Extended: Diesen Typen sollte man besser nicht verwenden und ihn nur für interne Berechnungen benutzen. Und ich glaub kaum, dass die Position auf der Erde im Mikrometerbereich wirklich notwendig ist. :roll: Double (12 Nachkommastellen) oder gar Single (5 Nachkommastellen) Aber das Wichtigste: Immer RICHTIGE Typen verwenden? :!: String > PChar > ShellExecute ODER WideString/UnicodeString > PWideChar > ShellExecuteW Gut, ist kein wirklicher Fehler, aber wozu ist Trim da? Da gibt es doch keine Ausführungszeichen. Und statt der 3 Variablen und 3 Codezeilen hätte ich eher ein ![]() |
AW: ShellExecute liefert ERROR_ACCESS_DENIED
Zitat:
Problem gelöst. |
AW: ShellExecute liefert ERROR_ACCESS_DENIED
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
So, ich glaube ich bin auf alles eingegangen. Nun erzähl mir mal, was das mit dem in #1 geschilderten Problem zu tun hatte? |
AW: ShellExecute liefert ERROR_ACCESS_DENIED
Ja, bei dir ist "aktuell" PChar ein Alias für PWideChar und leider zeigt das CodeInsight den internen Typen an. (beim Compilieren wurde der Alias ersetzt)
Wenn du dir die Deklaration von ShellExecute ansiehst, siehst du den richtigen Typen. In Bezug auf die WinAPI ist das Muster aber meistens recht leicht zu merken. String > PChar > ShellExecute AnsiString > PAnsiChar > ShellExecuteA WideString/UnicodeString > PWideChar > ShellExecuteW PS: Solches "Hat ja auch funktioniert" führte bei der Umstellung von ANSI zu Unicode zu problemen, da es danach plötzlich nicht mehr funktionierte. Das Selbe betrifft auch 32 und 64 Bit. Hätte aber oft funktioniert, wenn die Typen wirklich gepasst hätten. :zwinker: Vorallem Komplikationen beim Upgrade und für die Wiederverwendbarkeit der Codes, ist es immer Ratsam auf die Typen zu achten. Meistens nimmt man den Typen der Eingangsparameter und wählt darauf die Casts und Funktionen, oder ausgehend von der Funktion wird der Typ des Eingangsparameters ausgewählt. |
AW: ShellExecute liefert ERROR_ACCESS_DENIED
Hallo Klaus (Amateurprofi), wie ruft Du ShowGoogleMaps auf? Ich wollte das Ganze mal ausprobieren mit einem Button und einem edit-Feld auf einer Form.
Die Geoposition wollte ich in das edit-Feld eintragen (welches Format haben diese?) und dann wollte ich per Button diese Pos. in GoogleMaps suchen lassen. Irgendwie scheitere ich bei der Übergabe von (GP:TGeopos). Ich selle mich wohl zu blöd dazu an. |
AW: ShellExecute liefert ERROR_ACCESS_DENIED
Zitat:
|
AW: ShellExecute liefert ERROR_ACCESS_DENIED
Die Such-Syntax lautet
https://www.google.de/maps?q=suchbegriff&z=15 Er missbraucht das, da man auch nach Koordinaten suchen kann, anstatt sie anzugeben (zu beachten sind die Dezimaltrennzeichen in englischem Format) http://maps.google.de/maps?q=51.0535283,13.7238866&z=15 Die korrekten URLs lauten z.B. wie folgt (mit @ wird die Angabe für Position und Zoom definiert) https://www.google.de/maps/@51.0535283,13.7238866,15z https://www.google.de/maps/search/suchbegriff/@51.0535283,13.7238866,15z https://www.google.de/maps/place/Zwinger/@51.0535283,13.7238866,15z |
AW: ShellExecute liefert ERROR_ACCESS_DENIED
Eine Google-Maps-Urls sieht so aus:
Code:
Allgemein:
https://www.google.de/maps/@53.5437308,9.9867191,15z
Code:
http://maps.google.com/maps/@<lat>,<long>,<zoomfaktor>z
Delphi-Quellcode:
Hierbei gilt: Der Dezimalseparator in den Editfeldern ist der Punkt.
sUrl := Format('https://www.google.de/maps/@%s,%s,%sz', [editLatitude.Text, editLongitude.Text, editZoomfaktor.Text]);
ShellExecute(0,'open',PWideChar(sUrl),nil,nil,SW_SHOWDEFAULT); Zuerst aus den Zeichenfolgen der Editfelder Extended zu machen, um die dann in ShowGoogleMaps wieder in Zeichenfolgen zu verwandeln, halte ich für übertrieben. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:46 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