Toon posts:

[Delphi + WinAPI] SHGETFILEINFO

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer met de API-call ShGetFileInfo informatie uit een bestand te halen vanuit Delphi. Ik heb uiteraard ShellApi in de uses-clausule bovenaan in m'n unit van waaruit ik deze call aanroep.

In de Win32 Developer's Reference staat deze call zo gedefinieerd:
code:
1
2
3
4
5
6
7
typedef struct _SHFILEINFO { // shfi  
    HICON hIcon; 
    int   iIcon; 
    DWORD dwAttributes; 
    char  szDisplayName[MAX_PATH]; 
    char  szTypeName[80]; 
} SHFILEINFO;

In ShellApi.pas staat deze vervolgens zo uitgewerkt:
code:
1
2
3
4
5
6
7
  _SHFILEINFOA = record
    hIcon: HICON;               { out: icon }
    iIcon: Integer;           { out: icon index }
    dwAttributes: DWORD;           { out: SFGAO_ flags }
    szDisplayName: array [0..MAX_PATH-1] of  AnsiChar; { out: display name (or path) }
    szTypeName: array [0..79] of AnsiChar;       { out: type name }
  end;

Het gaat mij om de member dwAttributes, want die informatie wil ik graag. Alleen het lukt me niet de inhoud daarvan te lezen. De Win32 helpfile zegt over deze dwAttributes:
Array of flags that indicates the attributes of the file object. For information about the flags, see the description of the IShellFolder::GetAttributesOf method.
Deze GetAttributesOf call geeft vervolgens als een HRESULT bijv de volgende waarden terug SFGAO_CANCOPY, SFGAO_CANDELETE, SFGAO_CANLINKetc. De vraag is:

hoe kan ik die dwAttributes nu uitlezen? Ik heb hem geprobeerd te vergelijken met SFGAO_CANCOPY zoals:

if dwAttributes = SF_CANCOPY then

maar ik heb geen flauw idee hoe het moet; die SFGAO_ waardes kent ie allemaal niet in Delphi, dus heeft iemand die redelijk bekend is met dit soort fratsen misschien een oplossing?

Verwijderd

Die constanten zijn gedefinieerd in ShlObj.pas

gebruik:
code:
1
2
  if dwAttributes and SFGAO_CANCOPY <> 0 then
    { DoeIets }