`
htallen
  • 浏览: 17970 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

vc调用dos命令总结

阅读更多
曾经要维护多台windows server服务器,经常需要打补丁。
每次打补丁都非常麻烦,需要在服务器上一台台地安装一个一个的补丁,
无奈之下自己开发了一个补丁安装器,点击 安装补丁 即可批量安装指定文件夹的所有补丁,这样工作量终于低下来了。
程序很简单,就是点击 安装补丁 按钮后 利用多线程去调用本地命令安装补丁。
程序源码和打包后的软件见附件。
(时间有限,由于直接在另一个不相干的现有工程中写的代码,所以程序源码编码不规范)


以下内容转载。出处不明。 

 要在控制台程序里面调用dos命令可以使用system函数,如system("dir");会把当前目录下的文件列表显示出来。


       但如果在可视化窗口界面调用这个命令则会出现一个小问题了


       1 调用命令时会出现一个dos窗口一闪而过,影响视觉效果。

       2 无法将命令的执行结果反馈给用户。


       所以我们要用另外一个函数来解决这个问题:WinExec。(注1)

       WinExec的作用是运行指定的程序,其中第一个参数是程序的路径及参数,第二个参数是定义了以怎样的形式启动程序的常数值(详细请见msdn)。


       比如我们要获得当前目录下的文件列表,可以这样

        WinExec("cmd.exe /c dir > result.txt", SW_HIDE);

        执行这行代码后,将会在当前目录下生成一个result.txt的文件,文件的内容就是执行dir命令的输出(注2)。并且不会出现dos窗口(SW_HIDE代表隐藏窗口)


       有时候我们需要同时执行数条语句,是不是要执行多次system调用呢?

       答案是否定的,dos自身提供了执行多条命令的功能,符号&&代表同时执行多条命令。

       如“cd C:\demo && dir”会首先将目录切换到 C:\demo文件夹,然后执行dir命令。


       利用&&命令可以实现这样的功能:暂停等待用户按下任意键,接下来执行某个命令。

       如:pause && dir 会在屏幕上显示“请按任意键继续”和,在用户按下任意键后会执行dir命令输出文件列表。

       

       上面利用pause命令实现暂停,但有个副作用:如果用户不按下键盘,程序就会永远停在那里。所以我们可以换个命令以实现暂停某段时间后继续。pause命令是不接受参数的,我们要换另一个命令:ping。可以大家以前也用过ping,不过一般是用来探测网络信息的吧?这里用它来实现暂停某段时间:

       “ping -w 3000 w > nul”暂停三秒后继续(注3)

       

注1:

UINT WinExec(

LPCSTR lpCmdLine,

UINT uCmdShow

);


Parameters
nCmdShow 
Specifies how the CWnd is to be shown. It must be one of the following values: 
SW_HIDE    Hides this window and passes activation to another window. 
SW_MINIMIZE    Minimizes the window and activates the top-level window in the system's list. 
SW_RESTORE    Activates and displays the window. If the window is minimized or maximized, Windows restores it to its original size and position. 
SW_SHOW    Activates the window and displays it in its current size and position. 
SW_SHOWMAXIMIZED    Activates the window and displays it as a maximized window. 
SW_SHOWMINIMIZED    Activates the window and displays it as an icon. 
SW_SHOWMINNOACTIVE    Displays the window as an icon. The window that is currently active remains active. 
SW_SHOWNA    Displays the window in its current state. The window that is currently active remains active. 
SW_SHOWNOACTIVATE    Displays the window in its most recent size and position. The window that is currently active remains active. 
SW_SHOWNORMAL    Activates and displays the window. If the window is minimized or maximized, Windows restores it to its original size and position. 

注2:

这里用到了DOS的重定向技术,大家可以百度搜索一下,这里只简单地介绍一下>的作用:

将屏幕显示的内容转到文件中输出



注3:

这里为了不显示ping命令的结果,使用了重定向技术,将输出转到空设备 


nul是Dos中的一个设备文件名 表示空设备,其它设备还有

CON 控制台(键盘/显示器) AUX 第一串行通信口 

PRN 第一并行通信口/打印机 COM1 第一串行通信口 

LPT1 第一并行通信口/打印机 COM2 第一串行通信口 

LPT2 第一并行通信口/打印机 NUL 空文件
分享到:
评论

相关推荐

    VC调用dos命令总结

    ### VC调用DOS命令详解 在VC++(Visual C++)编程环境下,开发者经常会遇到需要执行DOS命令的情况,例如获取系统信息、文件管理等。本文将详细解析如何在VC环境中有效地调用DOS命令,并探讨两种常用方法:`system`...

    vc调用dos命令netsh配置网络ip等参数

    总结起来,本项目的核心是使用VC++调用DOS命令`netsh`来配置网络接口的IP设置。这个过程涉及到VC++程序设计、Windows API的使用以及对`netsh`命令的理解。通过完善这个工具,我们可以创建一个便捷的网络配置助手,...

    VC中执行DOS命令,获取返回值的例子

    4. 调用`CreateProcess`:将之前准备好的参数传递给`CreateProcess`函数,它会创建一个新的进程并执行DOS命令。函数返回值表示是否成功创建了进程,而通过`GetExitCodeProcess`函数,我们可以获取到DOS命令的退出...

    VC通过管道获得DOS命令的输出结果 在你的程序中调用dos命令

    总结来说,通过在Visual C++中利用管道和`_popen()`函数,我们可以方便地在程序中调用DOS命令并获取其输出结果,这极大地增强了程序的功能和灵活性。在实际应用中,应根据具体需求调整代码,并注意安全性和性能优化...

    VC运行DOS命令源代码

    这个“VC运行DOS命令源代码”示例就是为了解决这样的需求,它允许开发者在VC程序中调用并执行DOS命令。下面将详细介绍这个过程中的关键知识点。 1. **创建进程**: 在Windows操作系统中,执行DOS命令本质上是创建...

    调用dos命令出问题了

    这个问题描述中提到的“调用DOS命令出问题了”,可能指的是在VC++环境下尝试通过系统API或者某些库函数来运行DOS命令时遇到了困难。这里我们主要讨论如何在VC++中调用DOS命令以及可能出现的问题。 首先,VC++调用...

    在VC下执行DOS命令并得到输出

    在VC下执行DOS命令并得到输出 system方法 WinExec方法 ShellExecute方法 可回显的调用方法

    VC 记录dos下的 net share 命令 执行过后的 结果

    接下来,"VC dos 命令 管道"的标签表明可能在讨论如何通过VC++程序调用DOS命令并捕获其输出。在VC++中,我们可以使用`system()`函数来执行DOS命令,但无法直接获取命令的输出。为了捕获输出,我们可以利用管道(pipe...

    VC下DOS操作

    ### VC下DOS操作知识点详解 #### 一、Echo 命令 - **功能**:`echo` 命令用于打开或关闭命令行的回显功能,也可以用来显示一条消息。 - **语法**:`echo [{on|off}][message]` - **示例**:`echo off / echo hello ...

    VC DOS下生成DLL文件以及DLL工程事例

    在VC DOS环境下生成DLL文件,是一项对于熟悉老式操作系统与编程技术的开发者而言至关重要的技能。这篇文章将探讨如何在DOS环境下使用Borland C++编译器来创建动态链接库(DLL)以及对应的工程实例。DLL是Windows操作...

    基于VC的模拟DOS控制台程序

    .bat文件是批处理文件,包含一系列DOS命令,可以一次性执行,类似于脚本文件。 6. **模拟运行**: 模拟DOS控制台程序的核心是能够在Windows环境中运行原本为DOS设计的.exe和.bat文件。这需要模拟DOS的内核功能,处理...

    VC及DOS下PING源码(网上搜集)

    【标题】"VC及DOS下PING源码(网上搜集)"揭示了这个压缩包包含的是在两种不同的操作系统环境——Microsoft Visual C++ (VC) 和DOS系统下的PING命令实现的源代码。PING是一个网络诊断工具,用于测试网络连接性和响应...

    C++ 调用带参数EXE

    它可以执行DOS命令或者简单的系统命令,例如`system("notepad.exe")`将打开记事本程序。然而,`system`函数不能直接传递参数给被调用的EXE,也不提供对程序窗口的控制。此外,由于它会创建子进程并等待其结束,所以...

    1-VC_get_DOS_Result.rar_ 1-VC_get_DOS_Resu_DOS

    在C++中,我们可以通过创建子进程来运行DOS命令,并通过管道或重定向I/O流来捕获其输出。 在C++ .NET中,我们可以使用`CreateProcess`函数来创建一个新的进程,该函数允许我们指定要执行的程序(如DOS命令)及其...

    vc实现的ping程序

    "vc实现的ping程序"是一个使用VC编写的命令行工具,它利用Internet控制消息协议(ICMP)来实现网络连通性的检测功能,类似于操作系统内置的`ping`命令。这个程序在DOS环境下运行,用户可以输入目标IP地址或域名,...

    VC实现IP自动切换工具 启动画面

    描述中提到的“IP的切换是利用DOS命令来实现的”,意味着这个工具可能基于DOS命令行接口,或者在后台调用DOS命令来执行IP地址的更改操作。在Windows操作系统中,DOS命令通常指的是CMD命令行,通过`ipconfig`命令可以...

    C和C++VC多进程线程调用编程

    它直接执行shell命令,如在Windows下,实际上是将命令传递给DOS或cmd.exe。例如,`system("attrib +r c:\windows\myfile.txt")` 将使`myfile.txt`文件变为只读。但需要注意的是,`system`函数在Windows和Linux上可用...

    VC 经验总结

    ### VC经验总结 #### 关键知识点: 1. **工具栏自定义** 2. **消息处理:`WM_QUERYENDSESSION` 和 `WM_ENDSESSION`** 3. **控制台操作:创建与关闭** 4. **在VC++中执行DOS命令** 5. **目录删除功能实现** --- #...

Global site tag (gtag.js) - Google Analytics