¿Cómo convierto un identificador adquirido de la propiedad Manejar de un formulario/control a un IWin32Window ^?Convierta un identificador de ventana IntPtr a IWin32Window^
Respuesta
(que le consigue el objeto de control, que implementa la interfaz IWin32Window.)
Ej.
IntPtr myWindowHandle = IntPtr(someVal);
IWin32Window^ w = Control::FromHandle(myWindowHandle);
Tenga en cuenta que esto depende de que el identificador sea "adquirido desde la propiedad Handle de un formulario/control". No puede usar esta técnica con un identificador de ventana Win32 arbitrario.
Esto parece ser exactamente lo que está pidiendo. Nunca lo he hecho, pero parece ser relativamente sencillo:
Creating a IWin32Window from a Win32 Handle
Buena suerte!
Hay un método más simple que es soportado directamente por .NET Framework sin tener que crear su propia clase personalizada. Puede usar esto con cualquier identificador de ventana arbitrario.
Dado ptrWindowHandle de tipo IntPtr:
using System.Windows.Forms;
NativeWindow nativeWindow = new NativeWindow();
nativeWindow.AssignHandle(ptrWindowHandle);
System.Windows.Forms.NativeWindow implementa la interfaz IWin32Window.
También puede utilizar el estático 'NativeWindow.FromHandle (ptrWindowHandle);' –
@MattSmith He encontrado que debe asignarse. FromHandle no funciona para mí a menos que se haya utilizado AssignHandle de antemano. Por ejemplo, esto funciona: 'NativeWindow nativeWindow = new NativeWindow(); nativeWindow.AssignHandle (GetConsoleWindow()); box.ShowDialog (NativeWindow.FromHandle (GetConsoleWindow())) '(o incluso' box.ShowDialog (nativeWindow); ') ... pero este one-liner sin la asignación no:' box.ShowDialog (NativeWindow. FromHandle (GetConsoleWindow())); ' – Jay
- 1. ¿Está bien pasar un identificador de ventana nula a ShellExecute?
- 2. Obtener Window handle (IntPtr) de Selenium webdriver ventana actual GUID
- 3. Encontrar el identificador en una ventana de WPF
- 4. ¿Cómo puedo determinar cuándo un identificador de ventana es válido?
- 5. Obtener un identificador de botón desde otra aplicación
- 6. Convierta un archivo de especificaciones a debian
- 7. Posibles causas de "EOSError 1400 - Identificador de ventana inválido"
- 8. C# punteros vs IntPtr
- 9. ¿Puedo usar SafeHandle en lugar de IntPtr?
- 10. int vs IntPtr cuando tiene un controlador?
- 11. ¿Por qué no se puede obtener el identificador de la ventana principal para un proceso iniciado?
- 12. Convierta System.Windows.Media.Brush a System.Drawing.Brush
- 13. Convierta JavaScript a Java
- 14. Convierta HTML a XAML
- 15. Cómo cambiar el propietario de una ventana usando su identificador
- 16. Convierta JSON a CSV
- 17. Convierta nsdictionary a nsdata
- 18. Obtener identificador de ventana específica utiliza la interoperabilidad Oficina
- 19. Convierta System.Windows.Media.ImageSource a System.Drawing.Bitmap
- 20. Convierta programáticamente un video a FLV
- 21. Convierta un objeto a una cadena XML
- 22. Convierta un shapefile (.shp) a xml/json
- 23. Java: convierta un char [] a CharSequence
- 24. Convierta CGcolorRef a UIColor
- 25. Convierta un objeto a System Guid
- 26. ¿Qué es intptr?
- 27. IntPtr vs UIntPtr
- 28. IntPtr vs ref C#
- 29. Problema de Winforms - Error al crear el identificador de ventana
- 30. Obtención de instancia de ventana desde el controlador de ventana
James, he editado una calificación en su respuesta porque las personas que vienen de una búsqueda más general en 'IntPtr' y' IWin32Window' solo pueden leer el título de la pregunta y no apreciar la restricción en los detalles de la pregunta. Espero que esto esté bien. – itowlson
No, es una buena edición. Probablemente haya salvado a un desafortunado futuro programador de horas de rascarse la cabeza preguntándose por qué no puede crear mágicamente un objeto Control/IWin32Window desde un HWND en bruto. :) –