Bonjour,
Peut on faire undepuis une application C# par exemple sur une fenetre d'un projet C++ Win32 InvisibleCode:SendMessage(..)
?Code:SW_HIDE
Merci de vos réponses.
:)
Version imprimable
Bonjour,
Peut on faire undepuis une application C# par exemple sur une fenetre d'un projet C++ Win32 InvisibleCode:SendMessage(..)
?Code:SW_HIDE
Merci de vos réponses.
:)
On peut envoyer des messages même à une fenêtre invisible.
Enfin, a condition d'avoir son handle, bien sûr.
J'ai essayé de faire la chose suivante depuis mon appli C#
Ceci fonctionne quand la fenetre du projet C++ est visible.Code:SendMessage(p[0].MainWindowHandle, 0x0111, 49, 0);
Ici j'utilisedonc ça marche.Code:MainWindowHandle
Si je rend invisilble la fenetre ça ne fonctionne plus.
Alors j'ai essayé d'utilisermais ça ne fonctionne pas.Code:SendMessage(p[0].Handle, 0x0111, 49, 0);
Une idée ?
:)
Comment la fenêtre a-telle été rendue invisible ?
ShowWindow(hwnd,SW_HIDE) ?
Je ne programme qu'en C+ avec l'API Win32, que represente p[0] ?
La valeur 0x11111 est-elle la valeur du message ? Pourquoi ne pas utiliser les constantes WM_ ?
J'ai modifié dans le code généré par VS la ligne suivante
enCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { HWND hWnd; hInst = hInstance; // Store instance handle in our global variable hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (!hWnd) { return FALSE; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); return TRUE; }
Code:ShowWindow(hWnd, SW_HIDE);
Pas de boucle genre :
Et quel est le message à envoyer ?Code:
1
2
3
4
5
6 while(GetMessage(...)) { TranslateMessage(...); DispatchMessage(...): }
De même, que represente la valeur 49 ?
Si la boucle existe, j'ai juste modifié cette partie pour la rendre invisible.
Quand la fenetre C++ est visible et que je lance la commande SendMessage depuis mon appli C# ça fonctionne.
Par contre quand la fenetre C++ est SW_HIDE ça ne fonctionne pas.
cela représente mon process (la fenetre C++) du point de vue C#.Code:p[0]
Est-il possible de réafficher la fenêtre C++ une fois qu'elle a été Cachée ?
Je me répète, mais quel est le message correspondant à la valeur 0x0111 ?
Pour infos :
0x0111 représente le code hexé de WM_COMMAND mais depuis C# je ne peut qu'envoyer le code hexa.
Et 49 représente la valeur suivante
du coté C++.Code:#define ID_MA_VARIABLE 49
ça me permet de faire la chose suivante dans mon code C++
J'espère que c'est un peu plus clair :)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 switch (message) { case WM_COMMAND: wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); // Parse the menu selections: switch (wmId) { case ID_MA_VARIABLE : MaFunct () ; break ; ...... } ...... }
Non je ne peux pas la réafficher.Citation:
Est-il possible de réafficher la fenêtre C++ une fois qu'elle a été Cachée ?
L'application c++ se lance, elle n'est visible que dans la task manager et ça me convient tout à fait.
Mon problème est le fait de ne pouvoir interargir avec elle juste parce qu'elle est invisible.
Non mais je disais ça pour faire un test : Une fois la fenêtre créee dans l'appli C++, on essaye de la réafficher à partir de l'appli C#. Comme ça, on sait si le problème vient du handle invalide, ou si il est impossible d'envoyer des messages à une fenêtre invisible (ce qui me parait étrange, puisque j'ai fait un compteur qui utilisait une fenêtre invisible, et qui l'affichait à l'expiration d'un timer)
si tu as déjà réussi à le faire c'est qu'il doit y avoir un problème au niveau de l'utilisation de SendMessage() depuis C#...
Le problème peut venir de là. Essaye de déboguer ton prog pour voir le contenu des variables en temps réel.Citation:
p[0] cela représente mon process (la fenetre C++) du point de vue C#.