Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Lancer l'exécution d'un raccourci à partir du Shell32.dll

14 réponses
Avatar
HD
Bonjour,

Comment peut on lancer l'exécution d'un raccourci directement par une ligne
de commande avec le Shell32.dll ?

Merci d'avance pour votre aide.
--
@+
HD

10 réponses

1 2
Avatar
Thierry
Bonjour,

HD a écrit :

Comment peut on lancer l'exécution d'un raccourci directement par une
ligne de commande avec le Shell32.dll ?



Hein ???

--
« Always look at the bright side of the life... »
Avatar
HD
>> Comment peut on lancer l'exécution d'un raccourci
directement par une ligne de commande avec le
Shell32.dll ?


Hein ???



Pour lancer un raccourci on peut cliquer dessus, la BdR (Base de registre)
va alors être intérrogée pour savoir à quel programme un fichier .lnk est
associé. C'est après tout un parcours dans la BdR que le Shell32.dll va
"analyser" le fichier .lnk pour ouvrir le programme ou le fichier voulut.

Je voudrais savoir si il existe une commande du style :

Rundll.exe Shell32.dll,MaFonction Monfichier.lnk

Pour exécuter le fichier de lien voulut.

--
@+
HD
Avatar
Thierry
Bonjour,

HD a écrit :

Je voudrais savoir si il existe une commande du style :

Rundll.exe Shell32.dll,MaFonction Monfichier.lnk

Pour exécuter le fichier de lien voulut.



comprend toujours pas.
Par prog : ShellExecute (verb = "open")
En mode commande : path du lien suffit.


--
« Always look at the bright side of the life... »
Avatar
Jean-Claude BELLAMY
Dans le message news:ccj4qk$2d7m$ ,
HD s'est ainsi exprimé:

Comment peut on lancer l'exécution d'un raccourci
directement par une ligne de commande avec le
Shell32.dll ?


Hein ???



Pour lancer un raccourci on peut cliquer dessus, la BdR (Base de
registre) va alors être intérrogée pour savoir à quel programme un
fichier .lnk est associé. C'est après tout un parcours dans la BdR
que le Shell32.dll va "analyser" le fichier .lnk pour ouvrir le
programme ou le fichier voulut.

Je voudrais savoir si il existe une commande du style :

Rundll.exe Shell32.dll,MaFonction Monfichier.lnk

Pour exécuter le fichier de lien voulut.



Tu as l'air d'aimer la complication, toi ! ;-)

J'ignore si çà existe (je n'ai pas trouvé dans le SDK)

Toutes les DLL ne peuvent pas forcément être exécutées via rundll
Il faut pour cela que les fonctions "appelables" respectent une syntaxe
précise :
point_d_entree(
HWND hwnd,
HINSTANCE hinst,
LPSTR lpszCmdLine,
int nCmdShow);

Dans shell32.dll, il y a de l'ordre de 700 fonctions (j'ai exploré avec
Dependency Walker), dont un grand nombre non documentées!

--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP] - http://www.bellamyjc.org
http://www.bellamyjc.org *

Avatar
Thierry
Bonjour,

Jean-Claude BELLAMY a écrit :

(j'ai exploré avec Dependency Walker)



Et Scanbin ?? :-)

--
« Always look at the bright side of the life... »
Avatar
François Boutines
Il existe une commande du style, sans Shell32 (implicite) :
start Monfichier.lnk

"HD" a écrit dans le message de news:
ccj4qk$2d7m$
[...]
Je voudrais savoir si il existe une commande du style :

Rundll.exe Shell32.dll,MaFonction Monfichier.lnk

Pour exécuter le fichier de lien voulut.

--
@+
HD




Avatar
HD
>> Je voudrais savoir si il existe une commande du style :
Rundll.exe Shell32.dll,MaFonction Monfichier.lnk


Il existe une commande du style, sans Shell32 (implicite) :
start Monfichier.lnk



Mais dans ce cas l'exécution du .lnk va lancer toute l'interrogation de la
BdR... Je voudrais en fait lancer le .lnk sans que ce lancement n'ai recours
à la BdR.
--
@+
HD
Avatar
Christian ASTOR
HD a écrit:

Mais dans ce cas l'exécution du .lnk va lancer toute l'interrogation de la
BdR... Je voudrais en fait lancer le .lnk sans que ce lancement n'ai recours
à la BdR.



Ben comme J-Claude ou bibi t'avons dit : IShellLink::GetPath() comme
l'ex ResolveIt() de MSDN, si ça pointe vers un exécutable, qu'on exécute
ensuite par CreateProcess()
Dans tout autre cas, ShellExecuteEx(), passant par l'interface
IUniformResourceLocator, passe aussi par la registry.
(bien que je ne vois pas l'intérêt de tout ça...)
Avatar
Christian ASTOR
HD a écrit:

Mais dans ce cas l'exécution du .lnk va lancer toute l'interrogation de la
BdR... Je voudrais en fait lancer le .lnk sans que ce lancement n'ai recours
à la BdR.



Ben comme J-Claude ou bibi t'avons dit : IShellLink::GetPath() comme
l'ex ResolveIt() de MSDN, si ça pointe vers un exécutable, qu'on exécute
ensuite par CreateProcess()
Dans tout autre cas, ShellExecuteEx(), passant par l'interface
IUniformResourceLocator, passe aussi par la registry.
(bien que je ne vois pas l'intérêt de tout ça...)
Avatar
François Boutines
Dans la majorité des fichiers lnk, le chemin complet (si c'est un lien vers
un répertoire) ainsi que le nom de l'exécutable sont en clair.
Il est possible de récupérer ce chemin, sans accèder au registre...
Mais c'est pour quoi faire au juste... un truc qui marche pas à tous les
coups ?
@++;

"HD" a écrit dans le message de news:
ccm6t7$12dj$
>> Je voudrais savoir si il existe une commande du style :
>> Rundll.exe Shell32.dll,MaFonction Monfichier.lnk
> Il existe une commande du style, sans Shell32 (implicite) :
> start Monfichier.lnk

Mais dans ce cas l'exécution du .lnk va lancer toute l'interrogation de la
BdR... Je voudrais en fait lancer le .lnk sans que ce lancement n'ai


recours
à la BdR.
--
@+
HD




1 2