2012-01-12 61 views
2

我設法從其它問題,找到一些數據,讓我實現了下面的代碼:在窗口中嵌入一個DOS控制檯形成用Visual Basic

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# Embedding a DOS console in a windows form

+0

你真的是指** DOS **嗎?我沒有意識到任何人仍在使用MS-DOS(是否仍然保留?) – 2012-01-12 08:06:11

+0

我的意思是一個Windows控制檯。 [此窗口](http://www.coldstarstudios.com/temp/img.png)。 – Alrik 2012-01-12 08:11:47

+0

你可能無法找到它,因爲它不會總是有這個標題:'C:\\ WINDOWS \\ system32 \\ cmd.exe'。例如,我的不在。 – 2012-01-12 11:22:11

回答

1

使用bring a console window to front in 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!):

和Cody灰色也是這個正確的:

你可能不能設法找到它,因爲它不會總是有這樣的標題:C:\\WINDOWS\\system32\\cmd.exe。例如,我的不在。

因此,它的工作,但片狀。

+0

這完美的作品(謝謝),但你必須把屏幕的標題,因爲它是在用戶的語言,例如西班牙語,你必須把「Administrador:C:\ WINDOWS \ system32 \ cmd .exe「,如果你不知道窗口的確切名稱...... xD(再次感謝)。 – Alrik 2012-01-12 15:55:57

+1

@Alrik:不,那不是你怎麼做的。我運行英文版的Windows,並且「管理員:C:\ WINDOWS \ system32 \ cmd.exe」仍然不是我的命令提示符窗口的標題。硬編碼這樣的事情會讓你陷入麻煩。完全不建議。使用標題以外的內容找到窗口。 – 2012-01-13 00:34:15

+0

我會嘗試其他選項,我想有其他類型的功能可以用在相同的情況下,避免使用窗口名稱可能是PID。 – Alrik 2012-01-13 11:47:57