如何用VB调用CMD来执行命令

时间:2022-09-02 20:20:10
比如ntsd -c q -p pid结束进程命令
pid是进程标识符变量,我想用VB编一个程序,只需输入pid号然后点击确定就能执行那个命令
如:某个进程pid为110,
程序运行时我输入110,确定,它会执行ntsd -c q -p 110,这功能要怎么实现呢?


PS:刚学VB,对api了解很少。

20 个解决方案

#1


VB中间的cmd调用和直接在cmd中间有很大的区别,要写类模块进行处理
如果不是太复杂的问题,建议你最好放弃你现在的想法

#2


shell 调用

#3


楼上的说得对!shell调用

#4


如果不采用调用的方法我也有个想法,就是用VB产生一个.BAT或.CMD文件,然后向上面我说的,输入PID值后传输到那个文件中去,让那个批处理文件去命令执行,只要能传过去就行了,这怎么搞呢?

楼上各位,我刚学VB,很多东西都不懂,能不能说的具体一点啊?谢

#5


winexec可以产生如同手工点击bat文件的效果

#6


shell "cmd.exe/c ping www.csdn.net"

#7


shell "ntsd -c q -p "&cstr(pid)
这样应该可以

#8


不好意思,搞错了。

#9


VB创建和写入BAT文件我已经会了,就差调用执行了
那个winexec怎么用啊,能不能说具体点,谢!

#10


使用&&来隔开你的命令:
例如,你要在一个dos窗口中先后完成dir、netstat两个命令,这样:
Private Sub Command1_Click()
s = "cmd.exe /c dir && cmd.exe /k netstat -a"
Shell s, vbNormalFocus
End Sub

vb6+xp下通过。。。。

#11


哈哈,楼上这种方法这么简单啊,谢谢!
我加了个自动关闭CMD窗口的

我想把使用winexec的也搞会
winexec这样声明有什么问题吗:
Declare Function WinExec Lib "Kernel"(ByVal lpCmdLine As String,ByVal nCmdShow As Integer) As Integer
编译出错,郁闷

#12


Public Declare Function WinExec Lib "kernel32" Alias "WinExec" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long

#13


shell "cmd.exe/c ntsd -c q -p " & str(pid)

蹭点

#14


Public Declare Function WinExec Lib "kernel32" Alias "WinExec" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long
这样声明一样错误,说不允许作为对象模块的public成员
可是我是通过api浏览器插入的呀,照理应该对的,怎么回事?

#15


shell "cmd.exe/c ntsd -c q -p " & str(pid) 不行

#16


如果是在窗体的通用模块中,不能用Public,改为Private即可。

如果是标准模块中(.bas),则用Public插入是没有问题的。

试一下。

#17


写好了,还是用shell的,不过也用到了我自己想的批处理文件,下面是代码

Dim ts As New FileSystemObject
Dim tf As TextStream

Private Sub Command1_Click()

Set ts = CreateObject("Scripting.FileSystemObject")
Set tf = ts.CreateTextFile("d:\1.bat")

tf.Write ("ntsd -c q -p ")  '预先写好前段命令
tf.Write (Text1.Text)     '等待写入进程PID
tf.Close

Shell "cmd /c d:\1.bat", vbNormalFocus '执行结束进程命令
Text1.Text = ""

End Sub

能结束有些任务管理器不能结束的进程,呵呵

#18


Gutta(冯大狂),可以用private的,谢。好了,总算学了点东西。

#19


原来
Shell "cmd /c d:\1.bat", vbNormalFocus 
可以直接写成
Shell "d:\1.bat", vbNormalFocus 
这样就快多了

#20


SHELL还能这样用……谢谢谢谢~

#1


VB中间的cmd调用和直接在cmd中间有很大的区别,要写类模块进行处理
如果不是太复杂的问题,建议你最好放弃你现在的想法

#2


shell 调用

#3


楼上的说得对!shell调用

#4


如果不采用调用的方法我也有个想法,就是用VB产生一个.BAT或.CMD文件,然后向上面我说的,输入PID值后传输到那个文件中去,让那个批处理文件去命令执行,只要能传过去就行了,这怎么搞呢?

楼上各位,我刚学VB,很多东西都不懂,能不能说的具体一点啊?谢

#5


winexec可以产生如同手工点击bat文件的效果

#6


shell "cmd.exe/c ping www.csdn.net"

#7


shell "ntsd -c q -p "&cstr(pid)
这样应该可以

#8


不好意思,搞错了。

#9


VB创建和写入BAT文件我已经会了,就差调用执行了
那个winexec怎么用啊,能不能说具体点,谢!

#10


使用&&来隔开你的命令:
例如,你要在一个dos窗口中先后完成dir、netstat两个命令,这样:
Private Sub Command1_Click()
s = "cmd.exe /c dir && cmd.exe /k netstat -a"
Shell s, vbNormalFocus
End Sub

vb6+xp下通过。。。。

#11


哈哈,楼上这种方法这么简单啊,谢谢!
我加了个自动关闭CMD窗口的

我想把使用winexec的也搞会
winexec这样声明有什么问题吗:
Declare Function WinExec Lib "Kernel"(ByVal lpCmdLine As String,ByVal nCmdShow As Integer) As Integer
编译出错,郁闷

#12


Public Declare Function WinExec Lib "kernel32" Alias "WinExec" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long

#13


shell "cmd.exe/c ntsd -c q -p " & str(pid)

蹭点

#14


Public Declare Function WinExec Lib "kernel32" Alias "WinExec" (ByVal lpCmdLine As String, ByVal nCmdShow As Long) As Long
这样声明一样错误,说不允许作为对象模块的public成员
可是我是通过api浏览器插入的呀,照理应该对的,怎么回事?

#15


shell "cmd.exe/c ntsd -c q -p " & str(pid) 不行

#16


如果是在窗体的通用模块中,不能用Public,改为Private即可。

如果是标准模块中(.bas),则用Public插入是没有问题的。

试一下。

#17


写好了,还是用shell的,不过也用到了我自己想的批处理文件,下面是代码

Dim ts As New FileSystemObject
Dim tf As TextStream

Private Sub Command1_Click()

Set ts = CreateObject("Scripting.FileSystemObject")
Set tf = ts.CreateTextFile("d:\1.bat")

tf.Write ("ntsd -c q -p ")  '预先写好前段命令
tf.Write (Text1.Text)     '等待写入进程PID
tf.Close

Shell "cmd /c d:\1.bat", vbNormalFocus '执行结束进程命令
Text1.Text = ""

End Sub

能结束有些任务管理器不能结束的进程,呵呵

#18


Gutta(冯大狂),可以用private的,谢。好了,总算学了点东西。

#19


原来
Shell "cmd /c d:\1.bat", vbNormalFocus 
可以直接写成
Shell "d:\1.bat", vbNormalFocus 
这样就快多了

#20


SHELL还能这样用……谢谢谢谢~

#21