|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Example | Скрываем чужую консоль |
|
Разное - Example | Скрываем чужую консоль
|
Старый параноик Сообщения: 2423 |
Профиль | Отправить PM | Цитировать Данная малюсенькая прога призвана решить проблему, описанную здесь. Действительно, иногда "болтающееся" черное окно консоли раздражает. Поэтому мы напишем хитрую "обертку" для конcольных приложений, которые запускают программу, но прячут её основное консольное окно.
#include <process.h> #include <stdio.h> #include <windows.h> int WINAPI WinMain(HINSTANCE hInst,HINSTANCE hPrev,LPSTR lpszCmd,int nCmd) { STARTUPINFO si; PROCESS_INFORMATION pi; /* create process with new console */ memset(&si,0,sizeof(si)); si.cb = sizeof(si); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_HIDE; if( CreateProcess( NULL, lpszCmd, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi ) ) { CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); } /* terminate this */ return 0; } FAQ Q. И как использовать? A. Компилите. Кладёте результат (например hidec.exe) в c:\windows\system32. Вместо стандартного запуска "целевого" консольного приложения идёте в Пуск->Выполнить, набираете hidec.exe путь\имя_целевого_приложения. Консольное приложение будет запущено, но его окна Вы не увидите. Q. Эй, а где оно? И как его теперь закрыть? A. Посмотрите через Ctrl+Alt+Del. Снимать с выполнение - там же. Если "целевое" приложение умеет само закрываться после окончания своей работы, то оно так и сделает. Q. А может, лучше _default.pif настроить, или ярлык с определёнными свойствами сделать? A. Я никого не заставляю делать именно по-моему. Q. Как компилить? A. Я использую Visual C++ Toolkit. Компиляция: cl hide_console.cpp /GA /O1 /link /defaultlib:advapi32.lib /defaultlib:user32.lib Q. И что, я в своих консольных приложениях такое должен делать? A. Нет. В "своём" консольном приложении используёте FreeConsole(), или пишите через WinMain, а не main(). Данная "обёртка" нужна для чужих приложений. Q. Можно использовать в моих программах куски текста? A. Да, сделано специально для посетителей www.oszone.net Q. У меня ещё вопросы... A. Задавайте здесь, я отвечу. |
|
Отправлено: 15:40, 29-06-2004 |
(*.*) Сообщения: 36541
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 08:05, 11-07-2005 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать Vadikan
Я повторю. Предположим, есть batch.cmd, в котором происходит вызов пяти cmd.exe. Каждый из них будет открывать консоль самостоятельно. Итого - пять штук. Применённый как такому batch.cmd одноразовый hidec (i.e. hidec batch.cmd) скроет только окно консоли самого batch.cmd, на cmd.exe внутри он не подействует, потому что и не должен. Он обрубает только показ окна процесса-сына. Внуки вольны поступать, как им заблагорассудится. Более того, если бы, предположим, cmd.exe открывал два окна, скрывалось бы только первое. Поэтому я и настаиваю на использовании hidec внутри batch.cmd, попытка "обернуть" серию консольных приложений не пройдёт никогда. В примере, вызов hidec batch.cmd: ничего не даст, но вызов batch.cmd именно то, что нужно. Надеюсь, объяснил. |
Отправлено: 09:09, 11-07-2005 | #22 |
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать hasherfrog
Но в таком случае окно batch.cmd будет висеть все время выполнения внутренних команд... |
Отправлено: 09:12, 11-07-2005 | #23 |
Старый параноик Сообщения: 2423
|
Профиль | Отправить PM | Цитировать Savant
Ну да. Поэтому для "полной заглушки" нужно ещё и hidec batch.cmd. Более того, в большинстве стандартных случаев (например, при выполнении батника с системными командами типа cls, dir и т.д.; а также при выполнении консольных приложений, которые довольствуются родительской консолью, а не открывают свою) достаточно одного вызова hidec'а, на собственно batch.cmd. Но в случае с cmdlines.txt очевидно, что процесс, отвечающий за отработку команд оттуда (из cmdlines.txt) вынимает команды по очереди и каждое очередное приложение не имеет родительской консоли, потому что консоль предыдущего приложения из очереди закрылось всесте с самим приложением. Наверное, так. Чего-то я уже запутываюсь. |
Отправлено: 09:28, 11-07-2005 | #24 |
(*.*) Сообщения: 36541
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Savant:
hasherfrog Я понимаю как пользоваться утилитой, и как вызывать при ее помощи пакетные файлы абсолютно незаметно. Я ж говорю, я протестировал и GuiRunOnce (исполняется из соотв. ключа реестра при первом входе в систему) и RunOnceEx (примерно тоже самое). В обоих случаях все работает, вызывается hidec batch.cmd и все ок. Но в cmdlines.txt другой синтаксис. Команды перечисленные там передаются командному интерпретатору. Как передаются - хрен его знает. DOS команды там не работают, но виндовские приложения - да (REGEDIT и т.д). Но консольные окна hidec'ом не скрываются. Когда я говорю, что оин "мигают", я имею в виду, что у меня в самом батнике еще cmdow @ /HID со старых времен прописано, чтоб консольное окно не висело. В общем, я знаю, что у тебя много работы. Утилита же не задумывалась для cmdlines.txt. Будет время - что-нибудь придумаешь. Не будет - и так нормально. |
|
------- Отправлено: 09:30, 11-07-2005 | #25 |
(*.*) Сообщения: 36541
|
Профиль | Сайт | Отправить PM | Цитировать Вопрос мне в PM пришел
Цитата:
|
|
------- Отправлено: 21:51, 18-07-2005 | #26 |
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать Possible.
И даже проще, чем обычный вариант. Не надо командную строку разбирать Правда код придется новый катать. Предлагаю такой прототип: // Возвращает 0, если все ОК и не-0, если ошибка int RunHiddenConsole(char* lpszCmdLine, BOOL bWait); В принципе все готово, но еще не проверял. А мне утром доверять нельзя ;] Млин, во вложении почему-то оказался hidec[1].dll - на самом дело это зип-архив. Не верьте расширению! Updated! Добавил тестовое приложение. Кое-что подправил. |
Последний раз редактировалось Savant, 19-07-2005 в 11:14. Отправлено: 22:03, 18-07-2005 | #27 |
Старожил Сообщения: 342
|
Профиль | Сайт | Отправить PM | Цитировать Ух ну а все таки, где взять последнюю версию бинарника
и каков его синтаксис? |
------- Отправлено: 10:51, 20-12-2005 | #28 |
Старожил Сообщения: 300
|
Профиль | Сайт | Отправить PM | Цитировать На первой странице, либо здесь
|
Отправлено: 18:47, 20-12-2005 | #29 |
Старожил Сообщения: 342
|
Профиль | Сайт | Отправить PM | Цитировать Savant
А синтпксис каков, ибо я так понел сам код притерпел модификации и хотелось бы уточнить синтаксис командной строки |
------- Отправлено: 09:39, 22-12-2005 | #30 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Консоль Windows | Sweet_Lady | Хочу все знать | 13 | 27-03-2009 21:28 | |
Прочее - [решено] last login..(консоль) | slaine | Общий по Linux | 2 | 24-11-2008 18:21 | |
[решено] консоль ММС и удаленное управление | nedrug | Microsoft Windows 2000/XP | 6 | 20-03-2007 16:21 | |
[решено] Консоль с добиванием табом как в Linux? | andrey_tor | Microsoft Windows 2000/XP | 5 | 23-02-2006 12:32 | |
Delphi - Delphi: как закрыть чужую прогу | pvr30 | Программирование и базы данных | 13 | 06-08-2003 19:15 |
|