![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем привет! Я новичок в Delphi) Прошу помощи экспертов. Мне нужно добавить процедуру чтобы свернулись/скрылись все окна раб. стола кроме своей формы.
Допустим играет Winamp или просматриваю картинки. Я запускаю project.exe и все активные окна сворачиваются кроме project2.exe Помогите сделать плиз) Нашел в Google такой код: Код:
var WH:HWnd; begin WH:=Handle; repeat WH:=GetNextWindow(WH,GW_HWNDNEXT); if (GetParent(WH)=0)and(not IsIconic(WH))and(IsWindowVisible(WH)) then PostMessage(WH,WM_SYSCOMMAND,SC_MINIMIZE,0); until WH=0; Но здесь сворачиваются все окна. |
|
#2
|
||||
|
||||
|
Сравнивай найденный хендл со своим и не трогай или после сворачивания всех своё разверни.
|
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Slackerok (31.01.2013)
| ||
|
#3
|
|||
|
|||
|
Спасибо за оперативный ответ! Я понял в теории как сделать, вот практика немного хромает(... Если можете объясните пожалуйста поподробнее с примерами кода.
|
|
#4
|
||||
|
||||
|
Проверил, с этим кодом сворачиваются все окна, кроме запущенного приложения.
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
Wnd : HWND;
begin
Wnd := Handle;
repeat
Wnd := GetNextWindow(Wnd, GW_HWNDNEXT);
if (GetParent(Wnd) = 0) and (not IsIconic(Wnd)) and (IsWindowVisible(Wnd)) then
PostMessage(Wnd, WM_SYSCOMMAND, SC_MINIMIZE, 0);
until Wnd = 0;
end; |
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Slackerok (31.01.2013)
| ||
|
#5
|
|||
|
|||
|
Да, но если допустим использовать процедуру с таймером вместе, тогда сворачивается и основная форма... А мне нужно чтобы форма так сказать стояла на месте при любых случаях...
|
|
#6
|
||||
|
||||
|
Причём тут таймер? Код выполняется ДО всего остального.
|
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Slackerok (31.01.2013)
| ||
|
#7
|
|||
|
|||
|
ну да вы правы, но допустим мне нужно чтобы сворачивалось всегда Winamp, или вообще все окна всегда сворачиваются кроме моей формы. Как это сделать? Конечно же легче таймером создать цикл? Нет? Вот в этом цикле при тестах данный код сворачивает все окна, в том числе и нашу форму за них...
|
|
#8
|
||||
|
||||
|
Все сворачиваются кроме запущенного приложения.
|
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Slackerok (31.01.2013)
| ||
|
#9
|
|||
|
|||
|
Код работает, но попробуйте создать цикл с таймером чтобы сворачивание шло допустим каждые 1 секунд, увидите что сворачивается и наша форма. А нам ведь нужно чтобы она не сворачивалась) Вот пример:
|
|
#10
|
||||
|
||||
|
На кой спрашивается это нужно? Хочется извращений, пожалуйста, но такие вещи так не делаются.
|
| Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
Slackerok (31.01.2013)
| ||
|
#11
|
||||
|
||||
|
Не проще ли на отдельный десктоп перепрыгнуть, как это делает "cureit!"?
|
| Этот пользователь сказал Спасибо M.A.D.M.A.N. за это полезное сообщение: | ||
Slackerok (31.01.2013)
| ||
|
#12
|
||||
|
||||
|
Код:
if (GetParent(Wnd) = 0) and (not IsIconic(Wnd)) and (IsWindowVisible(Wnd)) and (Application.Handle<>Wnd) then Цитата:
Последний раз редактировалось NumLock, 31.01.2013 в 09:31. |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Slackerok (31.01.2013)
| ||
|
#13
|
|||
|
|||
|
Цитата:
Интересно) Можно поподробнее об этом? |
|
#14
|
||||
|
||||
|
CreateDesktop function (Windows)
CreateProcess function (Windows) Цитата:
|
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Slackerok (31.01.2013)
| ||