Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

как спрятать приложение(не смешно) [D7, Win95/98]


Страницы:   1 2

Prov ©   (2004-01-19 00:42:00) 

Доброе время суток, господа программисты...
Не писал каких-то 4 месяца, а забыл всё ! :((
Я что-то делаю неправильно.
Вообщем, проблема такова:

Ловлю хэндл окна, пытаюсь его спрятать вот так:
ShowWindow(Wnd, SW_HIDE);
Всё бы хорошо но, когда нажимаю комбинацию клавиш Alt+Tab, видно иконку приложения. Как её спрятать ? Приложение прячется, но и иконки по Alt+Tab не должно быть. Подскажите, пожалуйста, как быть ?

И вот ещё. Вроде бы прятал приложения ещё и так:
SendMessage(Wnd, SW_HIDE, 0, 0) - окно не прячет... Подскажите, пожалуйста, и по сему вопросу...
Заранее благодарен всем, кто оказал какую-либо помощь в решении вопроса.


YuRock   (2004-01-26 13:41:00) [1]

Я бы сделал так:

var Wnd: hWnd;
begin
Wnd := FindWindow(nil, 'Gen');
if Wnd <> 0 tnen ShowWindow(Wnd, SW_HIDE)
else raise Exception.Create ('Окно не найдено!');
end;


Игорь Шевченко   (2004-01-25 19:58:00) [2]

Перед фразой

ShowWindow(Wnd, SW_HIDE);

Я бы поставил проверку:

 if IsWindow(Wnd) then
   ShowWindow(Wnd, SW_HIDE)
 else
   raise Exception.Create ('Не получилось');


Prov   (2004-01-24 22:38:00) [3]

var Wnd: hWnd;
begin
 if FindWindow(nil, 'Gen')<> 0 tnen
 Wnd:= FindWindow(nil, 'Gen');
 ShowWindow(Wnd, SW_HIDE);
end;

Окно не прячется :((


Игорь Шевченко   (2004-01-24 20:01:00) [4]

Prov ©   (24.01.04 13:06)

А мне без кода трудно будет подсказывать...Код бы надо привести в форуме, хотя бы краткий :)


Prov   (2004-01-24 13:06:00) [5]


> Раз ты такой умный, что можешь спрятаться от Task Manager
> в NT, то наверное и эту проблему тебе решить - пара пустяков,
> достаточно запустить WinSight.

Прошу Вас, не надо ехидничать.. Я прекрастно знаю, что Ваши знания в сфере программирования огромны. Если что не так ляпнул, прошу прощения, но не могли бы Вы мне всё-таки подсказать решение этой задачи... Я довольно долго не писал ничего, многое забылось...
Но приложение всё равно не уходит с панели задач.


Игорь Шевченко   (2004-01-22 11:04:00) [6]


> SetWindowLong(Wnd, GWL_EXSTYLE, GetWindowLong(Wnd, GWL_EXSTYLE)
> or WS_EX_TOOLWINDOW);
> Окно всё равно видно на панели задач. Причём, тоже самое
> пишу для окна своего приложения, и оно тоже не прячется.
> Ничего не могу понять, всё делаю в точности с помощью и
> хелпами.


Раз ты такой умный, что можешь спрятаться от Task Manager в NT, то наверное и эту проблему тебе решить - пара пустяков, достаточно запустить WinSight.

---
LMD


YuRock   (2004-01-22 10:30:00) [7]

Извините за дублирование - я не специально


YuRock   (2004-01-22 10:23:00) [8]

SW_HIDE - это не сообщение, а один из флагов функции ShowWindow;

Использовать надо так: ShowWindow(Wnd, SW_HIDE);


YuRock   (2004-01-22 10:23:00) [9]

SW_HIDE - это не сообщение, а один из флагов функции ShowWindow;

Использовать надо так: ShowWindow(Wnd, SW_HIDE);


Prov   (2004-01-22 08:07:00) [10]

Всем большое спасибо.
Для общего развития скажу, что пишу программу я на 98 винде, но будет использоваться для ХР. Для некоторых людей скажу, что я знаю, что такое RegisterServiceProcess, и если понадобится, то даже умею спрятать от таскМенеджера в НТ. :))
делаю так:
SetWindowLong(Wnd, GWL_EXSTYLE, GetWindowLong(Wnd, GWL_EXSTYLE) or WS_EX_TOOLWINDOW);
Окно всё равно видно на панели задач. Причём, тоже самое пишу для окна своего приложения, и оно тоже не прячется. Ничего не могу понять, всё делаю в точности с помощью и хелпами.
И вот ещё, пожалуйста, скажите мне вот что: я раньше прятал приложения так: SendMessage(Wnd, SW_HIDE, ..., ...); Но не помню, какие нужны параметры для сообщения SW_HIDE. ПОдскажите, плиз.


VMcL   (2004-01-22 07:46:00) [11]

Я даже догадываюсь, когда она может fail: GWL_WNDPROC или DWL_DLGPROC :))


BiN   (2004-01-20 23:20:00) [12]

YuRock ©   (20.01.04 19:19) [22]

Если бы я не проверял этот пример, то и не стал бы выкладывать здесь [9].

И вместо того, чтобы злиться лучше бы ты посерьезней исследовал этот пример.
win32.hlp в поставке дельфи, к сожалению, является устаревшей версией справки MSDN. В справке же от майкрософта на сайте есть следующее замечание по поводу SetWindowLong:

Windows 95/98/Me: The SetWindowLong function mayfail if the window specified by the hWnd parameter does not belong to the same process as the calling thread.

Думаю, видна разница.


YuRock   (2004-01-20 19:19:00) [13]

> DeadMeat ©   (20.01.04 18:46) [21]

The SetWindowLong function fails if the window specified by the hWnd parameter does not belong to the same process as the calling thread.

Цитата из хелпа. Я проверял- возвращается 0 (если процесс чужой).


DeadMeat   (2004-01-20 18:46:00) [14]

> YuRock ©   (20.01.04 13:57) [20]
Не знаю что у вас не выходит, но окно калькулятора, после установки ему WS_EX_TOOLWINDOW из ALT+TAB у меня ушло...
Может мы друг-друга не поняли...??


YuRock   (2004-01-20 13:57:00) [15]

> BiN ©   (20.01.04 11:35) [19]

Что, в Рихтере "на картинках" нарисовано, что [9] будет работать для окон других процессов??? (см. DeadMeat [16]).

А, извините, Вы же пробовали. Можно Ваш код попробовать у себя?


BiN   (2004-01-20 11:35:00) [16]

YuRock ©   (20.01.04 11:12) [18]
Конечно пробовали. (а что плохого в Рихтере - картинок мало?)


YuRock   (2004-01-20 11:12:00) [17]

> DeadMeat ©   (19.01.04 22:26) [16]
>>  Но как выставить этот стиль "чужому" окну (другого процесса)?..

> см. BiN ©   (19.01.04 17:24) [9]

А интересно, Вы (и/или BiN) этот пример пробовали или в Рихтере прочитали?


Игорь Шевченко   (2004-01-20 10:23:00) [18]

YuRock ©   (19.01.04 19:06)


> Но как выставить этот стиль "чужому" окну (другого процесса)?..


ЗАЧЕМ ?????? Вопль души уже, к тебе, разумеется, не относится, а относится ко всем желающим странного с чужими окнами и процессами.

Способ выставить стили окна чужого приложения, разумеется есть, но не следует забывать, что при смене стилей оконной процедуре посылается пара сообщений WM_STYLECHANGING и WM_STYLECHANGED, обработав которые можно запретить любые изменения стиля окна, как со стороны, так и самому :)

С уважением,


DeadMeat   (2004-01-19 22:26:00) [19]

> YuRock ©   (19.01.04 19:06)
> Но как выставить этот стиль "чужому" окну (другого процесса)?..
см. BiN ©   (19.01.04 17:24) [9]


YuRock   (2004-01-19 19:06:00) [20]

> Игорь Шевченко ©   (19.01.04 18:52) [14]

Я с этим и не спорил. Возможно, это еще один способ. Но как выставить этот стиль "чужому" окну (другого процесса)?..


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо