Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1315 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5  6  7
Auteur Sujet :

[C / C++] le topic des bras cassés de la progue windows

n°1308565
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 18-02-2006 à 12:39:07  profilanswer
 

Reprise du message précédent :
bon sinon j'ai regardé ton code, et y'a plusieurs boulettes (d'ailleurs je me demande comment tu arrives à compiler ça, tu utilises quel compilo ?) :

Code :
  1. char c[20];
  2. GetWindowText(hwnd,c,20);


le compilo aurait du broncher, car le second paramètre de GetWindowText est censé être un pointeur sur chaine, et tu lui files un char[20]...
de plus, il ne faut pas oublier de prendre en compte le caractère de fin de chaine pour le 3eme paramètre de GetWindowText, donc rajouter 1.
il faut donc allouer de la mémoire au lieu de déclarer un tableau statique. et l'allouer façon Win32, et pas avec un malloc à la con :

Code :
  1. PSTR c = (PSTR)VirtualAlloc((LPVOID) NULL, (DWORD) 20, MEM_COMMIT, PAGE_READWRITE);
  2. GetWindowText(hwnd, (LPWSTR)c, 21);


déjà c'est plus propre. ne pas oublier de caster ensuite le second paramètre de MessageBox :

Code :
  1. MessageBox(NULL, (LPCWSTR)c, NULL, 0);


enfin, penser à libérer la mémoire allouée :

Code :
  1. VirtualFree(c, 0, MEM_RELEASE);


 
ce qui donne le code suivant :

Code :
  1. bool CALLBACK CloseEnumWindowsProc(HWND hwnd, LPARAM lParam)
  2. {
  3.     PSTR c = (PSTR)VirtualAlloc((LPVOID) NULL, (DWORD) 20, MEM_COMMIT, PAGE_READWRITE);
  4.     GetWindowText(hwnd,(LPWSTR)c, 21);
  5.  
  6.     if((strlen(c)!=0) && IsWindow(hwnd) && IsWindowVisible(hwnd) && IsWindowEnabled(hwnd))
  7.         MessageBox(NULL, (LPCWSTR)c, NULL, 0);
  8.  
  9.     VirtualFree(c, 0, MEM_RELEASE);    
  10.     return true;
  11. }


et chez moi, ce code fonctionne parfaitement et me donne uniquement les fenêtres visibles


Message édité par Harkonnen le 18-02-2006 à 12:40:54

---------------
J'ai un string dans l'array (Paris Hilton)
mood
Publicité
Posté le 18-02-2006 à 12:39:07  profilanswer
 

n°1308586
chrisbk
-
Posté le 18-02-2006 à 13:13:43  profilanswer
 

Citation :

le compilo aurait du broncher, car le second paramètre de GetWindowText est censé être un pointeur sur chaine, et tu lui files un char[20]...


mais kesturacontes ? [:pingouino]
 
 

Citation :

MessageBox(NULL, (LPCWSTR)c, NULL, 0);


 
mais surtout ps ! ca depends de si tu builds en unicode ou en mbcs
 
 

Citation :

enfin, penser à libérer la mémoire allouée :


 
quel bordel  [:pingouino]
 

n°1308601
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 18-02-2006 à 13:35:15  profilanswer
 

chrisbk a écrit :

Citation :

le compilo aurait du broncher, car le second paramètre de GetWindowText est censé être un pointeur sur chaine, et tu lui files un char[20]...


mais kesturacontes ? [:pingouino]


ben chuis désolé, mais VS 2005 m'a envoyé chier :spamafote:

Citation :


Error 1 error C2664: 'GetWindowTextW' : cannot convert parameter 2 from 'char [20]' to 'LPWSTR' c:\Documents and Settings\Harkonnen\Mes documents\Visual Studio 2005\Projects\enum\enum\enum.cpp 25  


surement à cause du char, qui représente un caractère sur 8 bits alors que je compile en Unicode
 

chrisbk a écrit :


Citation :

MessageBox(NULL, (LPCWSTR)c, NULL, 0);


 
mais surtout ps ! ca depends de si tu builds en unicode ou en mbcs


bah je sais, mais j'ai pris l'option de build par défaut de VS 2005 (Unicode), et dans ce cas là, MessageBox est remplacé par MessageBoxW
 

chrisbk a écrit :


Citation :

enfin, penser à libérer la mémoire allouée :


quel bordel  [:pingouino]


:spamafote:

Message cité 1 fois
Message édité par Harkonnen le 18-02-2006 à 13:37:25

---------------
J'ai un string dans l'array (Paris Hilton)
n°1308613
chrisbk
-
Posté le 18-02-2006 à 13:56:38  profilanswer
 

Harkonnen a écrit :

ben chuis désolé, mais VS 2005 m'a envoyé chier :spamafote:

Citation :


Error 1 error C2664: 'GetWindowTextW' : cannot convert parameter 2 from 'char [20]' to 'LPWSTR' c:\Documents and Settings\Harkonnen\Mes documents\Visual Studio 2005\Projects\enum\enum\enum.cpp 25  


surement à cause du char, qui représente un caractère sur 8 bits alors que je compile en Unicode


 
ah bah ouais, c'est pu char qu'il faut mais wchar_t
 

Citation :

bah je sais, mais j'ai pris l'option de build par défaut de VS 2005 (Unicode), et dans ce cas là, MessageBox est remplacé par MessageBoxW


 
bin ouais alors dans ce cas on est gentil on lui donne ce qu'il veut, du wchar_t (ou du TCHAR) et pas des techniques degueu a grande claque de cast :o
 

n°1308614
chrisbk
-
Posté le 18-02-2006 à 13:56:57  profilanswer
 

d'ailleurs MessageBox n'existe pas, c'est juste un define sur MessageBoxA ou MessageBoxW

n°1308619
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 18-02-2006 à 14:06:49  profilanswer
 

enfin bon, c'est accessoire tout ça :o
moi ce que je vois, c'est que chez moi ça marche impeccable, et j'ai bien toutes les fenêtres visibles listées [:kbchris]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1308624
chrisbk
-
Posté le 18-02-2006 à 14:17:42  profilanswer
 

nan c'est pas impeccable [:mlc] si tu fais de l'unicode tu utilises les types unicode, pas des machisn en char * [:mlc] sinon apres tel que je te vois faire
 
strlen(c)
 
 
mais [:pingouino][:pingouino][:pingouino][:pingouino]
 
on utilise pas une fonction MBCS sur de l'unicode [:pingouino]
 
au secours [:pingouino]

n°1308625
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 18-02-2006 à 14:21:05  profilanswer
 

mais on s'en branle [:pingouino]
 
son code va sauter de toutes façon, c'est juste pour afficher une pauvre messagebox de debug avec le caption des fenêtres [:pingouino]
 
et tu sais bien que j'ai toujours eu du mal avec les charset [:pingouino]
 
mais merde quoi, on peut pas etre bon partout [:pingouino]
 
laissons les encodages de caractères aux webeux, et concentrons nous sur des trucs de l33t comme win32 [:pingouino]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1308627
chrisbk
-
Posté le 18-02-2006 à 14:22:22  profilanswer
 

non on s'en branle pas [:pingouino]
 
tu fais n'imp [:pingouino]
 
t'es la honte de la prog win32 [:pingouino]
 
tu vas lire
 
http://www.codeproject.com/string/cppstringguide1.asp
et
http://www.codeproject.com/string/cppstringguide2.asp
 
et apres tu reviens [:pingouino]

n°1308628
chrisbk
-
Posté le 18-02-2006 à 14:23:29  profilanswer
 

Citation :

Let's look at a typical string to illustrate the need for the different versions of the string handling functions. Going back to our Unicode string L"Bob":
  B        O       B
 42 00  0F 00  62 00  00 00


 
tu crois que ca marchera bien ton strlen la dessus ? [:pingouino]

mood
Publicité
Posté le 18-02-2006 à 14:23:29  profilanswer
 

n°1308704
slash33
Posté le 18-02-2006 à 16:16:36  profilanswer
 

Au fait pourquoi choisir Unicode plutôt que l'Ascii ?


Message édité par slash33 le 18-02-2006 à 16:16:48
n°1308705
chrisbk
-
Posté le 18-02-2006 à 16:17:50  profilanswer
 

pour pas se prendre la tete avec des plages de code foireuse ?

n°1308707
slash33
Posté le 18-02-2006 à 16:20:08  profilanswer
 

Comment ça des "pages de code foireuse" ? Tu parle de la table de codage des caractères ?

n°1309027
neg'gwada
rafix 971
Posté le 19-02-2006 à 13:59:00  profilanswer
 

ou pitain, je me leve à l'instant et je vois qu'il y a eu un bon dans ce topic  [:pingouino]  
alors,

Citation :

bon sinon j'ai regardé ton code, et y'a plusieurs boulettes (d'ailleurs je me demande comment tu arrives à compiler ça, tu utilises quel compilo ?) :

Bonne question, depuis le debut j'utilise le compilo gcc/g++ de devcpp ou plutot je devrais dire wxdevcpp (bref c'est la meme chose). Donc tout ce sal code que je donnais en page précédante marche mais il me donne en plus des fenetres qui sont dans mon taskbar un truc qui s'appel Programm manager, depuis la derniere fois je ne sais pas pourquoi il ne m'affiche plus les EventList. Est ce que toi tu as vraiment que les fenetres qui sont dans ton taskbar?
 
Sinon j'ai testé dernierement vs2005 et effectivement il est beaucoup plus sensible que le g++, notament sur ce que tu as présanté, j'ai effectivement due faire du transtypage (il me semble que c'est comme ça que ça s'appel) pour que ça marche à peu près. Alors pour l'instant j'ai la flemme de reprendre tout mon code mon programme winsplit.net pour le mettre sur visual. Et puis j'ai pas encore tout pigé sur ces trucs de unicode et companie...
 

Citation :

déjà c'est plus propre. ne pas oublier de caster ensuite le second paramètre de MessageBox :

ché pas c'est quoi [:tinostar]  

Citation :


et chez moi, ce code fonctionne parfaitement et me donne uniquement les fenêtres visibles

du coup tu as répondu à ma question plus haut... donc je ne vois pas c'est quoi ce Programme Manager :/ je vais encore chercher.
 
Promis dès la semaine prochaine je passe à visual c++ 2005 express et je vais faire du code propre  [:cupra]  


---------------
--- WinSplit Revolution ---
n°1309248
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 19-02-2006 à 19:57:23  profilanswer
 

neg'gwada a écrit :

Bonne question, depuis le debut j'utilise le compilo gcc/g++ de devcpp ou plutot je devrais dire wxdevcpp (bref c'est la meme chose). Donc tout ce sal code que je donnais en page précédante marche mais il me donne en plus des fenetres qui sont dans mon taskbar un truc qui s'appel Programm manager, depuis la derniere fois je ne sais pas pourquoi il ne m'affiche plus les EventList. Est ce que toi tu as vraiment que les fenetres qui sont dans ton taskbar?


ah oui, mais Program Manager je l'ai aussi, et c'est normal [:el g]
c'est un programme qui se lance au démarrage de XP, et qui est activé tout le temps de la session, même si on ne le voit pas. il est impossible de le fermer. tu dois donc le zapper de la liste des fenêtres à fermer.
mais par contre, j'ai pas tout le merdier que tu as eu comme SYSTEM, EventList, etc...
 

neg'gwada a écrit :


Sinon j'ai testé dernierement vs2005 et effectivement il est beaucoup plus sensible que le g++, notament sur ce que tu as présanté, j'ai effectivement due faire du transtypage (il me semble que c'est comme ça que ça s'appel) pour que ça marche à peu près. Alors pour l'instant j'ai la flemme de reprendre tout mon code mon programme winsplit.net pour le mettre sur visual. Et puis j'ai pas encore tout pigé sur ces trucs de unicode et companie...


oui non mais le transtypage, c'est mal ! c'est moi qui me suis chié dessus avec ce qui est ma bête noire en programmation : les encodages de caractères. lit plutot ce que dit bk et les liens qu'il donne, c'est moi qui ai tout faux sur le coup  [:briseparpaing]  
 

neg'gwada a écrit :

ché pas c'est quoi [:tinostar]


caster == transtyper, c'est un affreux anglicisme


---------------
J'ai un string dans l'array (Paris Hilton)
n°1309304
neg'gwada
rafix 971
Posté le 19-02-2006 à 20:51:31  profilanswer
 

ok finalement je me retrouve avec uniquement Program manager, je vais effectivement faire un zapp dessus. Merci encore Harko
 
EDIT: ça marche nikel, je kill toute les fenetres du bureau comme un sal [:chapi-chapo]


Message édité par neg'gwada le 20-02-2006 à 17:34:59

---------------
--- WinSplit Revolution ---
n°1311910
chrisbk
-
Posté le 22-02-2006 à 23:30:26  profilanswer
 

y'a une fonction comme celle du framework Path.GetInvalidPathChars en win32 ?

n°1311926
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 22-02-2006 à 23:55:39  profilanswer
 

ça m'étonnerait, j'ai pas l'impression que cette fonction soit un wrapper d'une éventuelle fonction Win32
bah sinon tu déclares un tableau de tous les caractères invalides, et puis voila [:ddr555]


---------------
J'ai un string dans l'array (Paris Hilton)
n°1311928
chrisbk
-
Posté le 22-02-2006 à 23:59:01  profilanswer
 

ouais bien sur, mais jvoulais me la jouer genre secure quoi :d

n°1322999
neg'gwada
rafix 971
Posté le 10-03-2006 à 17:48:33  profilanswer
 

up sur le topic pour une question noob attitude :o
j'aimerai savoir s'il existe un equivalent de la win32 sous linux? j'ai posé la question une fois sur un topic (ché plus lequel) mais j'ai rien pigé à la réponse. En fait j'aimerai savoir s'il existe des fonctions (genre celles que j'utilise dans mon soft winsplit.net) pour récupérer le handle d'une fenetre déplacer une fenetre etc... alors estce qu'on peut obtenir ce genre d'info via des librairies qui permettent d'interagir avec le systeme, où bien il faut prendre en compte si on est sur gnome ou kde ou un truc du genre?
 
:jap:


Message édité par neg'gwada le 10-03-2006 à 17:52:54

---------------
--- WinSplit Revolution ---
n°1325313
Mackila
Posté le 14-03-2006 à 18:23:33  profilanswer
 

Tiens, ce topic ca être utile :D
 
P'tit question windows :
 
Sous windows XP (et ca marche sous 2000, bien qu'il n'y ait pas d'interface dans l'explorateur pour le faire), il est possible d'assigner une icone personnalisée à un dossier.
L'icone est paramétrée dans le fichier Desktop.ini dans le dit dossier, avec les attributs HS. (SetFileAttributes() avec un coup de FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM, ca roule).
 
Je crée (C++/VS2003) le fichier Desktop.ini, je le remplis avec ce qui va bien, je lui mets les bons attributs.
 
Pourtant il apparait que cela n'est pas suffisant pour que l'explorateur affiche l'icone...
 
J'ai essayé de mater avec l'outil streams.exe de chez sysinternals pour voir si l'explorateur mettrait pas des trucs en cachette dans le Desktop.ini, mais rien non plus par la  :sweat:  .
 
Quelqu'un a une idée de ce qu'il me manque pour générer mes beaux dossiers avec une icone personnalisée ?

n°1325642
Mackila
Posté le 15-03-2006 à 10:02:17  profilanswer
 

Merci  :o  
 
 
 
Il faut que le dossier aussi soit système ("Use PathMakeSystemFolder to make the folder a system folder." ), sinon ca marche pas...

n°1326297
haazheel
Posté le 15-03-2006 à 23:09:31  profilanswer
 

Hello everybody,
 
deux questions:
 
Comment empêcher, lors de l'agrandissement de la fenêtre via le bouton avec l'icône rectangulaire en haut à droite, que la fenêtre s'agrandisse sur toute la surface du bureau? Ou dans mon cas sur toute la surface de la fenêtre MDI?  
En fait je veux garder une bande horizontale en haut pour afficher un panel.
 
Deuxième question: comment ne pas afficher l'icône de fermeture, tout en gardant les icônes d'agrandissement et de réduction?
 
Merki :)

n°1326635
neg'gwada
rafix 971
Posté le 16-03-2006 à 13:28:09  profilanswer
 

pour la deuxieme question regarde ici peut etre


---------------
--- WinSplit Revolution ---
n°1413601
sybilla
Posté le 26-07-2006 à 10:01:29  profilanswer
 

Bonjour,  
je suis en train de créer une list view mode report en win 32. Sur le click sur un sub item de ma liste, je créé une combo box que je place à l'endroit de la cellule (pour donner l'effet Flex grid)
 
Le problème que j'ai est que mes combo box sont plus "hautes" que mes cellules. Comme j'ai atteint la taille minimale des combo box, je dois augmenter la hauteur des cellules de ma listview.
 
Pour ce faire j'ai selectionné ownerdrawfixed en option des ressources de ma liste et mis dans la fenetre parent une interception sur WM_MEASUREITEM et WM_DRAWITEM.
 
J'arrive bien à redimensionner les cellules de ma liste mais pas a dessiner les items (de type text d'ailleurs) qui vont dedans. En gros j'arrive pas à implémenter mon WM_DRAWITEM, même avec vos exemples  :??:  
 
 
Quel peut-être la solution de mon problème? dois-je implémenter une reception des notification et un oncustomdraw (j'ai lu ça quelque part, ça à l'air pas simple)?
 
Merci d'avance de votre aide
 
Sybilla

n°1446842
neg'gwada
rafix 971
Posté le 24-09-2006 à 17:34:30  profilanswer
 

Salut... je cherche une fonction dans l'API de windows pour lister les fenetres présentes dans la Taskbar dans l'ordre où elles sont positionnées dans cette taskbar  :??:  
J'utilise EnumWindows mais ça m'énumère les fenetres dans l'ordre inverse des dernieres fenetres cliquées...


---------------
--- WinSplit Revolution ---
n°1447163
ChristianS​_
Posté le 25-09-2006 à 15:03:49  profilanswer
 

Hello,
 
ça ne doit pas exister en tant qu'API simple,  il doit falloir lister les icones qui sont dans la toolbar de la barre des taches.
 
inspire toi de ça peut etre :
http://www.codeproject.com/tools/ShellTrayInfo.asp
 
cela liste les icones du systray, ça doit etre le meme principe pour la barre des taches en récupérant les classes qui vont bien pour la toolbar de la barre....

n°1447167
ChristianS​_
Posté le 25-09-2006 à 15:12:59  profilanswer
 

Tiens,  
je viens de d'adapter la methode HWND FindTrayToolbarWindow()  d'apres spy++ :
 
 

Code :
  1. HWND FindTaskbarToolbarWindow()
  2. {
  3.     HWND hWnd = ::FindWindow(_T("Shell_TrayWnd" ), NULL);
  4.     if(hWnd)
  5.     {
  6.         hWnd = ::FindWindowEx(hWnd,NULL,_T("ReBarWindow32" ), NULL);
  7.         if(hWnd)
  8.         {
  9.             hWnd = ::FindWindowEx(hWnd,NULL,_T("MSTaskSwWClass" ), NULL);
  10.             if(hWnd)
  11.             {               
  12.                 hWnd = ::FindWindowEx(hWnd, NULL,_T("ToolbarWindow32" ), NULL);
  13.             }
  14.         }
  15.     }
  16.     return hWnd;
  17. }


 
je n'ai pas testé, je te laisse voir avec le lien précédent...


Message édité par ChristianS_ le 25-09-2006 à 15:13:35
n°1447177
ChristianS​_
Posté le 25-09-2006 à 15:30:45  profilanswer
 

aller,  en cherchant bien....
 
http://www.codeproject.com/csharp/ [...] sg=1682213

n°1447229
ChristianS​_
Posté le 25-09-2006 à 17:16:00  profilanswer
 

ok, c'est du c#  , mais il explique bien... les messages sont les memes....
 
de toutes facons,  mon FindTaskbarToolbarWindow() + les sources du liens marchent impec,  j'ai testé...    ;)

n°1447289
neg'gwada
rafix 971
Posté le 25-09-2006 à 19:48:26  profilanswer
 

ok merchi je vais tester


---------------
--- WinSplit Revolution ---
n°1447758
neg'gwada
rafix 971
Posté le 26-09-2006 à 17:38:26  profilanswer
 

par contre j'ai un probleme là :/ toujours dans mon histoire de hook...
j'aimerais savoir comment il est possible d'utiliser des variables globales dans un callback  [:pingouino]  
parce que là dans ma dll, ma variable globale est vue par toutes les fonctions sauf les callbacks qui sont appelés lors de l'interception des messages. Je commence à arriver à mes limites et j'aimerais un peit coup de main [:dao]  merchi d'avance


Message édité par neg'gwada le 26-09-2006 à 17:38:59

---------------
--- WinSplit Revolution ---
n°1448010
ChristianS​_
Posté le 27-09-2006 à 10:03:28  profilanswer
 

tu peux préciser la question ?
dans les fonctions callback, y'a un moyen de passer un pointeur sur qq chose, non ?  
 
ex:
  EnumWindows (ListeWindowFonctionCallBack,(LPARAM)mon_pointeur_sur_une_structure);
 
c'est un hook de quoi ?

n°1448255
neg'gwada
rafix 971
Posté le 27-09-2006 à 15:46:11  profilanswer
 

ChristianS_ a écrit :

tu peux préciser la question ?
dans les fonctions callback, y'a un moyen de passer un pointeur sur qq chose, non ?  
 
ex:
  EnumWindows (ListeWindowFonctionCallBack,(LPARAM)mon_pointeur_sur_une_structure);
 
c'est un hook de quoi ?

oui dans ce cas là ça marche j'ai du faire ça à un endroit du code mon probleme se situ dans le hook (les callbacks qui interceptent le messages).  
En fait je viens de me rendre compte que dans un exemple de hook sur le cppfrance le gars il touche bien à sa variable globale qui est

Code :
  1. DWORD dernierCpt

alors je ne sais pas si le #pragma data_seg() y est pour quelque chose, car je connais pas le préprocesseur pragma, mais moi ma variable (dans mon code) si par exemple à l'appel de l'installation du hook elle est par ex à 5 ben dans le callback où j'intercepte un message (click sur une fenetre par exemple) elle est est 0  [:pingouino]


Message édité par neg'gwada le 27-09-2006 à 15:49:53

---------------
--- WinSplit Revolution ---
n°1448459
neg'gwada
rafix 971
Posté le 27-09-2006 à 21:40:27  profilanswer
 

mais snif quoi j'y arrive pas :fou: je montre mon main.cpp de mon hook  
 

Code :
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include "../desktop_id.h"
  4. #include "../desktop_number.h"
  5. //#include "../windows_class.h"
  6. #ifdef BUILD_DLL
  7. #define DLL_EXPORT __declspec(dllexport)
  8. #else
  9. #define DLL_EXPORT
  10. #endif
  11. static HHOOK m_HookCreatePopUp = NULL;
  12. static HHOOK m_HookOnClicMenu = NULL;
  13. static HINSTANCE m_hinst=NULL;
  14. //virtual_desktop *m_desktop;
  15. int v_glob; //<- la variable que je souhaite modifier.. en fait c'est m_desktop qui m'interresse mais bon
  16. // CallBack interception et création d'une fenetre
  17. LRESULT CALLBACK HookCreatePopUp(int nCode, WPARAM wParam, LPARAM lParam)
  18. {
  19.     if (nCode == HC_ACTION)
  20.     {
  21.         CWPSTRUCT *cwp=(CWPSTRUCT*)lParam;
  22.         if ((cwp->message)==WM_CREATE)
  23.         {
  24.             if ((IsWindow(cwp->hwnd))&&(GetParent(cwp->hwnd)==HWND_DESKTOP))
  25.             {
  26.                 GetSystemMenu(cwp->hwnd,true);
  27.                 HMENU menu = GetSystemMenu(cwp->hwnd,false);
  28.                 HMENU submenu = CreatePopupMenu();
  29.                 AppendMenu(submenu,MF_STRING,ID_MENU_BUREAU1,"Bureau 1" );
  30.                 AppendMenu(submenu,MF_STRING,ID_MENU_BUREAU2,"Bureau 2" );
  31.                 AppendMenu(submenu,MF_STRING,ID_MENU_BUREAU3,"Bureau 3" );
  32.                 AppendMenu(submenu,MF_STRING,ID_MENU_BUREAU4,"Bureau 4" );
  33.                 AppendMenu(menu,MF_SEPARATOR,0,0);
  34.                 AppendMenu(menu, MF_STRING|MF_POPUP,(UINT)submenu, "Déplacer vers" );
  35.                 //m_desktop->AddWindow(cwp->hwnd,m_desktop->GetCurrentDesktop(),true);
  36.             }
  37.         }
  38.         if ((cwp->message)==WM_DESTROY)
  39.         {
  40.             if ((IsWindow(cwp->hwnd))&&(GetParent(cwp->hwnd)==HWND_DESKTOP))
  41.             {
  42.                 GetSystemMenu(cwp->hwnd,true);
  43.                 //m_desktop->RemoveWindow(cwp->hwnd);
  44.             }
  45.         }
  46.     }
  47.     return(CallNextHookEx(m_HookCreatePopUp,nCode,wParam,lParam));
  48. }
  49. // CallBack clic droit de menu systeme
  50. LRESULT CALLBACK HookOnClicMenu(int nCode, WPARAM wParam, LPARAM lParam)
  51. {
  52.     if (nCode==HC_ACTION)
  53.     {
  54.         MSG *msg = (MSG*)lParam;
  55.         if ((msg->message) == WM_SYSCOMMAND)
  56.         {
  57.             HWND hwnd=GetActiveWindow();
  58.             if (GetWindowTextLength(hwnd)>0)
  59.             {
  60.                 if ((msg->wParam) == ID_MENU_BUREAU1)
  61.                 {
  62.                     //------
  63.                     char buffer[256];
  64.                     sprintf(buffer,"valeur dans le callback=%d",v_glob);
  65.                     MessageBox(NULL,buffer,"",0);   <- ICI j ai 0 ché pas pourquoi
  66.                     //------
  67.                     //m_desktop->WindowChangeDesktop(hwnd,DESK_1);
  68.                 }
  69.                 else if ((msg->wParam) == ID_MENU_BUREAU2)
  70.                 {
  71.                     //m_desktop->WindowChangeDesktop(hwnd,DESK_2);
  72.                 }
  73.                 else if ((msg->wParam) == ID_MENU_BUREAU3)
  74.                 {
  75.                     //m_desktop->WindowChangeDesktop(hwnd,DESK_3);
  76.                 }
  77.                 else if ((msg->wParam) == ID_MENU_BUREAU4)
  78.                 {
  79.                     //m_desktop->WindowChangeDesktop(hwnd,DESK_4);
  80.                 }
  81.             }
  82.         }
  83.     }
  84.     return(CallNextHookEx(m_HookOnClicMenu, nCode, wParam, lParam));
  85. }
  86. DLL_EXPORT bool Hook(HWND hwnd,virtual_desktop *desk)
  87. {
  88.     if (m_hinst==NULL)
  89.     {
  90.         MessageBox(NULL,"m_hinst=NULL","",0);
  91.     }
  92.     m_HookCreatePopUp=SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)HookCreatePopUp,m_hinst,0);
  93.     m_HookOnClicMenu=SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)HookOnClicMenu,m_hinst,0);
  94.     //m_desktop=desk;
  95.     v_glob=3;
  96.     //------
  97.     char buffer[256];
  98.     sprintf(buffer,"adresse dans le hook()=%d",v_glob);
  99.     MessageBox(NULL,buffer,"",0);  <- forcement il m affiche 3
  100.     //------
  101.     if ((m_HookCreatePopUp!=NULL)&&(m_HookOnClicMenu!=NULL))
  102.     {
  103.         return true;
  104.     }
  105.     return false;
  106. }
  107. DLL_EXPORT bool UnHook()
  108. {
  109.     //------
  110.     char buffer[256];
  111.     sprintf(buffer,"valeur dans le unhook()=%d",v_glob);
  112.     MessageBox(NULL,buffer,"",0);  //<- en quittant j'ai 3
  113.     //------
  114.     if (UnhookWindowsHookEx(m_HookCreatePopUp)&&UnhookWindowsHookEx(m_HookOnClicMenu))
  115.     {
  116.         return true;
  117.     }
  118.     return false;
  119. }
  120. extern "C" bool APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
  121. {
  122.     switch (fdwReason)
  123.     {
  124.     case DLL_PROCESS_ATTACH:
  125.         m_hinst=hinstDLL;
  126.         // return FALSE to fail DLL load
  127.         break;
  128.     case DLL_PROCESS_DETACH:
  129.         // detach from process
  130.         break;
  131.     }
  132.     return true; // succesful
  133. }


EDIT: j'utilise mingw avec code blocks  [:cupra]


Message édité par neg'gwada le 27-09-2006 à 22:05:20

---------------
--- WinSplit Revolution ---
n°1448514
karlkox
Posté le 27-09-2006 à 23:16:56  profilanswer
 

Vire les statics et met les en extern "C".

n°1448570
neg'gwada
rafix 971
Posté le 28-09-2006 à 09:23:41  profilanswer
 

ouais mais ma vairable int v_glob; n'est pas en static  [:pingouino]
je testerai  :jap:


Message édité par neg'gwada le 28-09-2006 à 09:24:21

---------------
--- WinSplit Revolution ---
n°1448741
ChristianS​_
Posté le 28-09-2006 à 13:46:18  profilanswer
 

moi j'ai fais un hook dans une dll,  et dans mon code j'avais ça pour declarer les variables globales :
 

Code :
  1. #pragma data_seg(".MONSEG" )
  2.     HHOOK   g_hHookShell = NULL;
  3.     HHOOK   g_hCBTHook = NULL;
  4.     HHOOK   g_hMessageHook = NULL;
  5.     HHOOK   g_hGetMessageHook = NULL;
  6.     HWND            hwndParent=0;   
  7.     int          global=0;
  8. #pragma data_seg()
  9. #pragma comment(linker, "/section:.MONSEG,rws" )


 
ça déclare un segment memoire partagée accessible par toutes les instances de la DLL.
 
j'ai aussi ça dans le fichier  .def  de la dll,  je sais pas si c'est obligatoire :
 

Code :
  1. LIBRARY  HookDLL.dll
  2. EXPORTS
  3. InstallHook  @1
  4. UnInstallHook  @2
  5. SECTIONS
  6. .MONSEG   Read Write Shared


n°1448874
neg'gwada
rafix 971
Posté le 28-09-2006 à 15:37:07  profilanswer
 

avec quel compilo?
et avec quels option de compilation apres?
 
 
EDIT: dans le lien que je donne plus haut où ça marche il fait la meme chose que ce que tu me dis #pragma data_seg blabla au niveau de la variable globale en question... mais le probleme c'est que je ne sais pas si #pragma marche avec mingw :/ je vais regarder out ça ce soir
 
EDIT2: dans le .cpp du lien il y a bien cette partie:

Code :
  1. #pragma data_seg(".maSectionHook" )
  2. DWORD dernierCpt = 0;
  3. #pragma data_seg()
  4. #pragma comment(linker, "/SECTION:.maSectionHook,RWS" )

et dernierCpt est bien la variable utilisée dans le callbacks [:figti]  
en revanche dans le .def il y a juste

LIBRARY hookTempsInactivite
EXPORTS
  installeHookMessage @1
  ArreteLeHookMessage @2
  IdleTime    @3


Message édité par neg'gwada le 28-09-2006 à 19:58:37

---------------
--- WinSplit Revolution ---
n°1449151
ChristianS​_
Posté le 28-09-2006 à 21:31:45  profilanswer
 

avec Visual C++  ( .NET 2003)
je ne crois pas qu'il y ai des options particulieres.

n°1460080
neg'gwada
rafix 971
Posté le 18-10-2006 à 21:38:29  profilanswer
 

est ce qu'il existe une fonction pour "figer" la fenetre sur une position et qu'elle ne bouge pas, mais qu'elle reste active (le controles à l'interieure)


---------------
--- WinSplit Revolution ---
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  6  7

Aller à :
Ajouter une réponse
 

Sujets relatifs
sniffer sous windowscreer raccourci vers le bureau windows
Code de retour d'un batch windowsCompter le nombre de ligne dans un fichier texte sous Windows
utilisation du port parallele sous windows XPScript windows
Plantage sur une desallocation d'une structure sous Windows 2003Pb de free d'une variable en C sous Windows 2003 TS
Compilation de routines Fortran pour Unix sous windows[c] recevoir un flux multicast sous WINDOWS (avec visual C++)
Plus de sujets relatifs à : [C / C++] le topic des bras cassés de la progue windows


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR