AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Wie im Datei-Eigenschaften Dialog zusätzliche Sicherheitsoption anzeigen lassen
Thema durchsuchen
Ansicht
Themen-Optionen

Wie im Datei-Eigenschaften Dialog zusätzliche Sicherheitsoption anzeigen lassen

Ein Thema von Harry Stahl · begonnen am 10. Nov 2019 · letzter Beitrag vom 11. Nov 2019
Antwort Antwort
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#1

Wie im Datei-Eigenschaften Dialog zusätzliche Sicherheitsoption anzeigen lassen

  Alt 10. Nov 2019, 13:23
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;
Miniaturansicht angehängter Grafiken
sicherheit.png  
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#2

AW: Wie im Datei-Eigenschaften Dialog zusätzliche Sicherheitsoption anzeigen lassen

  Alt 10. Nov 2019, 17:18
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 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

Geändert von Dalai (10. Nov 2019 um 17:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Wie im Datei-Eigenschaften Dialog zusätzliche Sicherheitsoption anzeigen lassen

  Alt 10. Nov 2019, 17:55
Vielen Dank für die Antwort.

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

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#4

AW: Wie im Datei-Eigenschaften Dialog zusätzliche Sicherheitsoption anzeigen lassen

  Alt 10. Nov 2019, 20:05
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 MyShellExecute('C:\somefile.ext', '', 0, 'properties'); .

Grüße
Dalai
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.538 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Wie im Datei-Eigenschaften Dialog zusätzliche Sicherheitsoption anzeigen lassen

  Alt 10. Nov 2019, 21:11
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...
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#6

AW: Wie im Datei-Eigenschaften Dialog zusätzliche Sicherheitsoption anzeigen lassen

  Alt 11. Nov 2019, 16:25
Ja, gegen Benutzerfehler hilft auch der beste Code nichts .

Grüße
Dalai
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:13 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