Bonjour,
J'aimerais bien pouvoir lancer d'après mon code C, un autre programme dont le chemin serait contenu dans un char.
J'ai cherché de nombreuse heures après des solutions, mais je n'en ai pas trouvé qui fonctionnait vraiment :/
Je me suis focalisé sur une aide de la FAQ -> Lien
Mais je ne comprends pas grand-chose (ça ne fait pas longtemps que je code en C) et j'aimerais bien quelques petites explications :
J'ai au début trouvé une variante de ShellExecute() proposé dans la FAQ qui me disait comme exemple :
Ok, mais pourquoi L"" ? Le code fonctionne mais bon, le L m'empêche de lui coller une variable ! L&fullPath ne fonctionnerai pas...
Code : Sélectionner tout - Visualiser dans une fenêtre à part ShellExecute(NULL, NULL, L"C:\\WINDOWS\\system32\\notepad.exe", L"NOTEPAD", NULL, SW_SHOWNORMAL);
Je suis ensuite tombé sur l'astuce du #define _T(x) L ## x
Je suppose que le double # dans le préprocesseur fait coller le L à la variable x, en effet quand je remplace les L"" par _T("...") ça fonctionne, mais même soucis, si je fais _T(&fullPath), marche pas !
Je suis passé à ShellExecuteEx, la j'ai un autre soucis. D'après le code que j'ai recopié :
Je reçois un charmant message :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 SHELLEXECUTEINFO EI; memset(&EI,0,sizeof(EI)); EI.cbSize = sizeof(EI); EI.fMask = 0; EI.hwnd = 0; EI.lpVerb = "open"; EI.lpFile = "C:\\windows\\notepad.exe"; EI.lpParameters = "C:\\test.txt"; EI.lpDirectory = 0; EI.nShow = SW_SHOW; EI.hInstApp = 0; ShellExecuteEx(&EI);
Après, découragé j'ai simplement copié/collé le code du CreateProcess() qui retourne tout simplement :
0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x00145764
Est-ce qu'il y a donc moyen de lancer simplement un fichier ? (exécutable ou non) Pas besoin de pause du côté de mon programme ou autre, simplement le lancer.
Merci.
Partager