Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: CL | DM;

Вниз

Как послать WM_SYSCOMMAND,SC_RESTORE окну, которое   Найти похожие ветки 

 
Long   (2004-06-01 17:15) [0]

сидит в панели задач?
Ну, например, ловя его за Caption?
За примерчик буду очень признателен.


 
Игорь Шевченко ©   (2004-06-01 17:23) [1]

FindWindow + SendMessageTimeout


 
Long   (2004-06-01 17:30) [2]

Спасибо, Игорь.
Теория мне известна. А вот практика - увы.
Если не трудно, хотя бы маленький пример.
Не подумайте, что я халявщик и сам думать не хочу.
Сегодня целый день бился с этими HWND.
И ничего не получается :-(


 
Long   (2004-06-01 17:41) [3]

Если подробнее, то это проблеиа свернуть все окна,
а потом открыть конкретное.
Свернуть легко.
А вот, развернуть нужное?
В faq я искал и не нашел.


 
Игорь Шевченко ©   (2004-06-01 17:44) [4]


function RestoreWindow (const ACaption: string);
var
 Wnd: HWND;
 Dummy: DWORD;
begin
 Wnd := FindWindow(nil, PChar(ACaption));
 if IsWindow(Wnd) then
   SendMessageTimeout(Wnd, WM_SYSCOMMAND, SC_RESTORE, 0,
     SMTO_ABORTIFHUNG, 2000, Dummy);
end;


 
WebErr ©   (2004-06-01 17:52) [5]

Пусть окно имеет класс const MyClassName = "TMyClassName";
Далее:

procedure SetNormalMyWnd;
var
 MyWnd: HWND;
 S: PChar;
begin
 try
   GetMem(S, 256);
 except
   ShowMessage("Sorry!");
   Exit;
 end;
 MyWnd := FindWindow(0, 0);
 while MyWnd <> 0 do
 begin
   MyWnd := GetNextWindow(MyWnd, GW_HWNDNEXT);
   GetClassName(S, 255);
   if StrComp(S, MyClassName) = 0 then
   begin
     SendMessage(MyWnd, WM_SYSCOMMAND, SC_RESTORE, 0);
     Break;
   end;
 end;
 FreeMem(S);
end;

В коде могут быть ошибки - писал на ходу. :)


 
WebErr ©   (2004-06-01 17:55) [6]


> Long   (01.06.04 17:41) [3]

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


 
Long   (2004-06-01 19:16) [7]

Не выходит, все равно.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 h,k,b:Hwnd;
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var h,b:Hwnd;
begin

h:=handle;
while h > 0 do begin
if isWindowVisible(h) then
postmessage(h,WM_SYSCOMMAND,SC_MINIMIZE,0);
h:=getnextwindow(h,GW_HWNDNEXT);
              end;

b := FindWindow(nil, "Конкретный Caption");
if IsWindow(b) then
postmessage(b,WM_SYSCOMMAND, SC_RESTORE,0);
end;
end.

Простите меня друзья, спасибо за вашу помощь, но я так и не врубился.
Делаю вот то, что выше. Окна благополучно закрываются, а "Конкретный Caption"
не открывается. Прмо хоть стреляйся :-(


 
Игорь Шевченко ©   (2004-06-02 00:43) [8]

Long   (01.06.04 19:16)

EnumWindows почитай



Страницы: 1 вся ветка

Текущий архив: 2004.07.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.042 c
1-1088445066
XeLax
2004-06-28 21:51
2004.07.11
Как узнать все параметры ключа реестра?


1-1088294261
Yegorchic
2004-06-27 03:57
2004.07.11
Поиск текста в окне IE


14-1087727495
Nic
2004-06-20 14:31
2004.07.11
Я обновил его


14-1087800202
Романов Р.В.
2004-06-21 10:43
2004.07.11
:))))))))))))


1-1088372750
P@vel
2004-06-28 01:45
2004.07.11
Threads