Je pense que s'il y a des poignées de la même valeur? P>
Pour clarifier ma question, disons que j'ouvre un bloc-notes, tapez dans un texte, sauvegardez-le, puis fermez le bloc-notes. Si je le répète mille fois (ou encore plus), aurai-je une chance de voir la même valeur de la fenêtre (HWND) utilisée pour la fenêtre principale de bloc-notes qui a été utilisée la première fois? Si oui, pourquoi? P>
5 Réponses :
Oui. Il n'y a qu'un nombre fini de valeurs qu'une poignée peut être représentée par des fenêtres pour les réutiliser finalement. P>
Une fois qu'une poignée est fermée, il est parti, vous ne pouvez rien faire avec elle, cela n'existe pas, et vous ne devriez même pas le regarder. P>
et si vous ouvrez ultérieurement une autre poignée em>, il est possible que Windows réutilisera la valeur de la poignée. P>
Merci, existe-t-il un mécanisme pour livrer la poignée à ouvrir la fenêtre? Qu'est-ce que si vous pouviez partager?
J'aimerais savoir s'il y a un moyen de fournir une valeur de la poignée à chaque fenêtre ouverte? Je n'ai aucune intention d'obtenir la poignée de la fenêtre droite. Ma connaissance sur Windows n'est pas bonne, je fais des questions.
Non - aucun gui manche a un compteur de référence. Donc, il n'y a qu'une seule valeur de la poignée et vous ne pouvez pas faire quelque chose comme "Duplicatedhandle", c'est un bogue de conception de la même manière que l'UNIX utilise des valeurs d'identité de processus.
par le Pigeonhole Principal , oui, ils ne peuvent pas être uniques. P >
En raison de la compatibilité avec les processus 32 bits (WOW64), les poignées ne peuvent pas utiliser les 64 bits entiers, même sur un système d'exploitation 64 bits - pensent à un processus de 64 bits qui passent une poignée à un enfant 32 bits, ou Obtenir une poignée à une fenêtre ouverte par un processus 32 bits. Cela rend leur véritable espace assez petit et réutiliser donc très probablement. P>
Merci ybungalabill, c'est exactement ce que j'aimerais savoir. Pour ce que je voudrais savoir!
Seule une partie de cette réponse est vraie. Les poignées de fenêtre font pas i> Conservez la compatibilité avec des fenêtres 16 bits. Ce sont des pointeurs, ce qui signifie que leur taille est dépendante de l'architecture. Sur les versions de 64 bits de Windows, elles sont des valeurs de 64 bits. Sur les versions 32 bits de Windows, elles sont des valeurs 32 bits. Vérifiez les fichiers d'en-tête Windows pour plus de détails.
Le type code> code> n'est pas un typedef pour vide * code> plus; Il a été ans i> Depuis c'était le cas. Les parties de la documentation MSDN n'ont pas été mises à jour depuis lors, mais cela ne rend pas l'hypothèse moins incorrecte. De plus, ce n'est même pas ce que l'article que vous avez lié à dit. Il est seulement dit qu'il existe une limite de 65 536 poignées d'utilisateurs par session. Cela ne dit rien sur le type de données utilisé pour stocker les poignées. Vous tirez des conclusions qui ne sont pas explicitement énoncées et sont assez injustifiées.
Si vous utilisez toujours les en-têtes fournis avec VC 6, vous êtes désespérément obsolète. Je ne suis pas sûr de quoi d'autre de vous dire. Ce n'est pas défini comme une version moderne du SDK. Je ne comprends pas vraiment ce que vous voulez de MSDN. Vous voulez un lien qui dit que MSDN ne va pas de MSDN? Désolé, ça ne va pas arriver. Toutes les pages de la documentation en ligne ne sont pas mises à jour régulièrement, et même lorsque les mises à jour font i> se produisent, des trucs sont manqués. Raymond Chen écrit tout un blog à ce sujet. Vous avez fourni un lien vers un article non pertinent sur les poignées GDI, qui n'a rien à voir avec les valeurs hwnd code>.
Et rien de tout cela n'a vraiment rien à voir avec quoi que ce soit. Nous ne parlons pas de tables GDI. Le point est que les poignées de fenêtre ne sont pas compatibles avec les versions de fenêtres de 16 bits. Si vous déclarez le type hwnd code> en tant que
bref int code>, les choses ne vont pas fonctionner correctement. Ce n'est pas une valeur de 16 bits.
Hmm, rappelez-vous que strict code> est défini par défaut maintenant et est depuis des années. Vous devez regarder la mauvaise branche du
#if code>. Et cet article parle de poignées GDI, pas de poignées de fenêtre. Vous devez lire le tout, pas seulement la partie qui convient à votre argument. Je ne discute pas avec le fait que les valeurs seront réutilisées. Je conteste la réclamation spécieuse que les poignées de fenêtre conservent une compatibilité avec des fenêtres de 16 bits.
@Cody: Excusez-moi, mais je ne vais pas discuter avec vous plus loin si vous ne faites même pas un effort minimal pour vérifier que la poignée est typée à un pointeur vide lorsque strict est défini i> et à un entier sinon. À moins que vous fassiez un effort minimal pour examiner la table dans l'article, je suis lié à l'endroit où il est écrit que Windows sont des objets utilisateur, et que l'article parle d'objets utilisateur (vous venez de décider qu'il "parle de poignées GDI").
N'oubliez pas que nous ne parlons pas de gérer code>. Nous parlons de
hwnd code>. Je ne comprends pas pourquoi vous continuez à parler de choses qui sont complètement non pertinentes, telles que les poignées GDI et le type code> code>. Le titre de la question dit très clairement "Poignées de fenêtre". Je ne fais pas ça. Et j'ai déjà abordé que la table est assez pertinente pour cette discussion. Et enfin, nous arrivons au cœur réel de votre argument, qui est totalement et totalement incorrect. Win16 applications ne fonctionnera pas i> sur des versions de Windows 64 bits. Fin de l'histoire.
Il est mentionné dans MSDN : Typedef Poignée HWND; code>,
Typef Pvoid Poignée; Code>,
Typef Void * Pvoid; code>. Et les objets utilisateur
code> Article mentionne < Code> hwnd code>, pas d'objets GDI.
Objets GDI CODE> ont séparé Article répertorié dans la navigation. Enfin, un peu référence au Table de poignée a>.
@Yakovgalka Le type de poignée code> est
pvoïde code>, un pointeur vide de 64 bits. Ceci est générique, il peut s'agir d'une adresse 64 bits ou d'un index dans une table de poignée ou peut être une pseudohandle, en fonction de la poignée.
Je vous conseillerais de ne faire absolument aucune hypothèse sur les valeurs de la poignée. P>
Vous ne devriez pas avoir à penser à des valeurs de poignée concrètes à toutes fins pratiques. Une poignée doit être considérée comme un espace réservé opaque pour autre chose. Vous pouvez transmettre la poignée pour vous référer à quelque chose (par exemple une fenêtre) sans avoir une référence à la vraie chose, mais vous ne devriez jamais avoir à regarder la poignée elle-même em>. Le fait qu'il s'agisse d'une valeur numérique doit être considéré comme un détail de mise en œuvre, c'est-à-dire. pas important (à moins que vous puissiez peut-être une programmation de systèmes de bas niveau). P>
Cela étant dit, je soutiendrais la réponse de Jalf: les valeurs de la poignée pourraient être réutilisées. Si je devais faire une hypothèse de cela, je supposerais qu'une valeur de la poignée pourrait être réutilisée à tout moment em>. P>
Merci, votre message et son (ybungabol) sont très utiles. Il a publié d'abord alors je votera sa réponse acceptée. Ma réputation n'est que 12 à l'heure actuelle, je vous entamerai la prochaine fois si nous avons la chance de se revoir.
@Serious, au lieu de dire «ThumbUp» (comme avec la réponse de Ybungalobill) ou «très utile» (avec ma réponse), appuyez simplement sur la flèche haut de gauche d'une question!
Vous définitivement i> devrait supposer que les valeurs de la poignée peuvent être réutilisées. Ce n'est pas une chose "potentiellement". La documentation pour le iswindow () code> fonction a > rend cette explicite: "Un thread ne doit pas utiliser Iswindow pour une fenêtre qu'elle n'a pas créée car la fenêtre pouvait être détruite après l'appelée de cette fonction. En outre, car les poignées de fenêtre sont recyclées que la poignée pourrait même pointer sur un autre fenêtre. " I>
@Cody, tu as raison, j'ai peut-être été trop prudent. ;-) J'ai mis à jour ma réponse.
La question ne concerne pas la représentation d'une poignée, il s'agit de la durée de vie de la poignée.
Oui, les poignées de fenêtre sont réutilisées. P>
Documentation à Iswindow code> fonction
dit: p>
Un thread ne doit pas utiliser
Iswindow code> pour une fenêtre qu'il n'a pas créé car la fenêtre pourrait être détruite après l'appel de cette fonction. En outre, parce que les poignées de fenêtre sont recyclées la poignée pourrait même indiquer une fenêtre différente em>. p> blockQuote>
Ma réponse est basée sur Le Commentaire par @codygray. Je voulais juste faire ce fait plus important.
théoriquement oui. En pratique - la probabilité de ceci (contrairement au processus et à un identificateur de thread, qui est fréquemment réutilisé) est presque zéro. p>
Dans la mise en œuvre actuelle Basse 16 bits de Et même si la mise en œuvre a changé, je ne pense pas que la nouvelle implémentation apportera hwnd code> utilisé comme index dans la table de poignée de Windows - de sorte que les fenêtres maximales maximales de 64k peuvent être créées. Les 16 prochains bits utilisés comme indice de réutilisation. Lorsqu'une cellule est utilisée pour la première fois que cet index est 1.Quand cette cellule est réutilisée, l'index est augmenté de 1. et ainsi de suite. En conséquence pour obtenir le même
hwnd code> sur la fenêtre Besoin de la manière dont le minimum de 64K Windows doit être créé et détruit. Mais ce n'est que si toutes ces fenêtres seront utilisées la même cellule. Mais nous avons 64k cellules. Tellement réel minimum beaucoup plus élevé pour cela. pas exactement 2 ^ 32 mais assez grand. P>
hwnd code> moins unique que courant. p>
Je n'ai pas compris de quoi pouvez-vous expliquer quelle est votre question ???
Merci pour votre message, c'est OKe si vous ne comprenez pas, veuillez ignorer et lire ce que les gens postent s'il vous apporte des idées intéressantes. Je suis sûr que vous serez connecté bientôt :-d
@Serious: "C'est OKe si tu ne comprends pas" i>?! Non, ce n'est pas le cas: si vous postez une question bonne i> question sur le débordement de la pile, qui ajoute de la valeur à une grande ressource de programmation. Si vous postez une question irrégulière ou incompréhensible, sur le débordement de la pile, qui sera effectivement blessé i> la pile d'utilité de la pile de pile (même si juste un peu). Alors s'il vous plaît, faites-vous des efforts pour formuler vos questions aussi bien que vous le pouvez, pour le bien de la communauté! (J'ai édité votre question un peu, BTW.)