Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Wie im Datei-Eigenschaften Dialog zusätzliche Sicherheitsoption anzeigen lassen (https://www.delphipraxis.net/202492-wie-im-datei-eigenschaften-dialog-zusaetzliche-sicherheitsoption-anzeigen-lassen.html)

Harry Stahl 10. Nov 2019 12:23

Wie im Datei-Eigenschaften Dialog zusätzliche Sicherheitsoption anzeigen lassen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Aus diesem Thread bin ich darauf aufmerksam geworden, dass man in dem Dateieigenschafts-Dialog eine zusätzliche Option zur Sicherheit anzeigen lassen kann (ganz unten).

Wenn ich den Dialog programmgesteuert aufrufe, habe ich das bislang mit der unten stehenden Funktion gemacht, da fehlt aber der untere Eintrag zur Sicherheit. Was muss ich ändern, damit dieser auch angezeigt wird?

Delphi-Quellcode:
function ShowProperties(hWndOwner: HWND; const FileName: string;
                        Registerkarte: PChar): Boolean;
var
  Info: TShellExecuteInfo;
begin
  { Fill in the SHELLEXECUTEINFO structure }
  with Info do begin
    cbSize := SizeOf(Info);
    fMask := SEE_MASK_NOCLOSEPROCESS or
             SEE_MASK_INVOKEIDLIST or
             SEE_MASK_FLAG_NO_UI;
    wnd := hWndOwner;
    lpVerb := 'properties';
    lpFile := pChar(FileName);
    lpParameters := registerkarte;
    lpDirectory := nil;
    nShow := 0;
    hInstApp := 0;
    lpIDList := nil;
  end;

  { Call Windows to display the properties dialog. }
  Result := ShellExecuteEx(@Info);
end;

Dalai 10. Nov 2019 16:18

AW: Wie im Datei-Eigenschaften Dialog zusätzliche Sicherheitsoption anzeigen lassen
 
Nur zur Info: Dieses Element wird ausschließlich dann angezeigt, wenn die Datei einen NTFS ADS (Alternate Data Stream) hat, der :Zone.Identifier:$DATA heißt und einen bestimmten Inhalt hat:
Code:
[ZoneTransfer]
ZoneId=3
Sobald man auf Zulassen klickt, wird der ADS entfernt.

Aber zum Problem. Du nutzt das Flag SEE_MASK_INVOKEIDLIST, was laut MS
Zitat:

SEE_MASK_INVOKEIDLIST overrides and implies SEE_MASK_IDLIST.
SEE_MASK_IDLIST gibst du aber nicht an (kein Problem soweit), aber du übergibst für lpIDList explizit
Delphi-Quellcode:
nil
, obwohl MS sagt
Zitat:

The lpIDList member must point to an ITEMIDLIST structure.
https://docs.microsoft.com/de-de/win...llexecuteinfoa

Es gibt da also eine Diskrepanz der Angaben. Probier's mal ohne SEE_MASK_INVOKEIDLIST.

Grüße
Dalai

Harry Stahl 10. Nov 2019 16:55

AW: Wie im Datei-Eigenschaften Dialog zusätzliche Sicherheitsoption anzeigen lassen
 
Vielen Dank für die Antwort.

Wenn ich das weglasse, gibt Result von ShellExecuteInfo "false" zurück und der Dialog wird gar nicht angezeigt...

Dalai 10. Nov 2019 19:05

AW: Wie im Datei-Eigenschaften Dialog zusätzliche Sicherheitsoption anzeigen lassen
 
Ist schon eine Weile her, dass ich mit dem Thema 'properties' zu tun hatte, daher war mir nicht mehr klar, dass SEE_MASK_INVOKEIDLIST tatsächlich gebraucht wird.

Bei mir funktioniert folgender Code (zusammengestrichen für dieses Thema) einwandfrei, um den Eigenschaften-Dialog einer Datei anzuzeigen. Falls die Datei einen entsprechenden ADS hat, erscheint auch der "Sicherheits"hinweis und das "Zulassen":
Delphi-Quellcode:
function MyShellExecute(const AExecutable, AParams: string;
                        const AHandle: THandle = 0;
                        const AVerb: string = '';
                        const AShow: integer = SW_SHOWNORMAL): Boolean;
const SEE_MASK_DEFAULT = $0;
var SEI: TShellExecuteInfo;
begin
    FillChar(SEI, SizeOf(SEI), 0);
    SEI.lpVerb:= PChar(AVerb);
    SEI.fMask:= SEE_MASK_INVOKEIDLIST;
    SEI.Wnd:= AHandle;
    SEI.lpFile:= PChar(AExecutable);
    SEI.nShow:= AShow;
    SEI.cbSize:= SizeOf(SEI);
    Result:= ShellExecuteEx(@SEI);
end;
Aufruf z.B. mit
Delphi-Quellcode:
MyShellExecute('C:\somefile.ext', '', 0, 'properties');
.

Grüße
Dalai

Harry Stahl 10. Nov 2019 20:11

AW: Wie im Datei-Eigenschaften Dialog zusätzliche Sicherheitsoption anzeigen lassen
 
Habe jetzt gemerkt, dass ich im Explorer auf eine Namensähnliche Datei (beide im Download-Ordner) geklickt hatte, bei meinen Versuchen aber eine andere Datei ausgewählt habe, die das Flag wohl nicht mehr hatte.

Meine Funktion funktionierte also doch einwandfrei, bin hier nur einer blöden Verwechselung unterlegen.

Sorry...:oops:

Dalai 11. Nov 2019 15:25

AW: Wie im Datei-Eigenschaften Dialog zusätzliche Sicherheitsoption anzeigen lassen
 
Ja, gegen Benutzerfehler hilft auch der beste Code nichts :mrgreen:.

Grüße
Dalai


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz