IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

Un bug de l'api win32 ?


Sujet :

Windows

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Un bug de l'api win32 ?
    Eh bien voilà, j'aime bien bidouiller et j'ai écrit ce petit programme censé réduire toute les fenêtres ouvertes (en c++):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <windows.h>
    
    BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam);
    
    
    
    int APIENTRY Main(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpCmdLine,int nCmdShow)
    { 
    	EnumWindows(EnumWindowsProc,0);
    	return 0;
    }
    
    BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
    {
    	CloseWindow(hwnd);
    	return true;
    }
    Je l'ai compilé et exécuté sous vista et voilà ce que j'ai obtenu (voir pièce jointe). Il semblerait que windows invente des fenêtres pour tous les processus en cours (fenêtres inutilisables et vides). Le menu démarrer ne s'affichequasiment plus. La seule solution est de fermer la session.
    Je ne pense pas que les ingénieurs de chez microsoft aient prévus cette situation

    Est-ce que ce serait un VRAI bug qu'il faut rapporter à microsoft ?
    Personnellement je ne l'ai pas tester sur xp ni sur seven, quelqu'un pourrais essayer le programme pour moi ?

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut R5evan
    la tu ferme une fenetre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
    {
        CloseWindow(hwnd);
        return true;
    }
    et si c'est celle du bureau !!!!

    Regarde ce post en C++ Builder, une fenetre de Zoom est affichee en haut de l'ecran et toutes les autres fenetres presentes ou qui vont etre affiche apres differents appels sont redimensionnees sauf la fenetre du bureau
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    En fait ce n'est pas logique mais CloseWindow() minimise les fenêtres et ne les ferme pas (http://msdn.microsoft.com/en-us/libr...78(VS.85).aspx).
    Le "problème" que j'ai eu vient de la fonction EnumWindows() qui me renvoie les fenêtres de l'utilisateur mais aussi effectivement l'explorateur window, le menu démarrer, les console IME, ainsi que des tas de fenêtres ... vides et sans titres.
    J'ai modifié mon programme pour qu'il écrive le HWND et le titre de la fenêtre. Voilà ce que j'obtiens avec juste un firefox ouvert :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    00060488	
    0004041C	
    000400D8	
    000300C8	
    00010486	
    00010482	SysFader
    0007040E	SysFader
    0001006A	
    0001006E	
    0001009E	
    0001009C	
    0001009A	
    00010098	
    00010096	
    00010086	
    00010084	
    00010082	
    00010080	
    0001007E	
    00010058	Démarrer
    00010050	
    0005046C	C:\Users\R5evan\Documents\Visual Studio 2008\Projects\winstate\Debug\winstate.exe
    00090466	
    00090468	
    000A046A	
    0009045E	
    00090460	
    00070492	
    0007048C	
    000300A0	Menu Démarrer
    00010480	
    00020434	
    00030448	
    00050414	Acrobat IEHelper
    000603F2	
    000703FA	
    000603F4	
    00060456	
    0005044E	Debug
    0007042E	
    00020444	
    00030454	
    00010094	CiceroUIWndFrame
    0001006C	
    00010068	
    00010070	
    000103FC	
    000303A8	
    000403B8	
    000703BA	
    000103AE	
    00060396	
    00020388	
    000203B2	
    000303B0	
    0002038E	
    00020386	
    000100F8	
    00010344	Téléchargements actifs
    00010336	
    00010184	Changement de tâche
    00010178	Infobulle réseau
    0001004A	CiceroUIWndFrame
    00010048	TF_FloatingLangBar_WndTitle
    0001036A	Forum des développeurs - Répondre au sujet - Mozilla Firefox
    000400B0	
    000300A8	R5evan
    000400AE	
    000300F0	
    000300CA	
    000300D0	
    000300E6	
    000300DA	
    000300E4	
    000300EA	
    000203F6	
    00010368	
    00020366	NetscapeDispatchWnd
    00030274	nsAppShell:EventWindow
    00010360	
    0001035E	
    0003035A	
    0002034A	
    00020316	
    0002031C	
    00020324	
    0002032C	
    00010330	
    000102A6	
    00020132	
    000101B8	Free Download Manager
    00010342	DDE Server Window
    00020358	
    00010308	
    000202FE	
    000202F8	
    000202EE	
    000202E8	
    000202B0	
    000202A2	
    0002029C	
    00020292	
    0002028C	
    00020286	
    0001024E	DDE Server Window
    0001024A	WinAMRestoreWnd
    00020242	
    00020236	
    0001018C	
    000201D0	
    000101B4	f68
    000101C6	
    0031019C	ESET NOD32 Antivirus
    000101A0	
    003F0154	BluetoothNotificationAreaIconWindowClass
    00010188	MS_WebcheckMonitor
    0001017E	Media Center SSO
    00010176	
    0002011C	
    00020148	MMDEVAPI Device Window
    00020116	
    00020156	Jauge de batterie
    00010162	MediaCenter
    0001015E	
    0002014E	Windows Media Center
    0002002A	Spybot - Search & Destroy
    0002001C	
    00020026	HelperMsgListenerWnd
    00010140	Canon My Printer
    00010126	MCI command handling window
    00010106	
    000100FC	
    00010110	NvSvc
    00010076	
    00010074	
    0001004C	
    00040022	TaskEng - Processus du moteur du Planificateur de tâches
    0002003E	
    0004003A	
    00030020	DWM Notification Window
    00020044	
    000100A4	GDI+ Window
    00020152	GDI+ Window
    00040016	
    0003002C	Windows Defender
    0001037C	Tea Timer
    0001037A	
    00010378	
    00010376	
    000100F2	Program Manager
    00010056	MSCTFIME UI
    00010052	Default IME
    00030412	MSCTFIME UI
    000803E0	Default IME
    00010340	MSCTFIME UI
    00010338	Default IME
    00010186	Default IME
    0003036C	MSCTFIME UI
    0001035C	Default IME
    000B03E4	MSCTFIME UI
    00040400	Default IME
    00010212	MSCTFIME UI
    0001018E	Default IME
    000201AC	Default IME
    000201BA	Default IME
    0001024C	Default IME
    000101B6	Default IME
    000200C2	Default IME
    00010180	Default IME
    0002011A	Default IME
    0002011E	Default IME
    00020158	Default IME
    00010160	Default IME
    0001015A	Default IME
    00020030	Default IME
    00020028	Default IME
    00010144	Default IME
    0001012A	Default IME
    00010112	Default IME
    00020042	Default IME
    00010046	Default IME
    000100A6	Default IME
    0002014C	Default IME
    0005001E	Default IME
    00010102	MSCTFIME UI
    0004003C	Default IME
    Dans le genre inutile, ils font fort chez microsoft ... parce que toute les fenêtres vides et sans titre ....
    Par contre le lien vers le code c++ builder ne marche pas ....

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Desole j'ai corrige le lien
    C'est vrai que ce n'est pas evident, mais si cela etait facile ce ne serait pas amusant et il n'y aurait pas besoin d'informaticiens
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Essaie avec ceci à la place:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BOOL CALLBACK EnumWindowsProc(HWND hwnd,LPARAM lParam)
    {
        if(IsWindowVisible(hwnd))
            CloseWindow(hwnd);
        return TRUE;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    salut tout le monde et bienvenue R5evan sur le forum

    Citation Envoyé par R5evan Voir le message
    Le "problème" que j'ai eu vient de la fonction EnumWindows() qui me renvoie les fenêtres de l'utilisateur mais aussi effectivement l'explorateur window, le menu démarrer, les console IME, ainsi que des tas de fenêtres ... vides et sans titres.

    .../...

    Dans le genre inutile, ils font fort chez microsoft ... parce que toute les fenêtres vides et sans titre ....
    La fonction «EnumWindows()» énumère toutes les fenêtres parent. D'un autre côté, l'essence même du système d'exploitation Windows c'est que tout est fenêtre, cela suffit à expliquer le résultat que tu obtiens, de surcroit tout à fait normal.

    On peut blâmer Microsoft de beaucoup de choses, mais certainement pas de ne pas avoir était à la hauteur et ne pas avoir su utiliser les API mises à disposition. D'autant plus qu'il s'agit là de bibliothèques éprouvées. Dans ce genre de situation, il convient avant tout de se remettre en cause, seul gage à mon sens pour une réelle progression dans l'apprentissage.

    Je tiens également à rappeler qu'il existe la méthode «ToggleDesktop()» de l'objet «IShellDispatch4» qui aboutit au même résultat que ce que tu cherches à faire tout en étant plus efficace, comme quoi chez Microsoft ils ne sont pas si mauvais que ça.

    Bonne continuation à toi.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2009
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci pour vos réponses.
    La réponse de maxim_um me convient parfaitement.

    Je sais que cette api est utilisé depuis longtemps (et est même un peu préhistorique), simplement le résultat était tellement inattendu (notamment le menu démarrer) que je me suis demander pourquoi. Je n'essayais pas de faire quelque chose de précis, je bidouillais.
    Je ne savais pas à quelle point c'est vraiment tout fenêtre chez microsoft . !
    N'empeche que je vois pas l'utilité de créer des fenêtre pour quasiment tous les processus .

    Bon allez comme d'hab Moi : 0 - Forum : 1

  8. #8
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Citation Envoyé par R5evan Voir le message
    N'empeche que je vois pas l'utilité de créer des fenêtre pour quasiment tous les processus .
    Typiquement parce que le système de messages de Windows est attaché aux fenêtres.

    Résultat, tout processus qui expose un composant COM aux autres processus (ou utilise un composant COM d'un autre processus, je crois bien) doit avoir une fenêtre pour ça, cachée.

    Par contre, certaines choses de l'API Windows sont moins "fenêtres" qu'on peut le penser:
    • Tous les contrôles "windowless" d'Internet Explorer, Firefox, etc.
    • Une Toolbar de Windows est un seul contrôle, qui gère tous les "boutons" dessus. À l'inverse, une GtkToolbar contient autant de contrôles que de boutons, et donc bouffe plus de ressources.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PC] Sockets avec API win32, bug incompréhensible
    Par ValyGator dans le forum Windows
    Réponses: 4
    Dernier message: 27/02/2008, 17h13
  2. [API WIN32] Pb avec SHGetSpecialFolderLocation
    Par Invité dans le forum MFC
    Réponses: 3
    Dernier message: 27/01/2004, 21h19
  3. [API Win32] WriteFile()
    Par tut dans le forum MFC
    Réponses: 2
    Dernier message: 27/01/2004, 16h13
  4. API Win32
    Par benoit70 dans le forum MFC
    Réponses: 8
    Dernier message: 26/01/2004, 19h11
  5. [API win32] Récupérer le répertoire d'un profile
    Par sbeu dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 27/09/2002, 12h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo