Voila mon code:Voila lorsque je lance windows me dit:xxx.exe a rencontrer un probleme et...Code:
1
2
3 HWND hwnd; LPCTSTR lpParameters; ShellExecute(hwnd,"open","Laby_Instal.exe",lpParameters,NULL,SW_HIDE);
Si vous savez comment m'aider...
Merci
Version imprimable
Voila mon code:Voila lorsque je lance windows me dit:xxx.exe a rencontrer un probleme et...Code:
1
2
3 HWND hwnd; LPCTSTR lpParameters; ShellExecute(hwnd,"open","Laby_Instal.exe",lpParameters,NULL,SW_HIDE);
Si vous savez comment m'aider...
Merci
Si la fonction demande des parametres, il suffit pas de passer des variables du type requis, il faut que ces variables valent ce dont la fonction a besoin.
Plus d'infos sur ce que tu dois mettre dans les parametres, ici :
http://msdn.microsoft.com/library/de...ellexecute.asp
Note, dans pas mal de cas, les fonctions de l'api windows acceptent des parametres NULL. (mais tes variables ne valaient meme pas NULL, elles valaient n'importe quoi)
En fait le programme c'est une archiveWIN RAR Auto extractible...Citation:
Envoyé par Gruik
Merci pour le lien mais j'ai deja essaier de le dechifrer et j'ai pus en tirer le code que j'ai posté!!!Citation:
Envoyé par Gruik
Merci qd meme.
Sur l'extrait de code que tu nous montres, lpParameters n'est pas initialisé et peut valoir n'importe quoi. J'espère que ce n'est pas le cas sur le code réel...
Si...Citation:
Envoyé par Médinoc
Et hwnd aussi...
Alors tu as plus de chances de gagner au loto.Citation:
Envoyé par miron
HWND est un handle (en gros un numéro unique) de l'appelant de la fonction ShellExecute.Code:
1
2 HWND hwnd;
tu obtiens ce handle lorsque tu fabriques la fenêtre.
Code:
1
2
3
4
5
6 HWND hwnd; hwnd = CreateWindow("MaWinClass", "Titre", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hinstance, NULL);
C'est un pointeur vers les paramètres à donner à l'application. Si tu n'as pas de Paramètres a fournir tu le met à NULL.Code:
1
2 LPCTSTR lpParameters
Ce code lance OutlookExpressCode:
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 #include <windows.h> LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd; MSG msg; WNDCLASS wc; wc.style = 0; wc.lpfnWndProc = MainWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = NULL; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE); wc.lpszMenuName = NULL; wc.lpszClassName = "MaWinClass"; if(!RegisterClass(&wc)) return FALSE; hwnd = CreateWindow("MaWinClass", "Titre", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hinstance, NULL); if (!hwnd) return FALSE; ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd); ShellExecute(hwnd,"open","C:\\Program Files\\Outlook Express\\msimn.exe",NULL,NULL,SW_SHOWDEFAULT); while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } /******************************************************************************/ LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CREATE: return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } }
Petite info
Si tu veux juste lancer le programme tu vires la boucle infini
et leCode:
1
2
3
4
5
6 while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); }
Ainsi ta fenêtre n'apparait jamais.Code:
1
2
3 ShowWindow(hwnd, nCmdShow); UpdateWindow(hwnd);
Il faut aussi remplacer dans le WinMain le :
parCode:
1
2return msg.wParam;
Pour retourner le bon code de fin.Code:
1
2 return EXIT_SUCCESS;
On simplifiera aussi la "pompe a message" :
Code:
1
2
3
4
5 LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { return DefWindowProc(hwnd, uMsg, wParam, lParam); }
Code:
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 #include <windows.h> LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { HWND hwnd; MSG msg; WNDCLASS wc; wc.style = 0; wc.lpfnWndProc = MainWndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = NULL; wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE); wc.lpszMenuName = NULL; wc.lpszClassName = "MaWinClass"; if(!RegisterClass(&wc)) return FALSE; hwnd = CreateWindow("MaWinClass", "Titre", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, NULL, NULL, hinstance, NULL); if (!hwnd) return FALSE; ShellExecute(hwnd,"open","C:\\Program Files\\Outlook Express\\msimn.exe",NULL,NULL,SW_SHOWDEFAULT); return EXIT_SUCCESS; } /******************************************************************************/ LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { return DefWindowProc(hwnd, uMsg, wParam, lParam); }
Ou bien, tu ne t'embarasses pas à créer une fenêtre et tu passes NULL...
Peut-être que je me suis trompé mais avec null je n'arrive a rien :roll:
[EDIT]: Ha bha non ca marche avec NULL.... je devais être fatigué moi hier soir... Sorry :oops: :dehors:
Merci pour ce long discours, heureusement que NULL fonctionne pour les paramettres par ce que dans le cas contraire, j'airais été tres mal !!!Citation:
Envoyé par Pikwik
Et pour HW... il fait mettre quoi, patrce que avec tt ca je suis perdu, je ne vaux pas lancer OOTLOOK mais seulement une Archive SFX (auto extractible ).
Le handle de ta fenêtre principale ou NULL si tu n'en as pas.Citation:
Envoyé par miron
Ce paramètre ne sert au système que pour savoir à quoi rattacher une boite modale s'il y a besoin.
Et ça te ferait un deuxième trou au c*l si tu remplaçais le chemin vers Outlook par le chemin vers ton archive auto-extractible ?Citation:
Envoyé par miron
Qu'on demande de l'aide, c'est une chose : le forum est fait pour ça. Mais il faut aussi y mettre un peu du sien, que diable !
Si c'est un développeur pas cher qui fasse tout le travail à ta place que tu cherches, il y a des sites pour ça.
Je ne vois pas de "HW" dans les exemples précédents (ceux donnés par Pikwik).Citation:
Envoyé par miron
Je vois un "type" appelé "HWND" et une variable appelée "hwnd". J'espère que ce n'est pas pour économiser tes forces que tu as omis les deux lettres qui suivaient...
Je vais supposer que tu parlais de la variable "hwnd" et, dans ce cas, je vais te demander de LIRE LA DOCUMENTATION.Maintenant : au boulot !Citation:
Envoyé par [url=http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/functions/shellexecute.asp]Aide de ShellExecute[/url]
oui mais une archive auto extractible il y a une fenetre non?Citation:
Envoyé par David.Schris
J'aissais dutiliser Createprossess:
Mais apparement cela ne fonctionne pas, en fait le problemme est que avec shellexec, playsoud dans mon programme apelé ne fonctionne pas.Code:CreateProcess(dossier_temp,NULL,NULL,NULL,FALSE,NORMAL_PRIORITY_CLASS,NULL,"C:\\Program Files\\PPB\\Laby",NULL,NULL);
Donc j'aissais avec createprossess.
Mais la c'est carement la fonction createprossess qui bug!
Je suis desespéré...
PS : Dossier temp contient l@ du programme a lancer.
Manifestement...Citation:
Envoyé par miron
- Tu n'as même pas pris la peine d'essayer le code qui t'a été donné : c'est sympa pour ceux qui ont pris sur leur temps pour toi.
- Tu n'as toujours pas lu la documentation.
Pour répondre à ta question ("une archive auto extractible il y a une fenetre non?") : pas forcément. Cela dépend de l'outil utilisé pour la créer, des options utilisées pour la créer, des options utilisées pour lancer l'exécutable chargé d'extraire les données.Citation:
Envoyé par [url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shellexecute.asp]Aide de ShellExecute[/url]
Il y a un truc important qu'il va falloir comprendre : NULL ne veut pas à dire "je ne sais pas quoi mettre alors devine".Citation:
Envoyé par miron
Et encore une fois, tu n'as pas lu la documentation !On te dit que l'avant dernier doit être un pointeur vers une structure de type "STARTUPINFO" ou "STARTUPINFOEX". On ne te dit pas que tu peux mettre NULL.Citation:
Envoyé par [url=http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createprocess.asp]Aide de CreateProcess[/url]
Même remarque pour le dernier paramètre.
A mon humble avis, si tu as du mal avec ShellExecute, n'essaye pas avec CreateProcess.
Et qu'est-ce qui te fait dire que c'est à cause de ShellExecute ?Citation:
Envoyé par miron
C'est sûr. Tu n'y arrives pas du premier coup avec une fonction donc tu abandonnes et tu essayes avec une autre sans même chercher à comprendre d'où venait le problème...Citation:
Envoyé par miron
Ah oui ? Mince alors ! Vite ! Dis-le à Microsoft ! Tu vas les aider à corriger un bug qu'ils n'avaient pas vu !Citation:
Envoyé par miron
s/é/ant/ :(Citation:
Envoyé par miron
Enfin, toutes tes questions concernent des fonctions spécifiques à Windows : tu es dans le mauvais forum.
En C, tu aurais peut-être pu utiliser la fonction system() ?
Non pa spour lancer louto extractible car cela ne fonctionne pas.Citation:
Envoyé par David.Schris
Non mais il me semble que create prossess convit mieux a mon probleme.:(Citation:
Envoyé par David.Schris
Peu etre que je me trompe;...:oops: