在.bat文件中启动进程但隐藏它?

时间:2010-05-31 23:35:26

标签: windows batch-file

我想在.bat文件中启动我的一个应用程序,但它是可见的并占用了我的任务栏中的空间。我如何启动应用程序而不是让它可见?

4 个答案:

答案 0 :(得分:2)

这是我多年前写的一个实用程序:

#include <windows.h>
#pragma comment(lib, "user32.lib")

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
  const char *p = GetCommandLine();
  if (*p == '"') {
    p++;
    while (*p && *p != '"') {
      p++;
    }
    p++;
  } else {
    while (*p && *p != ' ') {
      p++;
    }
  }
  while (*p == ' ') {
    p++;
  }
  if (*p == 0) {
    MessageBox(NULL, "Usage: nocli <command>\nExecute <command> without a command prompt window.", "nocli Usage", MB_OK);
    return 1;
  }
  //if (MessageBox(NULL, p, "nocli debug", MB_OKCANCEL) != IDOK) return 1;
  STARTUPINFO si;
  ZeroMemory(&si, sizeof(si));
  si.cb = sizeof(si);
  PROCESS_INFORMATION pi;
  if (CreateProcess(NULL, const_cast<char *>(p), NULL, NULL, FALSE, DETACHED_PROCESS, NULL, NULL, &si, &pi)) {
    CloseHandle(pi.hThread);
    WaitForSingleObject(pi.hProcess, INFINITE);
    DWORD exitcode;
    GetExitCodeProcess(pi.hProcess, &exitcode);
    CloseHandle(pi.hProcess);
    return exitcode;
  } else {
    MessageBox(NULL, "Error executing command line", "nocli", MB_OK);
    return 1;
  }
  return 0;
}

没有保证,但它在同一种情况下同时适用于我。 :)

答案 1 :(得分:1)

假设您要打开一个应用程序并立即取消DOS提示,请在.bat文件中使用start <command>,而不只是<command>

答案 2 :(得分:1)

Here 我已经编译了我所知道的所有方法,无需外部工具即可使用批处理启动隐藏进程。使用随时可用的脚本(其中一些包含丰富的选项),所有这些都可以形成命令行。还可以返回PID。使用的工具是IEXPRESS,SCHTASKS,WScript.Shell,Win32_Process和JScript.Net - 但所有这些工具都包含在.bat文件中。

答案 3 :(得分:0)

如果你不害怕使用Perl,那么这就可以了。

use Win32::GUI;
Win32::GUI::Hide(scalar(Win32::GUI::GetPerlWindow()));