SendMessage et Live Messenger

Signaler
Messages postés
50
Date d'inscription
samedi 11 janvier 2003
Statut
Membre
Dernière intervention
8 août 2009
-
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
-
Salut à tous,

Le code suivant fonctionne sur Notepad (Bloc-notes) mais ne fonctionne avec aucun autre programme, Live Messenger, Wordpad, Outlook, etc..

J'ai récupèrer la Class d'une fenêtre Live messenger et l'est adapté au code mais rien à faire... il n'écrit rien !

(DirectUIHWND correspond à la Class de la zone texte de WLM et IMWindowClass à la fenêtre de conversation)

Avez vous une idée ?

Merci

#include <windows.h>



int WINAPI WinMain(HINSTANCE a,HINSTANCE b, LPSTR c, int d)

{

HWND notepad, editbox;
const char *texte = "Bienvenue";


if((notepad = FindWindow("IMWindowClass", 0))){
if((editbox = FindWindowEx(notepad, 0, "DirectUIHWND", 0))){
while(*texte){
SendMessage(editbox, WM_CHAR, *texte++, 0);
}
}
}

return 0;

}

8 réponses

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Chez moi, la fenêtre principale est de classe MSBLWindowClass; t'es sûr que t'as sélectionné la bonne? (la fenêtre fille est de classe DirectUIHWND donc on parle bien de la même chose).

Ceci fonctionne très bien:
HWND hWnd=FindWindow("MSBLWindowClass",0);
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Heu finalement, non, on ne parle peut-être pas de la même chose.
En tous cas, le code est censé fonctionner. Si ça marche pas, c'est pas la bonne classe, ou bien la fenêtre n'est pas top-level.
Messages postés
50
Date d'inscription
samedi 11 janvier 2003
Statut
Membre
Dernière intervention
8 août 2009

Et bien c'est ça le problème...

C'est bien IMWindowClass car si je fais WM_CLOSE avec un autre morceau de code, je ferme la fenêtre de conversation...

Je parle d'une fenêtre de conversation avec un contact pas la fenetre principal de live messenger!

Quelqu'un aurait une idée du problème ?

Compilé le sous DevC++! =)
Messages postés
50
Date d'inscription
samedi 11 janvier 2003
Statut
Membre
Dernière intervention
8 août 2009

Je confirme, MSBLWindowClass = Fenêtre principale de Windows Live messenger..
Messages postés
50
Date d'inscription
samedi 11 janvier 2003
Statut
Membre
Dernière intervention
8 août 2009

Je viens d'essayer sur outlook 2007, idem, impossible d'écrire dans une fenêtre de nouveau message. Pareil Wordpad..
Je comprends pas le problème!


De l'aideeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
Je suis sur le problème depuis deux jours, je vais mourir :(
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
13
Salut,

Il faut que tu connaisses l'arborescence des fenêtres de l'application cible avec précision, de manière à pouvoir écrire un bout de code qui passe de handle en handle jusqu'à tomber sur le bon.

Spy++ fournit avec VS le fait très bien. Mais vu que tu as Dev-Cpp, tu l'as peut être pas. Donc essaie de trouver une alternative, genre celle-là.
Messages postés
50
Date d'inscription
samedi 11 janvier 2003
Statut
Membre
Dernière intervention
8 août 2009

J'utilise WinID qui m'indique plutôt bien les Class et tout.

J'ai analyser un peu le probleme, et c'est le suivant :


if((notepad FindWindow("IMWindowClass", 0))){ > Ici il trouve bien IMWindowClasse puisque un Sleep(9999999) arrête le programme
if((editbox FindWindowEx(notepad, 0, "DirectUIHWND", 0))){ > Parcontre ici, il ne trouve pas DIRECTUIHWND.. puis qu'un Sleep ou n'importe quel autre instruction n'arrête pas le programme...



Comment ça se fait ? WinId m'indique bien DirectUIHWND lorsque j'ai le curseur sur la zone de saisie dans la fenêtre de conversation.. ! Je ne vois pas quoi d'autre faire :o

De l'aide SVP !
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Ben c'est étrange... ceci fonctionne parfaitement chez moi (XP fam. SP3), en versions ANSI et Unicode.

__int32 __stdcall WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
HWND hWnd=FindWindowA("IMWindowClass",0);
if(!hWnd) return 0;
HWND hCWnd=FindWindowExA(hWnd,0,"DirectUIHWND",0);
if(!hCWnd) return 1;
return (__int32)hCWnd;
}