相关文章推荐
憨厚的小马驹  ·  about_Debuggers - ...·  2 月前    · 
寂寞的绿豆  ·  about_PSSession_Detail ...·  2 月前    · 
气势凌人的跑步鞋  ·  Invoke-Sqlcmd ...·  7 月前    · 
睿智的羊肉串  ·  Mockito不能mock ...·  1 年前    · 
私奔的毛巾  ·  Exchange Server ...·  1 年前    · 

运行命令时隐藏 cmd 窗口

当我们运行 .bat 文件,或者用其他软件调用 cmd /c ... 时,cmd 窗口会一闪而过(或者停留一阵,如果运行时间较长),有些时候非常碍眼。有很多方法可以隐藏这个 cmd 窗口,比如用各种语言调用 WScript.Shell 的 Run 函数,用 AHK 的 Run 函数,还有不少 SilentCMD hide-win32-console-window 之类的工具。但这些方法都比较慢,一般需要 30 毫秒以上。写不好的话,空格、引号、括号之类地方还会出问题。

其实用 C 语言实现这个功能很简单,耗时也在 10 毫秒之内。

wrun.c:

#include <windows.h>
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow) {
    STARTUPINFO si;
    PROCESS_INFORMATION pi;
    ZeroMemory(&si, sizeof(si));
    si.cb = sizeof(si);
    ZeroMemory(&pi, sizeof(pi));
    CreateProcessW(NULL, lpCmdLine, NULL, NULL, 0, CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
    return 0;