5-8万年薪顶级嵌入式,京沪深就业地 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

我想顺序执行4个DOS程序,请大家帮帮我

楼主ww111222(ww111222)2005-01-12 13:13:26 在 VB / 基础类 提问

 
      没有找到相关的贴子,只好请大家帮忙了  
   
   
  问题点数:0、回复次数:23Top

1 楼sworddx(.:RNPA:. hillin)回复于 2005-01-12 13:20:44 得分 0

假设4个DOS程序分别是1.exe,2.exe,3.exe,4.exe,都放在c:\下:  
  Private   Declare   Function   ShellExecute   Lib   "shell32.dll"   Alias   "ShellExecuteA"   (ByVal   hwnd   As   Long,   ByVal   lpOperation   As   String,   ByVal   lpFile   As   String,   ByVal   lpParameters   As   String,   ByVal   lpDirectory   As   String,   ByVal   nShowCmd   As   Long)   As   Long  
   
  private   sub   form_load()  
  dim   scmd   As   string  
  scmd="C:"   &   vbcrlf   &   "cd   \"   &   vbcrlf   &   "1.exe"   &   vbcrlf   &   "2.exe"   &   vbcrlf   &   "3.exe"   &   vbcrlf   &   "4.exe"  
  open   "c:\1.bat"   for   output   as   #1  
      print   #1,scmd  
  close   #1  
  shellexecute   0,"open","c:\1.bat",vbnullstring,vbnullstring,vbnull  
  end   subTop

2 楼laviewpbt(人一定要靠自己)回复于 2005-01-12 13:24:10 得分 0

请问如何在vb中用同步方式调用外部dos命令  
  http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=85141Top

3 楼ww111222(ww111222)回复于 2005-01-12 13:24:54 得分 0

 
      谢谢这位大哥了,     这4个DOS程序都带有不同的参数  
   
   
      而且我要在VB中控制   这些参数  
   
  Top

4 楼sworddx(.:RNPA:. hillin)回复于 2005-01-12 13:27:56 得分 0

那简单,改一下就是了  
   
  假设4个DOS程序分别是1.exe,2.exe,3.exe,4.exe,都放在c:\下;参数分别是param1,param2,param3,param4:  
  Private   Declare   Function   ShellExecute   Lib   "shell32.dll"   Alias   "ShellExecuteA"   (ByVal   hwnd   As   Long,   ByVal   lpOperation   As   String,   ByVal   lpFile   As   String,   ByVal   lpParameters   As   String,   ByVal   lpDirectory   As   String,   ByVal   nShowCmd   As   Long)   As   Long  
   
  private   sub   form_load()  
  dim   scmd   As   string  
  scmd="C:"   &   vbcrlf   &   "cd   \"   &   vbcrlf   &   "1.exe   /"   &   param1   &   vbcrlf   &   "2.exe   /"   &   param2   &   vbcrlf   &   "3.exe   /"   &   param3   &     vbcrlf   &   "4.exe   /"   &   param4  
  open   "c:\1.bat"   for   output   as   #1  
      print   #1,scmd  
  close   #1  
  shellexecute   0,"open","c:\1.bat",vbnullstring,vbnullstring,vbnull  
  end   sub  
  Top

5 楼ww111222(ww111222)回复于 2005-01-12 13:31:21 得分 0

 
      谢谢,我试试啦Top

6 楼shiyunlong(君子爱财-取之用刀)回复于 2005-01-12 13:35:13 得分 0

markTop

7 楼douhapy(双喜)回复于 2005-01-12 13:42:17 得分 0

最好使用这两个函数  
  Public   Declare   Function   OpenProcess   Lib   "kernel32"   Alias   "OpenProcess"   (ByVal   dwDesiredAccess   As   Long,   ByVal   bInheritHandle   As   Long,   ByVal   dwProcessId   As   Long)   As   Long  
   
  Public   Declare   Function   CloseHandle   Lib   "kernel32"   Alias   "CloseHandle"   (ByVal   hObject   As   Long)   As   Long  
  Top

8 楼terry6394(小猪,向前跑!)回复于 2005-01-12 16:46:43 得分 0

有创意,用批处理...  
  sworddx   的方法很好啊!Top

9 楼terry6394(小猪,向前跑!)回复于 2005-01-12 16:52:56 得分 0

狗尾续貂一下:  
  如果你想运行之后还留下命令行窗口你可以这样!  
   
  scmd="C:"   &   vbcrlf   &   "cd   \"   &   vbcrlf   &   "1.exe   /"   &   param1   &   vbcrlf   &   "2.exe   /"   &   param2   &   vbcrlf   &   "3.exe   /"   &   param3   &     vbcrlf   &   "4.exe   /"   &   param4   &   vbcrlf     &   "%SystemRoot%\system32\cmd.exe"Top

10 楼sworddx(.:RNPA:. hillin)回复于 2005-01-12 17:10:33 得分 0

to   douhapy(双喜)  
  简单的问题没必要复杂化吧~Top

11 楼ww111222(ww111222)回复于 2005-01-12 17:48:50 得分 0

 
   
        谢谢   SWORDDX,  
   
   
      现在产生了一个   小问题了,     我想在运行生成的1.bat后   删除这个文件  
   
   
      用了kill   1.bat    
   
   
      结果   是还没来得及   运行   1.bat就被删除了  
   
  Top

12 楼laviewpbt(人一定要靠自己)回复于 2005-01-12 17:51:19 得分 0

Private   Declare   Function   DeleteFile   Lib   "kernel32"   Alias   "DeleteFileA"   (ByVal   lpFileName   As   String)   As   Long  
  Top

13 楼kmzs(.:RNPA:.山水岿濛)回复于 2005-01-12 17:52:36 得分 0

必须用createprocess等  
  等到运行之后再删除了Top

14 楼ww111222(ww111222)回复于 2005-01-12 18:34:50 得分 0

 
      两位老兄,能不能说明白点?  
   
   
      我是刚学VB   ,不懂呀Top

15 楼rainstormmaster(暴风雨 v2.0)回复于 2005-01-12 18:49:40 得分 0

呵呵,答案在这里:  
   
  http://www.zealsoftstudio.com/articles/qa9805.htmlTop

16 楼VBDN( PowerBASIC.CN )回复于 2005-01-12 18:54:58 得分 0

呵呵,这个东西真有用!  
  以前兄弟做了个自动导出ORACLE数据的工具,先执行EXP命令导出,然后用WINRAR压缩,最后拷贝压缩文档到某一网络驱动器上。我发愁顺序发生混乱一直没有好的解决办法,每天都得点3下鼠标。看来BAT是顺序执行的,可以把三个命令放到BAT里顺序执行啊。再加个Timer,每天5:30下班后自动备份,爽死了!Top

17 楼sworddx(.:RNPA:. hillin)回复于 2005-01-12 19:26:21 得分 0

要删除,还是简单事:)  
  代码改成这样:  
   
  scmd="C:"   &   vbcrlf   &   "cd   \"   &   vbcrlf   &   "1.exe   /"   &   param1   &   vbcrlf   &   "2.exe   /"   &   param2   &   vbcrlf   &   "3.exe   /"   &   param3   &     vbcrlf   &   "4.exe   /"   &   param4   &   vbcrlf     &   "%SystemRoot%\system32\cmd.exe   /c   "   &   chr$(34)   &   "del     c:\1.bat"   &   chr(34)  
   
  这样在执行到最后一行后会重新调用cmd.exe,并且通过附带/C参数执行命令del   c:\1.bat,这样就全部由这个命令行帮你代劳了。Top

18 楼sworddx(.:RNPA:. hillin)回复于 2005-01-12 19:28:20 得分 0

打开命令提示符窗口并执行命令   cmd   /?可以看到帮助,你会发现/c参数可以用来执行某个命令并且在完毕后自动关闭;如果参数改为/k则是不关闭,可以灵活调用。Top

19 楼sworddx(.:RNPA:. hillin)回复于 2005-01-12 19:31:05 得分 0

to   laviewpbt(人一定要靠自己)    
  DeleteFile   api和kill用起来效果是一样的,因为VB不会管你的BAT是否运行完毕,执行了shell或者shellexecute   语句之后直接往下跑,所以仍然会在BAT执行完之前删掉那个文件。  
   
  Top

20 楼laviewpbt(人一定要靠自己)回复于 2005-01-12 19:57:05 得分 0

谢谢楼上的大哥指点。。Top

21 楼douhapy(双喜)回复于 2005-01-13 09:33:03 得分 0

不错,重新学习了Dos时代的知识。  
   
  好多都忘记了,谢谢!Top

22 楼ww111222(ww111222)回复于 2005-01-14 13:28:40 得分 0

 
   
      谢谢各位大哥了  
   
  Top

23 楼sworddx(.:RNPA:. hillin)回复于 2005-01-14 13:51:57 得分 0

不用谢,给分就是了~^_^Top

相关问题

  • 程序执行顺序
  • 请教!有关JavaScript程序执行的顺序!
  • VISUAL C++程序的执行顺序?
  • 为什么程序不按正常顺序执行
  • 问一个关于java小程序执行顺序的问题
  • 很菜的问题(eclipse里jsp程序的执行顺序)
  • 为什么程序不按顺序执行????
  • 关于程序执行顺序的疑惑
  • JUnit 中测试程序的执行顺序
  • 执行顺序

关键词

  • 执行
  • vbcrlf
  • 顺序
  • byval
  • 命令
  • scmd
  • 参数
  • shellexecute
  • bat
  • vbnullstring

得分解答快速导航

  • 帖主:ww111222

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
x 提问