Форум: "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