Est ce que quelqu'un sait se servir de cette interface et de la structure EXP_DARWIN_LINK ?
Est ce que quelqu'un sait se servir de cette interface et de la structure EXP_DARWIN_LINK ?
Bonjour,
Quel est le sens de ta question : obtenir la structure ou l'utiliser ?
Pour l'obtenir ce n'est pas trés compliqué; pour l'utiliser c'est une autre paire de manche...
Le header Delphi qui défini les structures, objets com (guid...), constantes... est disponible :
http://www.whirlingdervishes.com/nse...les/source.php
Pascal
Je cherche a m'en servir pour récupérer les chemins d'accés des apllications winword, etc... à partir des raccourcis.
Nicky,
j'ai modifier ta fonction pour lire les shortcuts... ca permet de trouver le
MSI ID de word...
ca donne la chaine de caractere suivante...pour word2k....
56,!!gxsf(Ng]qF`H{LsWORDFiles>llT]jI{jf(=1&L[-81-]
J'ignore cependant comment trouver le path de word a partir de cette string.
voici la fonction modifier:
la string dans sMSI_ID se retrouve un peut partout dans les registres...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 function LoadLink ( aLink: String; var FileLink: TFileLink ): Boolean; var VBuff: Integer; Psl: IShellLink; Ppf: IPersistFile; FBuff: array [0..260] of Char; FLinkFile: array [0..260] of WChar; FindData32: WIN32_FIND_DATA; //** Psldl: IShellLinkDataList; sldf:SHELL_LINK_DATA_FLAGS; ppDataBlock:Pointer; pDarwinData:pExpDarwinLink; sMSI_ID:string; begin VBuff := 0; Result := False; MultiByteToWideChar ( CP_ACP, 0, PChar(aLink), -1, FLinkFile, 260 ); CoInitialize ( nil ); if ( CoCreateInstance ( CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IID_IShellLinkA, Psl ) = S_OK ) then begin Psl . QueryInterface ( IID_IPersistFile , Ppf ); Ppf . Load ( FLinkFile , STGM_READ ); //*** Querry interface to ShellLinkDataList *** Psl . QueryInterface (IID_ShellLinkDataList,Psldl); //*** try to read shortcut flag *** if Psldl.GetFlags( sldf)=S_OK then begin if ( (sldf and SLDF_HAS_DARWINID)= SLDF_HAS_DARWINID) then begin //*** here Darwin situation! *** //*** so get information! *** if (Psldl.CopyDataBlock(EXP_DARWIN_ID_SIG ,ppDataBlock)=S_OK)then begin pDarwinData:=ppDataBlock; sMSI_ID :=pDarwinData.szDarwinID; localfree(Cardinal(ppDataBlock)); ppDataBlock:=nil //*** Here sMSI_ID="56,!!gxsf(Ng]qF`H{LsWORDFiles>llT]jI{jf(=1&L[-81-]" //*** But I don't know wath to do with! *** end; end; end; Psl . GetPath ( FBuff , 260 , FindData32 , SLGP_UNCPRIORITY ); FileLink . Path := FBuff; Psl . GetDescription ( FBuff , 260 ); FileLink . Description := FBuff; Psl . GetIconLocation ( FBuff , 260 , VBuff ); FileLink . IconFile := FBuff; FileLink . IconIndex := VBuff; Psl . GetWorkingDirectory ( FBuff , 260 ); FileLink . WorkingDirectory := FBuff; Psl . GetArguments ( FBuff , 260 ); FileLink . Arguments := FBuff; Psl . GetShowCmd ( VBuff ); FileLink . ShowCmd := VBuff; Result := True; end; CoUninitialize (); end;
mais je vois pas comment faire une association avec le path de winword.exe...
peut-etre quelqu'un a une idée?
Comment dupliquer un disque...ça vous intéresse?
Tutoriel et code source delphi ici
J'ai finit par trouver et ça donne :
et avec ça je trouve le bon chemin dans FileLink . Path.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 //--------------------------------------------------------------------------- function LoadLink ( aLink: String; var FileLink: TFileLink ): Boolean; var VBuff: Integer; Psl: IShellLink; Ppf: IPersistFile; FBuff: array [0..260] of Char; FLinkFile: array [0..260] of WChar; aResult: HRESULT; ItemList: PItemIDList; begin VBuff := 0; Result := False; MultiByteToWideChar ( CP_ACP, 0, PChar(aLink), -1, FLinkFile, 260 ); CoInitialize ( nil ); if ( CoCreateInstance ( CLSID_ShellLink, nil, CLSCTX_INPROC_SERVER, IID_IShellLinkA, Psl ) = S_OK ) then begin Psl . QueryInterface ( IID_IPersistFile , Ppf ); Ppf . Load ( FLinkFile , STGM_READ ); aResult := Psl . Resolve ( HInstance, SLR_UPDATE or SLR_INVOKE_MSI or SLR_NO_UI ); if ( aResult <> S_OK ) then Exit; aResult := Psl . GetIDList ( ItemList ); if ( aResult <> S_OK ) then Exit; SHGetPathFromIDLIst ( ItemList, FBuff ); FileLink . Path := FBuff; Psl . GetDescription ( FBuff , 260 ); FileLink . Description := FBuff; Psl . GetIconLocation ( FBuff , 260 , VBuff ); FileLink . IconFile := FBuff; FileLink . IconIndex := VBuff; Psl . GetWorkingDirectory ( FBuff , 260 ); FileLink . WorkingDirectory := FBuff; Psl . GetArguments ( FBuff , 260 ); FileLink . Arguments := FBuff; Psl . GetShowCmd ( VBuff ); FileLink . ShowCmd := VBuff; Result := True; end; CoUninitialize (); end; //---------------------------------------------------------------------------
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager