2010-05-30 14 views
10

Ho un'applicazione C# winform che, se utilizzata con spy ++, fornisce "WindowsForms10.Window.8.app.0.33c0d9d" come nome classe. C'è un modo per cambiarlo in qualcosa di più amichevole?nome classe winform

risposta

0

se sono necessari nomi descrittivi per i controlli, utilizzare le proprietà Accesso facilitato. questo è il modo comune.

+0

Ho bisogno di un nome di classe più amichevole in modo da poterlo scoprire utilizzando FindWindowEx ... – user156144

+0

quindi devi eseguire l'override di CreatePrams, ma se restituisci foo, genererà di nuovo quel nome ostile. – Jack

5

Non c'è. L'ultimo numero esadecimale è il codice hash dell'AppDomain proprietario della finestra. La cifra precedente inizia a 0 ma aumenta se altre finestre sono state create con lo stesso nome di classe. Il numero precedente è il valore dello stile della classe. Chiaramente puoi solo indovinare questo nome correttamente se hai una conoscenza privilegiata delle variabili il cui valore è accessibile solo all'interno del processo.

Né puoi cambiarlo. Sostituisci la proprietà CreateParams della finestra ma impostando la proprietà ClassName, Windows Form cerca una classe di finestre esistente con quel nome. E non riescono a trovarlo, bombardando il tuo programma.

Né è possibile ignorarlo. La logica è incorporata in un metodo privato della classe NativeWindow. Chiaramente questo non è stato progettato per rendere più facile l'utilizzo di FindWindowEx().

Fintanto che la modifica del codice sorgente è un'opzione, ci sono modi migliori per impostare una comunicazione tra processi oltre l'utilizzo dei messaggi di Windows. Tubi con nome, prese, Remoting, WCF.