Главная страница
    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.014 c
8-12003
Riko
2003-09-03 13:32
2004.01.05
DelphiX for Delphi7


14-12127
Думкин
2003-12-11 04:50
2004.01.05
MBo - с днем рождения!


4-12194
Kinder
2003-11-04 20:21
2004.01.05
Как управлять окнами таскбара?


1-11948
SergP
2003-12-19 21:08
2004.01.05
Есть ли готовая функция для преобразования строки к виду


1-11920
k_len
2003-12-22 09:31
2004.01.05
непечатные символы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский