Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создать невидимую консоль [D7, WinXP]


diMAN ©   (2003-11-04 08:30:00) 

Я создаю новое консольное окно при помощи AllocConsole. Можно ли сделать так, чтобы это окно создавалось невидимым с последующим его отображением при помощи ShowWindow(GetConsoleWindow, SW_SHOW). Просто нужно изменить позицию и размер консольного окна, а также размер экранного буфера и не хотелось бы, чтобы пользователь видел, как это происходит.


FireHack   (2003-11-04 14:03:00) [1]

создать - невозможно, а сделать уже существующее - легко


diMAN   (2003-11-04 14:01:00) [2]

То есть мы пришли к тому, что в windows невозможно создать невидимое консольное окно, правильно я понял?


FireHack   (2003-11-04 13:50:00) [3]

нет.
все-таки проще будет сделать EnumWindows...


diMAN   (2003-11-04 13:33:00) [4]

> что значит, доступна?

Прежде всего необходимо иметь возможность использовать из родительского приложения по отношению к созданной в дочернем приложении консоли финкции GetConsoleTitle, SetConsoleTitle, GetStdHandle, SetConsoleWindowInfo, SetConsoleScreenBufferSize, одним словом работать с дочерней консолью тоа, как если бы она была создана в родительском приложении.


FireHack   (2003-11-04 13:07:00) [5]

//А созданная таким образом консоль будет доступна из родительского приложения?

что значит, доступна?

поэкспериментируй со стандартными хэндлами косноли (не путать с хэндлом окна) см. ниже

typedef struct _STARTUPINFO { // si
DWORD cb;
LPTSTR lpReserved;
LPTSTR lpDesktop;
LPTSTR lpTitle;
DWORD dwX;
DWORD dwY;
DWORD dwXSize;
DWORD dwYSize;
DWORD dwXCountChars;
DWORD dwYCountChars;
DWORD dwFillAttribute;
DWORD dwFlags;
WORD wShowWindow;
WORD cbReserved2;
LPBYTE lpReserved2;
HANDLE hStdInput; //<<=============
HANDLE hStdOutput; //<<=============
HANDLE hStdError; //<<=============

} STARTUPINFO, *LPSTARTUPINFO;


diMAN   (2003-11-04 11:58:00) [6]

Спасибо. Со второй частью своего предыдущего вопроса я разобрался. Нужно в параметрах CreateProcess указать dwCreationFlags = CREATE_SUSPENDED, а вот что касается первой части своего вопроса, то я так и не нашёл способа получить доступ к консоли, которая создаётся в дочернем приложении из родительского, если в родительском приложении я предварительно не создал консоль с помощью AllocConsole: ни CREATE_NEW_CONSOLE, ни DETACHED_PROCESS не подходят.


FireHack   (2003-11-04 11:28:00) [7]

на все ответ: Да!

читай хелпы по CreateProcess


diMAN   (2003-11-04 11:22:00) [8]

А созданная таким образом консоль будет доступна из родительского приложения? И ещё можно ли при помощи CreateProcess создавать как-бы Suspended приложения. Т.е. только загрузить, что-то сделать, а затем продолжить выполнение дочерней программы.


FireHack   (2003-11-04 10:51:00) [9]

Тогда, думаю, только с помощью стороннего загрузчика
lpStartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
lpStartupInfo.wShowWindow:=SW_HIDE;
CreateProcess(....


diMAN   (2003-11-04 10:01:00) [10]

> FireHack

При вызове функции AllocConsole создаётся ВИДИМОЕ консольное окно. Конечно я его могу после этого найти и спрятать, но мне нужно именно создавать уже НЕВИДИМОЕ, что бы оно не мелькало по экрану. В XP для получения хендла консольного окна есть более простой способ - функция GetConsoleWindow, поэтому можно не заморачиваться с enumwindows.

> Proton
Я пробовал поставить брекпоинт на вызов CreateWindow, CreateWindowEx, ShowWindow, SetWindowLong, но не один из этик "бряков" не сработал в момент вызова AllocConsole, к тому же AllocConsole экспортируется из kernel32.dll, а вот kernel32 в свою очередь не импортирует ни одной функции из user32.dll, во всяком случае в явном виде. Какие будут идеи?


FireHack   (2003-11-04 09:26:00) [11]

уж сколько раз твердили миру....

enumwindows
GetWindowThreadProcessId
GetCurrentProcessId


Proton   (2003-11-04 09:11:00) [12]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо