Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Example | Скрываем чужую консоль

Ответить
Настройки темы
Разное - Example | Скрываем чужую консоль

Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85


Конфигурация

Профиль | Отправить 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

 

Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


Vadikan
Цитата:
Только вот ключ стал /w. Вы либо сделайте нечувствительным к регистру, либо верните /W, а то путаница получается.
Исправлено. Голова к вечеру начинает кое-что вспоминать ;]. Щас залью новые бинарник и исходник (через пару минут). К регистру нечувствительно.

hasherfrog
Я почему-то считал, что memset - своеобразный inline и трогать его не стал...

Отправлено: 14:29, 28-06-2005 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


Savant
Исправил на |0x40 на |0x20?
:] Балбесы.

>> memset - своеобразный inline и трогать его не стал...
Может и так. Но инклуд за инклудом тянет какую-то либу при линковке - я проверял.

Отправлено: 14:39, 28-06-2005 | #12


(*.*)


Сообщения: 36539
Благодарности: 6689

Профиль | Сайт | Отправить PM | Цитировать


hasherfrog & Savant
Спасибо. На MSFN утилиту же протестировали на Т-39 (за 39 минут до окончания установки виндовс, самый ранний этап на котором пользователь может запускать исполняеме файлы) - все работает.

Насчет разных редакторов я понял, а вот этого
Цитата:
>> memset - своеобразный inline и трогать его не стал...
Может и так. Но инклуд за инклудом тянет какую-то либу при линковке - я проверял.
мне не надо, спасибо :D

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 23:01, 28-06-2005 | #13


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


Vadikan
>> comments in Russian, though ;-)
LOL. Может правда перевести на англ.?

Отправлено: 23:14, 28-06-2005 | #14


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


>> мне не надо, спасибо :D
Ну ты это, заходи, если что... (c) Волк, "Жил-был пёс"
;-)

P.S. А тему мы завтра утречком почистим... Наверное. :-/

Отправлено: 01:13, 29-06-2005 | #15


(*.*)


Сообщения: 36539
Благодарности: 6689

Профиль | Сайт | Отправить PM | Цитировать



Savant
Да ну, вряд ли там кто вникать будет в комменты. Просто изначально в этой теме было с исходным кодом, так там и сделал.

hasherfrog
Да, это вам не букмарклетам русский эквивалент придумывать, тут целиком предложения на сленге

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 02:01, 29-06-2005 | #16


(*.*)


Сообщения: 36539
Благодарности: 6689

Профиль | Сайт | Отправить PM | Цитировать


Утилита подверглась усиленному тестированию на MSFN. Как выяснилось, она не работает из cmdlines.txt. Команды внесенные в файл передаются командному интерпретатору в порядке их появления в файле. Синтаксис файла такой
Код: Выделить весь код
[Commands]
"batch1.cmd"
"batch2.cmd"
Кавычки обязательны. (подробнее)
Не работает вариант
Код: Выделить весь код
[Commands]
"hidec.exe batch.cmd"
Как об'яснил в PM Savant
Цитата:
Дело в том, что там исполняемая строка полностью заключена в кавычки, а в алгоритме разбора исполняемой строки учитывается случай, когда имя файла заключается в кавычки, т.е. например "x:\path with spaces\hidec.exe" /w cmd.exe
hasherfrog, я поднял тему, т.к. не уверен что ты в курсе Может у тебя возникнут красивые идеи решения проблемы? Понятно, что утилита не задумывалась для работы из cmdlines.txt, но все-таки... ;-)

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 23:16, 09-07-2005 | #17


Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


Меня вот какие вопросы интересуют: а предполагается ли запуск из cmdlines.txt такой конструкции "<exe-file> <parameter(s)>" и в каком виде передается исполняемая строка?
Просто из командной строки, например, выполнить такое нельзя (все, что имеется в кавычках будет посчитано за имя файла и будет выдано сообщение """winmine /?"" не является внутренней или внешней командой, исполняемой программой или пакетным файлом."). Тем не менее, почему-то прокатывает вариант "cmd /?"...

Отправлено: 15:48, 10-07-2005 | #18


Аватара для hasherfrog

Старый параноик


Сообщения: 2423
Благодарности: 85

Профиль | Отправить PM | Цитировать


"cmd /?" выполнить нельзя. Попробуйте не из командной строки, а из Пуск->Выполнить.
Vadikan, как-то не совсем понятно. Почитал-почитал доки по ссылке "почему"...
А если (без /w)
Код: Выделить весь код
"hidec" "file1.cmd"
"hidec" "file2.cmd"
Или (с /w)
Код: Выделить весь код
"hidec /w file1.cmd"
"hidec file2.cmd"
?

Всё дело в особенностях передачи аргументов в качестве командной строки. Я одно время очень тщательно разбирался с этим вопросом. И могу точно сказать, что в случае
Цитата:
т.е. например "x:\path with spaces\hidec.exe" /w cmd.exe
Будет так:
1. С использованием argv, argc:
аргумент 0: x:\path with spaces\hidec.exe - без кавычек
аргумент 1: /w
аргумент 2: cmd.exe
2. С простым разбором (как у Savant'а:
аргумент 0: x:\path with spaces\hidec.exe - не важно, но 99%, что без кавычек
аргумент 1: /w cmd.exe - без кавычек.

Нельзя писать так:
c:/> "hidec" "/w cmd"
c:/> "hidec /w cmd"
c:/> "hidec cmd"
Можно так:
c:/> "hidec" /w "cmd"
c:/> "hidec" /w cmd
c:/> hidec /w cmd

Что же касается файлов cmdlines.txt... Я не понял всё равно, почему Вы всё время пытаетесь запустить "hidec 1.cmd", а не "1.cmd", внутри которого куча hidec'ов? Есть, конечно, ещё вариант запрятать /w прямо внутрь hidec, т.е. сделать какой-нибудь wait4 (аналог hidec, но с ожиданием), если уж всё так упёрлось именно в /w. Будет две утилитки, а не одна?

Отправлено: 21:52, 10-07-2005 | #19


(*.*)


Сообщения: 36539
Благодарности: 6689

Профиль | Сайт | Отправить PM | Цитировать


hasherfrog
Цитата:
Vadikan, как-то не совсем понятно. Почитал-почитал доки по ссылке "почему"...
А если (без /w)
Да собственно /w в данном случае не причем. В cmdlines.txt этот ключ вообще не нужен, т.к. команды и так выполняются по очереди.
Цитата:
Что же касается файлов cmdlines.txt... Я не понял всё равно, почему Вы всё время пытаетесь запустить "hidec 1.cmd", а не "1.cmd", внутри которого куча hidec'ов?
Исключительно с эстетической точки зрения: чтобы консольные окна не мелькали. Это единственная причина. Просто маньяки автоустановки любят чтобы все было тихо-скрытно

Упирается-то не в ключ /w, a в то, что не срабатывает
Код: Выделить весь код
[Commands]
"hidec.exe batch.cmd"
Впрочем, это по отчетам других пользователей. Я сейчас образ сделаю и сам проверю срабатывает или нет.

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 00:23, 11-07-2005 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Example | Скрываем чужую консоль

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Консоль 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




 
Переход