Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.05;
Скачать: CL | DM;

Вниз

Создать невидимую консоль   Найти похожие ветки 

 
diMAN ©   (2003-11-04 08:30) [0]

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


 
Proton ©   (2003-11-04 09:11) [1]

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


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

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

enumwindows
GetWindowThreadProcessId
GetCurrentProcessId


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

> FireHack

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

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


 
FireHack ©   (2003-11-04 10:51) [4]

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


 
diMAN ©   (2003-11-04 11:22) [5]

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


 
FireHack ©   (2003-11-04 11:28) [6]

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

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


 
diMAN ©   (2003-11-04 11:58) [7]

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


 
FireHack ©   (2003-11-04 13:07) [8]

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

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

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

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 13:33) [9]

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

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


 
FireHack ©   (2003-11-04 13:50) [10]

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


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

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


 
FireHack ©   (2003-11-04 14:03) [12]

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



Страницы: 1 вся ветка

Текущий архив: 2004.01.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.038 c
1-11995
SASH2
2003-12-17 14:33
2004.01.05
VCLZip!!!


9-11757
Yanis
2003-06-07 11:39
2004.01.05
Хочу спросить про рисование на экране.


1-11852
Maxim Vetera
2003-12-18 18:11
2004.01.05
Узкие места по времени (объему) вычисления.


1-11891
GH@ST
2003-12-18 13:38
2004.01.05
TreeView определение родителя


11-11843
SerB
2003-04-14 07:30
2004.01.05
SizeGrip???