запустить процесс в файле .bat, но скрыть его? - PullRequest
2 голосов
/ 01 июня 2010

Я хотел бы запустить одно из моих приложений в файле .bat, но оно видно и занимает место на панели задач. Как мне запустить приложение и не видеть его?

Ответы [ 4 ]

2 голосов
/ 01 июня 2010

Вот утилита, которую я написал несколько лет назад, чтобы сделать это:

#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 голос
/ 03 февраля 2015

Здесь Я собрал все известные мне способы запуска скрытого процесса с помощью пакета без внешних инструментов. С готовыми к использованию скриптами (некоторые из них богаты опциями) , и все они формируют командную строку. Где возможно, также возвращается PID. Используемые инструменты - IEXPRESS, SCHTASKS, WScript.Shell, Win32_Process и JScript.Net - но все они упакованы в .bat файлы.

1 голос
/ 01 июня 2010

Предполагая, что вы хотите открыть приложение и сразу получить запрос DOS, используйте start <command> в файле .bat вместо <command>

0 голосов
/ 01 июня 2010

Если вы не боитесь использовать Perl, то сработает

use Win32::GUI;
Win32::GUI::Hide(scalar(Win32::GUI::GetPerlWindow()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...