· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Скрыть текущее окно.

Посл.отвђт Сообщенiе


Дата: Авг 15, 2003 16:10:51

ShowWindow (HWND hWnd, int nCmdShow)
Можно с помощью этой функции скрыть текущее окно, и как тогда полуить хэндл этого окна? Она скрывает только виндовские окна или и консольные?


Дата: Авг 15, 2003 16:28:56

Да.
invoke ShowWindow, hWnd, SW_HIDE

Невидимость окна никак не влияет на получение его хендла.
У консольных приложений нет окон ;-)


Дата: Авг 15, 2003 16:35:27 · Поправил: Edmond

Four-F
У консольных приложений нет окон ;-)
^) Ну это как посмотреть :)

Само консольное окно есть конечно, только не у приложения.

P.S
Misty
Вы не против, если я поменяю Вам Воин дзена на Воительницу Дзена..
Так красивее.. :)


Дата: Авг 15, 2003 16:43:11

Four-F
Мне как раз и нужно скрыть (вернее не показывать) консольное окно (если позволите его так назвать).

Edmond
Это было бы здорово :)


Дата: Авг 15, 2003 16:54:04

Misty
Да будет так!!! :)


Дата: Авг 15, 2003 17:12:06 · Поправил: Misty

Edmond
Кул :) Спасиба ;)

[Four-F Невидимость окна никак не влияет на получение его хендла.]
Да это-то я прекрасно понимаю :) Я имела в виду как получить хэндл, что бы скрыть консоль.


Дата: Авг 15, 2003 19:11:27 · Поправил: Four-F

Под NT GetConsoleWindow. Под масдаем можно найти свою консоль по заголовку. Примерно так:
.const
szLib db "kernel32", 0
szFun db "GetConsoleWindow", 0

.data?
acTitle	CHAR 128 dup(?)

.code
	invoke GetModuleHandle, addr szLib
	mov ecx, eax
	invoke GetProcAddress, ecx, addr szFun
	.if eax != NULL
		call eax
	.else
		invoke GetConsoleTitle, addr acTitle, sizeof acTitle
		invoke FindWindow, NULL, addr acTitle
	.endif
	invoke ShowWindow, eax, SW_HIDE

Если две консоли будут с оюинаковыми заголовками, то это разумеется ненадежно. Тогда можно сначала поменять себе заголовок SetConsoleTitle, а потом искать такое окно. После заголовок восстановить.


Дата: Авг 15, 2003 22:19:46

Misty
Если вы запускаете консольное приложение (к BAT-файлам тоже относится) через CreateProcess, можно сделать так:
.DATA
 pInfo  PROCESS_INFORMATION <0,0,0,0>
 sPath  db "C:\path\myprog",0
 sDir   db "C:\path",0
 sis    db 68 dup (0)

.CODE
 ; . . .
 xor eax,eax
 mov DWORD PTR [sis],SIZEOF STARTUPINFO
 mov DWORD PTR [sis + 4],eax     ; lpReserved = NULL
 mov DWORD PTR [sis + 8],eax     ; lpDesktop = NULL
 mov DWORD PTR [sis + 12],eax    ; lpTitle = NULL
 mov DWORD PTR [sis + 44],STARTF_USESHOWWINDOW
 mov DWORD PTR [sis + 48],eax    ; wShowWindow = SW_HIDE
 mov DWORD PTR [sis + 52],eax    ; lpReserved2 = NULL
 invoke CreateProcess,eax,OFFSET sPath,eax,eax,eax,\
   NORMAL_PRIORITY_CLASS or CREATE_NEW_CONSOLE,eax,\
   OFFSET sDir,OFFSET sis,OFFSET pInfo

Консольное окно не будет показано.


Дата: Авг 16, 2003 09:48:07

Как сделать чтобы консоль вообще не прорисовывалась?


Дата: Авг 17, 2003 02:42:25

Misty
Как сделать чтобы консоль вообще не прорисовывалась?
В моём примере ничего не прорисовывается.


Дата: Авг 17, 2003 03:46:17

Но нужен второй процесс.


Дата: Авг 17, 2003 06:26:47

Four-F
Но нужен второй процесс.
Так ведь консоль, котрую нужно скрыть, очевидно, и так принадлежит чужому приложению, т.е. кому может понадобиться скрыть свою собственную консоль и зачем?


Дата: Авг 17, 2003 10:49:01

Я тоже этого не понимаю, но вопрос, видимо, в том, как сама консоль может себя скрыть еще до появления.


Дата: Авг 17, 2003 11:13:23 · Поправил: Misty

Four-F
В самую точку. Этот вопрос (Как сделать чтобы консоль вообще не прорисовывалась?) я задаю дополнительно. Вы с Quantum безгранично помогли мне своими примерами.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.065