Come si converte un handle acquisito da una proprietà Handle di un modulo/controllo in un IWin32Window ^?Convertire un handle di finestra IntPtr in IWin32Window^
risposta
(Che si ottiene l'oggetto di controllo, che implementa l'interfaccia IWin32Window.)
Eg.
IntPtr myWindowHandle = IntPtr(someVal);
IWin32Window^ w = Control::FromHandle(myWindowHandle);
Nota che questo si basa sull'handle "acquisito da una proprietà Handle di un modulo/controllo". Non è possibile utilizzare questa tecnica con un handle di finestra Win32 arbitrario.
Questo sembra essere esattamente quello che stai chiedendo. Non ho mai fatto io stesso, ma sembra essere relativamente semplice:
Creating a IWin32Window from a Win32 Handle
Buona fortuna!
C'è un metodo più semplice che è supportato direttamente dal framework .NET senza dover creare una propria classe personalizzata. È possibile utilizzare questo con qualsiasi handle di finestra arbitrario.
Dato ptrWindowHandle di tipo IntPtr:
using System.Windows.Forms;
NativeWindow nativeWindow = new NativeWindow();
nativeWindow.AssignHandle(ptrWindowHandle);
System.Windows.Forms.NativeWindow implementa l'interfaccia IWin32Window.
Puoi anche usare il comando statico 'NativeWindow.FromHandle (ptrWindowHandle);' –
@MattSmith Ho scoperto che deve essere assegnato. FromHandle non funziona per me a meno che AssignHandle non sia stato utilizzato in precedenza. Ad esempio questo funziona: 'NativeWindow nativeWindow = new NativeWindow(); nativeWindow.AssignHandle (GetConsoleWindow()); box.ShowDialog (NativeWindow.FromHandle (GetConsoleWindow())); '(o anche' box.ShowDialog (nativeWindow); ') ... ma questo one-liner senza l'assegnazione non:' box.ShowDialog (NativeWindow. FromHandle (GetConsoleWindow())); ' – Jay
- 1. Ottieni handle di finestra (IntPtr) dalla finestra corrente del selenio web GUID
- 2. Come convertire IntPtr a int
- 3. Ottenere un handle Button da un'altra applicazione
- 4. C# - Come convertire oggetti in IntPtr e Back?
- 5. Come convertire la stringa in handle di funzione in Matlab?
- 6. Trova ID processo per handle della finestra
- 7. Posso usare SafeHandle invece di IntPtr?
- 8. Copia dati da IntPtr a IntPtr
- 9. handle button fa clic in un DialogFragment
- 10. Converti array di strutture in IntPtr
- 11. Come ottenere un IntPtr in una struct?
- 12. File handle handle
- 13. Come posso convertire un tipo IntPtr non gestito in una stringa C#?
- 14. Come ottenere un handle di thread da passare a CancelSynchronousIO?
- 15. Come liberare IntPtr in C#?
- 16. Come si ottiene un handle della finestra principale di Process in C#?
- 17. Differenza tra IntPtr e UIntPtr
- 18. Ottieni gli handle su tutte le finestre di un processo
- 19. Come determinare se un handle di file Perl è un handle di lettura o scrittura?
- 20. Che cos'è un handle in C++?
- 21. C# come ottenere Byte [] da IntPtr
- 22. Handle onActivityResult su un servizio
- 23. Devo ChiudereHandle() su un handle di thread?
- 24. Forzare la creazione di un handle Win32 nativo della finestra WPF
- 25. Che cos'è un handle di evento?
- 26. handlehell 2.0 redirection handle handle exception
- 27. Come ottenere l'elenco di tutti gli handle di finestra in Java (utilizzando JNA)?
- 28. WaitForSingleObject su un handle di file?
- 29. System :: IntPtr to int * in C++/CLI
- 30. Conversione da HWND a IntPtr (CLI)
James, ho modificato una qualifica nella tua risposta perché le persone che arrivano da una ricerca più generale su 'IntPtr' e' IWin32Window' possono solo leggere il titolo della domanda e non apprezzare il vincolo nei dettagli della domanda. Spero che questo sia ok. – itowlson
No, è una buona modifica. Probabilmente hai salvato qualche sfortunato programmatore futuro da ore di grattacapo chiedendoti perché non possa magicamente creare un oggetto Control/IWin32Window da un HWND non elaborato. :) –