Je souhaite connaître le nom du composant de niveau supérieur d'une fenêtre en connaissant sa poignée de fenêtre.
Cela se fait comme tant en code managé C++:Lier la poignée de la fenêtre (HWND) au nom de la classe/au type de composant dans le code non géré
//handle is the window handle as int
System::Windows::Forms::Control^ c = Control::FromHandle((System::IntPtr)System::Convert::ToInt32(handle));
System::Type^ t= c->GetType();
Console::WriteLine(t->FullName);//This is the top level name of the component.
Cependant, je ne peux pas utiliser le code managé pour la solution que je dois développer.
J'ai essayé d'utiliser GetClassName()
comme un équivalent, mais cela me donne juste WindowsForms10.STATIC. [...]
mumbo jumbo :)
Est-ce que quelqu'un a une idée de comment cela peut être fait en code non managé?
Je sais que C++ n'offre aucun support natif pour WinForms, mais j'espère obtenir un pointeur dans le bon sens. Je l'ai vu faire dans certaines solutions, mais ont été incapables d'obtenir mon code de travail :(
Merci à l'avance
Est-ce que le composant non géré a vraiment un nom? – Abyx
'Type' et' FullName' existent uniquement dans le monde géré. Il n'y a aucun moyen de contourner cela, sauf si vous écrivez un morceau de code managé qui l'expose au monde non géré. –
L'application que j'analyse est écrite en .NET, en utilisant WinForms. Je ne peux pas utiliser de code managé. Quand j'ai essayé l'extrait de code ci-dessus, j'ai un vrai nom de classe ex. System.Windows.Forms.ComboBox. GetClassName me donne seulement le format mentionné dans la question, qui est inutilisable pour moi, car je dois réagir à certains types de composants spécifiques. – prettyCode