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


Автор: ProgrammistDelphi 25.5.2005, 10:14
Если кто работал с функцией EnumWindows подскажите

Код


type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Timer1: TTimer;
  private
    {Private declarations}
  public
    Procedure Activ();
    Function ObrabotkaOkna(Des:hwnd; Lp: LParam): Boolean;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation



//пишу функцию косвенного вызова 
Function TForm1.ObrabotkaOkna(Des:hwnd; LP: LParam): Boolean;
Begin
if  (form1.Handle<>des) then //если дескриптор не равен идентификатору окна моего приложения, я сворачиваю все окно
  Begin
    ShowWindow(des,SW_MINIMIZE); 
    result:=true;
  End;
end;


Procedure TForm1.Activ();
Begin
  EnumWindows(@TForm1.ObrabotkaOkna,LongInt(Self));
end;



Функция EnumWindows передает дискриптор окна, но почему то ничего не сворачивается

И есче Какие параметры нужно указать для функции SendMessage() чтобы свернуть нужное окно

SendMessage(Дескриптор,Сообщение,0,0) или

SendMessage(Дескриптор,SW_MINIMIZE,1,0)

так пробывал не работает.


Автор: dvamaster 29.5.2005, 14:48
Вся проблема в том, что винда воспринимает C++'ный порядок передачи параметров!

Посему выглядеть функция ObrabotkaOkna должна так:

Код

//пишу функцию косвенного вызова 
Function TForm1.ObrabotkaOkna(Des:hwnd; LP: LParam): Boolean; stdcall;
Begin
if  (form1.Handle<>des) then //если дескриптор не равен идентификатору окна моего приложения, я сворачиваю все окно
  Begin
    ShowWindow(des,SW_MINIMIZE); 
    result:=true;
  End;
end;


то есть stdcall надо было добавить!

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