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

¿Fue útil?

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
scroll top