begin process at 2012 05 29 04:39:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Général

 > 

FindWindow et SendMessage


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

FindWindow et SendMessage

samedi 17 juin 2006 à 22:09:46 | FindWindow et SendMessage

gbourgeois0019

Salut

J'ai un premier programme qui a ceci comme code au tout debut du WinMain :

HWND hWnd = FindWindow(0,"MonProgramme");
    if ( hWnd != NULL )
    {
        char* Line = new char[MAX_PATH];
        strcpy(Line,GetCommandLine());
        ::SendMessage(hWnd,COMMANDLINE,(WPARAM)Line,0);
        return 1;
    }

Et dans ce meme programme jai dans la procedure de fenetre un case COMMANDLINE avec le code suivant :

Path = new char[MAX_PATH];
strcpy(Path,(const char*)wParam);
...

Tout cela dans le but de ne pouvoir avoir qu'une seule instance du programme qui roule tout en envoyant la ligne de commande au premier si on tente d'en ouvrir un autre ...

Cependant, apres avoir fait strcpy(Path,(const char *)wParam); il n'y a que quelques carcatères dans Path, rien a voir avec la commandline .

Est-ce que quelqu'un saurait qu'est-ce qui ne va pas ??


samedi 17 juin 2006 à 22:56:22 | Re : FindWindow et SendMessage

vecchio56

Administrateur CodeS-SourceS
Il y a deux processus effectifs (celui qui envoie et celui qui recoit). Il n'ont pas le même espace d'adressage, le second ne peut donc pas lire ce que le premier a alloué Je pense qu'avec ReadProcessMemory tu devrais pouvoir t'en sortir Dans tous les cas, tu dois trouver une solution qui permettent aux deux processus d'accéder au même espace mémoire
samedi 17 juin 2006 à 23:09:29 | Re : FindWindow et SendMessage

BruNews

Administrateur CodeS-SourceS
Réponse acceptée !
WM_COPYDATA est fait pour cela.

ciao...
BruNews, MVP VC++
samedi 17 juin 2006 à 23:25:31 | Re : FindWindow et SendMessage

vecchio56

Administrateur CodeS-SourceS
Ouah super ce truc, je connaissais pas
samedi 17 juin 2006 à 23:45:13 | Re : FindWindow et SendMessage

gbourgeois0019

Donc si je comprend bien ....

Pour envoyer :

COPYDATASTRUCT cpdtData;
    HWND hWnd = FindWindow(0,"PlayIt by Guillaume Bourgeois");
if ( hWnd != NULL )
    {
        char* Line = new char[MAX_PATH];
        strcpy(Line,GetCommandLine());
        cpdtData.cbData = sizeof(Line);
        cpdtData.lpData = Line;
        cpdtData.dwData = 0;
        ::SendMessage(hWnd,WM_COPYDATA,(WPARAM)hInstance,(LPARAM)&cpdtData);
        return 1;
    }

Mais la pour recevoir jai des problèmes, et en plus je ne suis pas sur que je dois encoyer comme je le fait !! si tu pouvais m'eclairer un peu ce serait super :)
samedi 17 juin 2006 à 23:47:00 | Re : FindWindow et SendMessage

BruNews

Administrateur CodeS-SourceS
sizeof(Line) = 4

ciao...
BruNews, MVP VC++
samedi 17 juin 2006 à 23:48:22 | Re : FindWindow et SendMessage

gbourgeois0019

Ouais sa je suis d'accord mais sa m'avance pas beaucoup :P
samedi 17 juin 2006 à 23:52:01 | Re : FindWindow et SendMessage

vecchio56

Administrateur CodeS-SourceS
Au fait je comprends pas comment ca marche: quelle différence avec un autre message qui fait qu'on peut lire la mémoire? Je pensais que que SendMessage envoyait sans réfléchir a la WndProc de la fenêtre...
samedi 17 juin 2006 à 23:53:38 | Re : FindWindow et SendMessage

vecchio56

Administrateur CodeS-SourceS
Réponse acceptée !
Il faut mettre cpdtData.cbData = MAX_PATH, car c'est la taille réelle des données que tu veux envoyer
samedi 17 juin 2006 à 23:58:30 | Re : FindWindow et SendMessage

BruNews

Administrateur CodeS-SourceS
WM_COPYDATA marche comme WM_SETTEXT quand cible n'appartient pas au processus sendeur, c'est le system qui trouve une zone mémoire libre dans la cible et y copie les données, fort heureusement l'API est assez bien pensée.

ciao...
BruNews, MVP VC++

1 2 3

Cette discussion est classée dans : sendmessage, hwnd, path, char, findwindow


Répondre à ce message

Sujets en rapport avec ce message

HELP ME PLEASE!!!! PROBLEME KE JE NE COMPRENDS PAS!!!!!!! [ par bouba ] Bonjour, je rencontre un gros problème dans mon programme que je n'arrive pas a résoudre,je ne comprends vraiment pas!!!1. std::string strcat2(LPSTR c Probleme SendMessage(...) [ par Hevelina ] SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); Bonjour j ai quelques problemes.Je doit faire un programme de lecture de musique pour Petite question ayant attrait à la gestion de fichier. [ par meteore ] Voila je suis en train de faire un petit logiciel pour le classement de mes cds.J'ai donc créer une fonction permettant d'ajouter un cd dans une boite pb malloc [ par youpiyoyo ] d'apres msdn char *string; /* Allocate space for a path name */ string = malloc( _MAX_PATH );deja ca chez moi ca compil pas me compilo me di impos pb combo box [ par mat74 ] salut a ts j'ai encore 1 ptit pb . j'ai creer un combobox , il marche bien mais le petit pb c'est que les choix possible se range par ordre alphabetiq Toolbar [ par GregPeck ] Salut a tous,J'ai un problème qui commence a me gaver...Je suis en train de programmer une toolbar pour IE (sous Vc++ 6) et j'ai un soucis pour rajou Simuler flêche bas avec SendMessage [ par TeDeum ] Salut à tous,J'aimerai simuler l'appuie sur la touche flêche bas du clavier avec un SendMessage.Comment faire ?J'ai une idée, mais je trouve pas les b pb de nom de volume [ par shinevilkyo ] voici un bout de mon code j utile la fonc getvolumeinfo mais j ai un pb et je ne trouve po de koi il s agit merci d aider un debutant a rogrammer sous comment recuperer des données chiffrées contenues dans une editbox ? [ par pidoumtimo ] Bonjour a tous.Je suis actuellement sur un pgm permettant de faire des calcul a partir de donnée insérées par un utilisateur sous forme de chiffres da


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,373 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales