当前位置:编程学习 > VB >>

shell 如何去掉一闪而过的dos窗口(vbhide不行)

环境: winxp_sp2/vb6
code: Shell "cmd.exe /c ncc.exe 1.g 2.go >> error.txt ", vbHide
问题: 有Dos窗口闪过,如何去掉
--------------------编程问答-------------------- sendkeys向该窗口发送exit --------------------编程问答-------------------- 谁跟你说 vbhide不管用 ?

那是因为你的语法错误, 1.g 2.go 是什么文件, cmd 会理你吗? 

Shell "cmd.exe /c dir c:\*.*/s/b >c:\error.txt", vbHide

--------------------编程问答-------------------- ncc.exe 1.g 2.go >> error.txt 

ncc.exe=nc.exe?

--------------------编程问答-------------------- 如果你有多项的话, 最好建立一个 .bat 批次档,再去shell这个 .bat

.bat 第一行加上 @echo off --------------------编程问答-------------------- 学习.............. --------------------编程问答-------------------- 学习……………… --------------------编程问答--------------------
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
Dim Ret As Long
Private Sub Command1_Click()
   
   Ret = FindWindow(vbNullString, "命令提示符")
   If Ret <> 0 Then SendMessage Ret, WM_CLOSE, 0, 0
   
   Ret = FindWindow(vbNullString, "C:\WINDOWS\system32\cmd.exe")
   If Ret <> 0 Then SendMessage Ret, WM_CLOSE, 0, 0

End Sub
--------------------编程问答-------------------- 如果不关闭可以采用API函数ShowWindow:
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 Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Const SW_NORMAL As Long = 1   '正常
Private Const SW_MINIMIZE As Long = 6 '最小化
Private Const SW_MAXIMIZE As Long = 3 '最大化
Private Const SW_HIDE As Long = 0     '隐藏
Private Const SW_SHOW As Long = 5     '显示


Dim Ret As Long
Private Sub Command1_Click()
   
   Ret = FindWindow(vbNullString, "命令提示符")
   If Ret <> 0 Then ShowWindow Ret, SW_MINIMIZE
   
   Ret = FindWindow(vbNullString, "C:\WINDOWS\system32\cmd.exe")
   If Ret <> 0 Then ShowWindow Ret, SW_MINIMIZE

End Sub

--------------------编程问答-------------------- 在CMD.exe 开始时,@echo off结束时 @echo on --------------------编程问答-------------------- 没个能回答到重点上

Shell "ncc.exe 1.g 2.go >> error.txt ", vbHide 

ncc.exe前如果不在系统目录中最好加上全路径

--------------------编程问答-------------------- 用CreateProcess执行,如果想要命令提示符输出的内容,可以用CreatePipe建立管道实现,具体示例代码可以Google下CreatePipe --------------------编程问答-------------------- Win32   API超级工具   
    
  【函数】   
  ShellExecute   
    
  【操作系统】   
  Win9X:Yes   
  WinNT:Yes   
    
  【声明】   
 Public 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

  【说明】   
    
            
      查找与指定文件关联在一起的程序的文件名     
    
  【返回值】   
    
      Long,非零表示成功,零表示失败。会设置GetLastError     
    
  【其它】   
    
    
  【参数表】   
      hwnd   -----------     Long,指定一个窗口的句柄,有时候,windows程序有必要在创建自己的主窗口前显示一个消息框   
    
      lpOperation   ----     String,指定字串“open”来打开lpFlie文档,或指定“Print”来打印它   
    
      lpFile   ---------     String,想用关联程序打印或打开一个程序名或文件名   
    
      lpParameters   ---     String,如lpszFlie是可执行文件,则这个字串包含传递给执行程序的参数           参数
    
      lpDirectory   ----     String,想使用的完整路径   
    
      nShowCmd   -------     Long,定义了如何显示启动程序的常数值。参考ShowWindow函数的nCmdShow参数   
    

  nShowCmd参数为SW_HIDE,则窗口隐藏  --------------------编程问答-------------------- 参考:

管道重定向技术

http://topic.csdn.net/u/20080314/21/5aa66dea-2a8a-45a1-bd38-d305bbb1b8fa.html
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,