Ich möchte den Top-Level-Komponentennamen eines Fensters aus dem Fenster kennen lernen.
Das ist wie so in Managed C++ Code getan:Bindefensterhandle (HWND) an Klassenname/Komponententyp in nicht verwaltetem Code
//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.
Allerdings kann ich nicht verwalteten Code für die Lösung nutzen, die ich entwickeln müssen.
Ich habe versucht, GetClassName()
als Äquivalent zu verwenden, aber das gibt mir nur WindowsForms10.STATIC. [...]
Hokuspokus :)
Hat jemand eine Idee, wie dies in unmanaged Code getan werden kann?
Ich weiß, dass C++ nativ keine Unterstützung für WinForms bietet, aber ich hoffe, einen Zeiger in der richtigen Weise zu bekommen. Ich habe es in einigen Lösungen getan gesehen, aber nicht gelungen, meinen Code zum Laufen zu bringen :(
Danke im Voraus
Hat die nicht verwaltete Komponente wirklich einen Namen? – Abyx
'Type' und' FullName' existieren nur in der verwalteten Welt. Es gibt keine Möglichkeit, dies zu umgehen, es sei denn, Sie schreiben einen verwalteten Code, der ihn der nicht verwalteten Welt zugänglich macht. –
Die Anwendung, die ich analysiere, ist in .NET mit WinForms geschrieben. Ich kann verwalteten Code einfach nicht verwenden. Als ich oben das Code-Snippet ausprobierte, bekomme ich einen echten Klassennamen. System.Windows.Forms.ComboBox. GetClassName gibt mir nur das Format, das in der Frage erwähnt wird, was für mich unbrauchbar ist, da ich auf bestimmte Komponententypen reagieren muss. – prettyCode