Встраивание консоли DOS в форму Windows с помощью Visual Basic - PullRequest
2 голосов
/ 12 января 2012

Мне удалось найти из других вопросов некоторые данные, которые позволяют мне получить следующий код:

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

Моя проблема в том, что мне не удается найти окно консоли DOS.

Вопрос в C # Встраивание консоли DOS в форму Windows

1 Ответ

1 голос
/ 12 января 2012

Используя , выведите в качестве основы консольное окно на c # , вы можете изменить свой код:

<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")

Как сказал Джон Скит:

Хак, это ужасно, но это работает для меня (спасибо, pinvoke.net!):

И Коди Грей тоже прав:

Вы, наверное,не удается найти его, потому что у него не всегда будет этот заголовок: C:\\WINDOWS\\system32\\cmd.exe.Мой нет, например.

Так что работает, но ненадежно.

...