求怎样在 VB中嵌入DOS窗口,并且固定DOS窗口的位置和大小
时间:2011-08-11
来源:互联网
如题
看见有人将一个VB窗体嵌入到另一个窗体中,并固定子窗体位置。
http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f7276c828d4829c3933fc239045c013ca3ec74740704a5c0766301a85e5c9cf32172410037b7ec92ce1583afd7756fde2870200b863005a312b8ba3732b1248729e3b81996ad863784d8d3c4de2444ba55120a82e7fb2e1762b9&p=8e769a46d69b11a05becc12f454396&user=baidu&fm=sc&query=vb+%B9%CC%B6%A8+%D7%D3%B4%B0%BF%DA&qid=d90814ee0379ede6&p1=13&fast=y
我参照其编程,但是使用SetWindowLong时,对DOS窗体无效。这是怎么回事呢?
看见有人将一个VB窗体嵌入到另一个窗体中,并固定子窗体位置。
http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f7276c828d4829c3933fc239045c013ca3ec74740704a5c0766301a85e5c9cf32172410037b7ec92ce1583afd7756fde2870200b863005a312b8ba3732b1248729e3b81996ad863784d8d3c4de2444ba55120a82e7fb2e1762b9&p=8e769a46d69b11a05becc12f454396&user=baidu&fm=sc&query=vb+%B9%CC%B6%A8+%D7%D3%B4%B0%BF%DA&qid=d90814ee0379ede6&p1=13&fast=y
我参照其编程,但是使用SetWindowLong时,对DOS窗体无效。这是怎么回事呢?
作者: xiaomingt10 发布时间: 2011-08-11
这对老子来说太简单了,有现成的示例代码
作者: zx081z 发布时间: 2011-08-11
有啊,一会儿
作者: xiaomingt10 发布时间: 2011-08-11
[code=VB][/code]
bas
Option Explicit
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Const GWL_WNDPROC = (-4)
Public Const WM_NCHITTEST = &H84
Public Const HTCAPTION = 2
Public oldhwnd As Long
Public Flag As Boolean
Public Function WndProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Flag = False Then
Flag = True
Debug.Print "WndprocHandle="; hWnd
End If
If uMsg = WM_NCHITTEST Then
If DefWindowProc(hWnd, uMsg, wParam, lParam) = HTCAPTION Then
WndProc = 1
Exit Function
End If
End If
WndProc = CallWindowProc(oldhwnd, hWnd, uMsg, wParam, lParam)
End Function
form1
Option Explicit
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Sub Command1_Click()
Dim commandstring As String
Dim TaskID As Long
Dim hWnd As Long
TaskID = Shell("cmd.exe", vbNormalNoFocus)
MsgBox "开始运行DOS"
hWnd = FindWindow("ConsoleWindowClass", "C:\WINDOWS\system32\cmd.exe")
SetParent hWnd, Form1.hWnd
oldhwnd = SetWindowLong(hWnd, -4, AddressOf WndProc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Unload Form1
End Sub
bas
Option Explicit
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Const GWL_WNDPROC = (-4)
Public Const WM_NCHITTEST = &H84
Public Const HTCAPTION = 2
Public oldhwnd As Long
Public Flag As Boolean
Public Function WndProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Flag = False Then
Flag = True
Debug.Print "WndprocHandle="; hWnd
End If
If uMsg = WM_NCHITTEST Then
If DefWindowProc(hWnd, uMsg, wParam, lParam) = HTCAPTION Then
WndProc = 1
Exit Function
End If
End If
WndProc = CallWindowProc(oldhwnd, hWnd, uMsg, wParam, lParam)
End Function
form1
Option Explicit
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Sub Command1_Click()
Dim commandstring As String
Dim TaskID As Long
Dim hWnd As Long
TaskID = Shell("cmd.exe", vbNormalNoFocus)
MsgBox "开始运行DOS"
hWnd = FindWindow("ConsoleWindowClass", "C:\WINDOWS\system32\cmd.exe")
SetParent hWnd, Form1.hWnd
oldhwnd = SetWindowLong(hWnd, -4, AddressOf WndProc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Unload Form1
End Sub
作者: xiaomingt10 发布时间: 2011-08-11
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28