ShellExecute() [Résolu]

Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
- - Dernière réponse : ZMJUVENTINO
Messages postés
41
Date d'inscription
vendredi 31 mars 2006
Statut
Membre
Dernière intervention
11 mai 2009
- 5 mars 2009 à 15:35
Bonjour à tous,

J'ai un problème où je n'y comprends rien du tout :

J'ai fait un hook global, pour savoir qd un certain type de fenètre s'ouvre.

Jusque là no problem.

Je rajoute
"MessageBox(hwnd3, className, className, MB_OK);"
pour me prouver que qd une fenètre s'ouvre, le code est bien exécuté, et que c'est aussi le type de fenètre.

Encore ici, no problem.

Mais dès que je rajoute cette ligne en dessous :
ShellExecute(NULL, "open", "Mon Programme.exe", 0, NULL, SW_SHOWNORMAL);
Il continue, ya pas de bug, mais mon autre programme n'est jamais exécuté !!!!

J'ai bien vérifé que le programme était dans le meme dossier, et je mets ShellExecute() dans une autre fonction ça marche...!

Problème qui viens du hook ?
De ShellExecute() ?
De la DLL ?
De quoi?
How is it possible ?!

Merci à tous ceux qui pourront me répondre...
Afficher la suite 

16 réponses

Meilleure réponse
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
3
Merci
On n'a qu'a mettre le chemin complet:



char t[MAX_PATH];

char* p = t + GetModuleFileName(hdll, t, MAX_PATH);

while(*p != '\\') p--;

p++;

strcpy(p, "Mon programme.exe");

ShellExecute(0, 0, t, 0, 0, SW_SHOW);

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 143 internautes nous ont dit merci ce mois-ci

Commenter la réponse de vecchio56
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
3
Merci
Juste une petite question sur la meme fonction:

Quand il a trouvé la bonne fenètre, j'utilise, les fonctions fopen, fread, fwrite et fclose.

Dès qu'il arrive à une ligne utilisant une de ces fonctions, ça plante.

En rapport avec le programme qui lance la fenètre et qui ne veut pas etre interrompu en plein milieu de son exécution ?

Où autre chose ?

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 143 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ncoder
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
0
Merci
Je le fais sans problème dans mon hook (WH_CBT). Montre au moins ta
procédure de hook pour voir. Tu peux aussi regarder la valeur retournée
par ShellExecute
Commenter la réponse de vecchio56
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
0
Merci
Voilà à quoi ça ressemble :

LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{

char className[32];
GetClassName((HWND) wParam, className, 32);
HWND hwnd3;

if(strcmp(className, "IMWindowClass")==0 && nCode==3)
{ HWND hwnd=(HWND) wParam;
ShellExecute(NULL, "open", "Mon Programme.exe", 0, NULL, SW_SHOWNORMAL);
MessageBox(hwnd3, className, className, MB_OK);


// Création d'une nouvelle fenêtre
}
return CallNextHookEx(hhk, nCode, wParam, lParam);
}

..........
Commenter la réponse de ncoder
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
0
Merci
Oui ya des lignes qui servent à rien c'est que j'ai oublié de les enlever avant de poster..
Commenter la réponse de ncoder
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
0
Merci
Est-ce que mon programme est dans le même chemin que la DLL au moins?
remplace le par notepad.exe pour voir. Parce que chez moi ca marche
Commenter la réponse de vecchio56
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
0
Merci
A mais mince !

notepad.exe marche...

Mais alors pourquoi ?

Car je suis sur c'est le meme nom de programme, et il marche très très bien !
Commenter la réponse de ncoder
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
0
Merci
Oui mais la dll ne doit pas trouver ton programme. Il doit être dans le même dossier ou dans un dossier qui est dans $PATH
Commenter la réponse de vecchio56
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
0
Merci
Non la dll est dans le meme dossier que l'exécutable qui sont tous les 2 dans le meme dossier que Mon Programme.exe...
Commenter la réponse de ncoder
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
0
Merci
T'a raison, moi non plus ca marche pas. ShellExecute me renvoie <NAME>ERROR_FILE_NOT_FOUND</NAME><link href="../../../css/ie4.css" type="text/css" rel="stylesheet"><!-- @ --><link href="../../../css/inetsdk.css" type="text/css" rel="stylesheet"><!-- @ --><style type="text/css">
PRE.clsCode { font-size:110%; }
PRE.clsSyntax { font-size:100%; }
TD DIV.clsBeta { display:none;}

A:link { color:#0000ff; text-decoration:underline;}
A:visited { color:#0000ff; text-decoration:underline;}
A:hover { color:#3366ff; text-decoration:underline;}
MSHelp\:link {
color:#0000ff;
text-decoration:underline;
cursor:hand;
hoverColor:#3366ff;
filterString: ;}
</style><link href="ms-help://Hx/HxRuntime/HxLink.css" type="text/css" rel="stylesheet"><XML id="_topicdata" pagetype="function" proj="platsdk" name="ShellExecute" pubpath="/platform/shell/reference/functions/shellexecute.htm"><!-- topic data --><root></root></XML><xml xmlns:mshelp="http://msdn.microsoft.com/mshelp"></xml>

Commenter la réponse de vecchio56
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
0
Merci
J'ai fait ce qu'il ne fallait pas faire :

LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{

char className[32];
GetClassName((HWND) wParam, className, 32);
HWND hwnd3;

ShellExecute(NULL, "open", "Mon Programme.exe", 0, NULL, SW_SHOWNORMAL); //= => Je l'ai mis ici

if (strcmp(className, "IMWindowClass") ==0 && nCode==3)
{ HWND hwnd=(HWND) wParam;
MessageBox(hwnd3, className, className, MB_OK);
// Création d'une nouvelle fenêtre
}
return CallNextHookEx(hhk, nCode, wParam, lParam);
}

....

Ca m'a prouvé que "Mon Programme.exe" peut bien etre lancé !
(Boucle illimitée de Mon Programme.exe....aie ça fait mal à l'ordi ça ...)

Qu'est-ce qui se passe alors ?
Commenter la réponse de ncoder
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
0
Merci
Ca marche !!!
Merci !
Commenter la réponse de ncoder
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
0
Merci
Non c'est bon ya plus de pb.

Encore merci.
Commenter la réponse de ncoder
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006
0
Merci
Tu hook MSN ? je peux voir ton code, chui intéressé :)
Commenter la réponse de Zootella
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
0
Merci
lol ok je vais voir comment te montrer ce que j'ai fait mais c'est du truc maison tu comprendras pas gd chose....
Commenter la réponse de ncoder
Messages postés
41
Date d'inscription
vendredi 31 mars 2006
Statut
Membre
Dernière intervention
11 mai 2009
0
Merci
Je chercheais depuis longtemps comment détécter l'ouverture des fenêtres sur le bureau, peut tu m'aider ?

foza juve
Commenter la réponse de ZMJUVENTINO