Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.01.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.011 c
3-11835
SergP
2003-12-09 22:22
2004.01.05
Не работает like


3-11809
iWorm
2003-12-09 02:32
2004.01.05
Вставка новой записи


4-12206
Erik
2003-11-04 13:48
2004.01.05
Как прибить тред застравший в критической секции?


1-11850
jCode
2003-12-18 18:43
2004.01.05
Онклик к кнопке


4-12190
Davinchi
2003-11-05 14:22
2004.01.05
Как отследить что MdiChild собирается развернуться и свернуться





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский