Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.015 c
1-11974
qwerty2
2003-12-19 12:27
2004.01.05
Host процесс и DLL


1-11990
Stas
2003-12-19 09:13
2004.01.05
Сохранение параметров формы


4-12202
пачка
2003-11-04 21:18
2004.01.05
Как поймать клик мыши на конкретном окне программы? (Хуук)


3-11834
Марат
2003-12-08 07:24
2004.01.05
DBComboBox


3-11838
Tornado
2003-12-08 09:10
2004.01.05
Существует ли таблица?




   Наверх