Incrustar una consola de DOS en un formulario de Windows con Visual Basic
-
27-10-2019 - |
Pregunta
He logrado encontrar en otras preguntas algunos datos que me permiten lograr el siguiente código:
Imports System.Runtime.InteropServices
Public Class Form1
<DllImport("user32.dll")> _
Public Shared Function MoveWindow(ByVal hWnd As IntPtr, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal bRepaint As Boolean) As Boolean
End Function
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Public Shared Function SetParent(ByVal hWndChild As IntPtr, ByVal hWndNewParent As IntPtr) As IntPtr
End Function
<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function FindWindow( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As IntPtr
End Function
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim hwnd As IntPtr
hwnd = FindWindow(vbNullChar, "C:\\WINDOWS\\system32\\cmd.exe")
If hwnd.Equals(IntPtr.Zero) Then
MessageBox.Show("Got null handle")
Else
SetParent(hwnd, Me.Handle)
MoveWindow(hwnd, 0, 0, Me.Width, Me.Height, False)
End If
End Sub
End Class
Mi problema es que no puedo encontrar la ventana de la consola de DOS.
La pregunta en C # Incorporación de una consola DOS en un formulario de Windows
Solución
Usando traer una ventana de consola al frente en c # como base, puede modificar su código:
<DllImport("user32.dll", EntryPoint:="FindWindow", SetLastError:=True)> _
Private Shared Function FindWindowByCaption(ByVal zeroOnly As IntPtr, ByVal lpWindowName As String) As IntPtr
End Function
''in frmLoad:
hwnd = FindWindowByCaption(IntPtr.Zero, "c:\WINDOWS\system32\cmd.exe")
Como dijo Jon Skeet:
Es hacky, es horrible, pero me funciona (¡gracias, pinvoke.net!):
Y Cody Gray también tiene razón con esto:
Probablemente no puedas encontrarlo porque no siempre tendrá este título:
C:\\WINDOWS\\system32\\cmd.exe
.El mío no, por ejemplo.
Así que funciona, pero es inestable.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow