ShellExecute() [Résolu]

Signaler
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
-
Messages postés
41
Date d'inscription
vendredi 31 mars 2006
Statut
Membre
Dernière intervention
11 mai 2009
-
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...

16 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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);
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
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 ?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
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);
}

..........
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
Oui ya des lignes qui servent à rien c'est que j'ai oublié de les enlever avant de poster..
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
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 !
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
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...
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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>

Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
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 ?
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
Ca marche !!!
Merci !
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
Non c'est bon ya plus de pb.

Encore merci.
Messages postés
252
Date d'inscription
vendredi 10 juin 2005
Statut
Membre
Dernière intervention
5 septembre 2006

Tu hook MSN ? je peux voir ton code, chui intéressé :)
Messages postés
244
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
6 avril 2008
1
lol ok je vais voir comment te montrer ce que j'ai fait mais c'est du truc maison tu comprendras pas gd chose....
Messages postés
41
Date d'inscription
vendredi 31 mars 2006
Statut
Membre
Dernière intervention
11 mai 2009

Je chercheais depuis longtemps comment détécter l'ouverture des fenêtres sur le bureau, peut tu m'aider ?

foza juve