Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: WinAPI и системное программирование > Свернулось, но не разворачивается!!!???


Автор: Nicholas 26.10.2004, 10:32
Моя прога находит список всех видимых окон в системе и сворачивает их ( CloseWindow(Wnd); ), а некоторые окна не могу развернуться почемуто, например если у меня «Подключение к удаленному рабочему столу» после сворачивания уже не разворачивается????????????

:stena

Автор: Nicholas 28.10.2004, 09:19
:offtopic Че все тупые или вопрос тупой????

Автор: Medved 28.10.2004, 12:11
Цитата(Nicholas @ 28.10.2004, 12:19)

Че все тупые или вопрос тупой????

Модератор: Вам никто не обязан отвечать. Здесь занятые люди у которых полно своих проблем. А такие высказывания являются оскорбительными в отношении других участников форума, и нарушают его правила. Это не первое мое Вам замечание. Если будете продолжать в том же духе. придется выносить Вам предупреждения. 10 предупреждений - бан на 1 месяц.

Автор: Guest 28.10.2004, 12:27
Цитата(Pegas @ 28.10.2004, 12:11)

Модератор: Вам никто не обязан отвечать. Здесь занятые люди у которых полно своих проблем. А такие высказывания являются оскорбительными в отношении других участников форума, и нарушают его правила. Это не первое мое Вам замечание. Если будете продолжать в том же духе. придется выносить Вам предупреждения. 10 предупреждений - бан на 1 месяц.


М'даааааааааа
Интересно и когоже я обидел!!!!? :angry:

Автор: Medved 28.10.2004, 13:15
А вы почитайте правила! Потом еще раз перечитайте, и это все еще в цикле....

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

Автор: Pathfider 28.10.2004, 16:15
Цитата
Моя прога находит список всех видимых окон в системе и сворачивает их ( CloseWindow(Wnd); ), а некоторые окна не могу развернуться почемуто, например если у меня «Подключение к удаленному рабочему столу» после сворачивания уже не разворачивается????????????

По известному хендлу процесса попробуй через WinAPI раскрыть окно.
Добавлено @ 16:19
Nicholas А еще лучше приведи код!

Автор: Nicholas 30.10.2004, 07:48
Цитата(Pathfider @ 28.10.2004, 16:15)

Nicholas А еще лучше приведи код!



Код

Procedure GetAndMinVisibleWindows;
Var
 Wnd : hWnd;
 buff,buff1: Array [0..127] Of Char;
begin
Wnd := GetWindow(Form1.Handle, gw_HWndFirst);
While Wnd <> 0 Do
 Begin {Hе показываем:}
 If (Wnd <> Application.Handle) and {-Собственное окно}
 IsWindowVisible(Wnd) and {-Hевидимые окна}
 (GetWindow(Wnd, gw_Owner) = 0) and {-Дочернии окна}
 (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) then
   Begin
   GetWindowText(Wnd, buff, sizeof(buff));
   GetClassName(Wnd,buff1,sizeof(buff1));
     If buff <> 'Program Manager' then
   CloseWindow(Wnd);
   end;
 Wnd := GetWindow(Wnd, gw_hWndNext);
 end;  {Не показываем}
end;


:stena

Автор: Pathfider 30.10.2004, 19:19
Nicholas Как я понял, ты пытаешься свернуть прогу Program manager. Попробуй использовать ShowWindow(Wnd, SW_HIDE) для скрытия окна и ShowWindow(Wnd, SW_RESTORE) для возврата окна в предидущее положение.

Автор: Nicholas 1.11.2004, 06:41
Цитата(Pathfider @ 30.10.2004, 19:19)

Nicholas Как я понял, ты пытаешься свернуть прогу Program manager. Попробуй использовать ShowWindow(Wnd, SW_HIDE) для скрытия окна и ShowWindow(Wnd, SW_RESTORE) для возврата окна в предидущее положение.


Нет, ты не понял! У меня все сворачивается, но не разварачивается!!!!

:qstn

Автор: _hunter 3.11.2004, 12:05
вот этот кусок кода и покажи. обычно имеет смысл показывать неработающее ;)

Автор: Nicholas 13.11.2004, 05:43
Цитата(_hunter @ 3.11.2004, 12:05)
вот этот кусок кода и покажи. обычно имеет смысл показывать неработающее ;)


Специально для Охотника объясняю: Я показал код который сварачиват программы на панель задач, после чего я мышкой кликаю на панель задач и развернуть ничего не могу (ну только некоторые приложения)!

smile smile

Автор: Alex 13.11.2004, 11:32
Попробуй так:

Код

Procedure GetAndMinVisibleWindows;
Var
 Wnd : hWnd;
 buff,buff1: Array [0..127] Of Char;
begin
Wnd := GetWindow(Form1.Handle, gw_HWndFirst);
While Wnd <> 0 Do
 Begin {Hе показываем:}
 If (Wnd <> Application.Handle) and {-Собственное окно}
 IsWindowVisible(Wnd) and {-Hевидимые окна}
 (GetWindow(Wnd, gw_Owner) = 0) and {-Дочернии окна}
 (GetWindowText(Wnd, buff, sizeof(buff)) <> 0) then
   Begin
   GetWindowText(Wnd, buff, sizeof(buff));
   GetClassName(Wnd,buff1,sizeof(buff1));
     If buff <> 'Program Manager' then
   ShowWindow(Wnd, SW_MINIMIZE);
   end;
 Wnd := GetWindow(Wnd, gw_hWndNext);
 end;  {Не показываем}
end;

Автор: Girder 13.11.2004, 14:59
Nicholas без обид... в будушем твои топики с грубостью к остальным участникам... будут удаляться на корню! smile

PS: Проблема в твоем коде... это неправильный выбор окна приложения для закрытия... smile и при этом недостаточно чтоб окно было на верхнем уровне!

Лови код(В строчке for i:=(Length(lh)-2) downto 0 do ошибок нет smile ! Написанно так как и должно быть smile !):
Код
procedure TForm1.Button1Click(Sender: TObject);
var h,h1:THandle;
   lh:array of THandle;
   i:integer;
   pID,Win_pID:Cardinal;
begin
pID:=0;
GetWindowThreadProcessId(Handle,@pID);
h1:=Handle;
repeat
 h:=GetWindow(h1,GW_OWNER);
 if h<>0 then h1:=h;
until h=0;
h:=GetWindow(h1,GW_HWNDFIRST);
h1:=findwindow('Shell_TrayWnd', nil);
while (h<>0) do
 begin
  if (IsWindowVisible(h)=true)and(IsIconic(h)=false)and(h<>h1) then
   begin
    i:=Length(lh);
    SetLength(lh,i+1);
    lh[i]:=h;
   end;
  h:=GetWindow(h,gw_hWndNext);
 end;
for i:=(Length(lh)-2) downto 0 do
 begin
  Win_pId:=0;
  GetWindowThreadProcessId(lh[i],@Win_pID);
  if (Win_pID<>0)and(Win_pID<>pID)and(IsWindowVisible(lh[i])=true) then
   ShowWindow(lh[i],SW_MINIMIZE);
 end;
SetLength(lh,0);
end;


Удачи.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)