发新话题
打印

如何让Shell函数调用Dos命令后不产生多余的进程?(VB6)

用Shell函数调用Dos命令且用vbHide常数来隐藏该Dos窗口后,Windows的进程中将多一个进程,而且该进程将随Shell函数调用该Dos命令的次数而增加,请问:我想用Shell函数调用该Dos命令,而且也不想显示Dos窗口,更不想每调用一次该Dos命令,就多一个进程,我该如何做?

TOP

调用完dos命令后dos进程会自动关闭
得其坦然,失其淡然,争其必然,顺其自然

TOP

可用Shell函数调用的不行!除非自己关闭使用完的Dos窗口,不过我找到了一种方法,如下:
可以先用Findwindow函数得到Dos窗口的句柄,然后用Sendmessage函数调用WM_CLOSE消息来关闭窗口,如下(希望对你有用):
本示例是使用VB6调用Extract命令解压缩*.CAB文件

'窗体的通用过程
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_CLOSE = &H10

Private Sub Command1_Click()
    ChDir "f:\" '保存解压缩文件的路径
    Shell "c:\windows\command\Extract.exe f:\default.cab form1.log", vbHide '利用extract.exe程序解压缩default.cab文件中的form1.log文件
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Timer()
    Dim Lngnums As Long
    Lngnums = FindWindow(vbNullString, "已完成 - Extract")'得到窗口标题为“已完成 - Extract”的窗口句柄
    If Lngnums <> 0 Then&#39;如果得到句柄
        SendMessage Lngnums, WM_CLOSE, 0, 0&#39;关闭Dos窗口
        Timer1.Enabled = False
    End If
End Sub

TOP

那怎么样在把运行完后DOS中的消息,保存在VB程序中的Text控件中?
我的MSN空间:[URL="http://spaces.msn.com/members/pcxsd/"]http://spaces.msn.com/members/pcxsd/[/URL]] 我的个人网站:[URL="http://pcxsd.055.cn"]http://pcxsd.055.cn[/URL] [URL="http://spaces.msn.com/members/pcxsd/"][/URL]

TOP

运行
ping www.sohu.com>>C:\a.txt
试试看
得其坦然,失其淡然,争其必然,顺其自然

TOP

我说是在VB程序中
我的MSN空间:[URL="http://spaces.msn.com/members/pcxsd/"]http://spaces.msn.com/members/pcxsd/[/URL]] 我的个人网站:[URL="http://pcxsd.055.cn"]http://pcxsd.055.cn[/URL] [URL="http://spaces.msn.com/members/pcxsd/"][/URL]

TOP

ping 10.3.3.3>>C:\a.txt
在dos中加入这个命令,然后用vb读文件不就行了吗?
得其坦然,失其淡然,争其必然,顺其自然

TOP

调用dos命令后在调用exit命令,肯定关!
^_^
得其坦然,失其淡然,争其必然,顺其自然

TOP

发新话题