Представьте, что вам надо свернуть все окна на рабочем столе, или передать всем запущеным программам и открытым окнам несколько сообщений... Или просто получить список всех запущеных программ и открытых окон. Как это сделать? Самый простой способ - использовать API Enumwindows, синтаксис которой представлен ниже.
function EnumWindows(EnumFunc: TFarProc, lParam: Longint): Bool;
Значит тепеть о том, чем собственно эта функция заниматся... Она перечисляет все окна на рабочем столе(видимые и невидимые, включая системный трэй), к каждому из которых применяется функция, имя которой указывается в первом параметре. Теперь давайте рассмотрим функцию, которая будет выполнять необходимые нам операции над перечисляемыми программами и окнами. Синтаксис таков:
function EnumWindowsProc(h:hwnd): Bool; stdcall;
Вот это минимальная необходимая фунция для работы с перечисляемыми окнами. Так как функция Enumwindows перечисляет handle всех окон и приложений, то главным и необходимым входящим параметром Enumwindowsproc будет handle получаемого объекта. (Хрень какую то пишу...). Ниже приведен кусок программы, которая сворачивает все возможные (видимые и невидимые, включая системный трэй) окна и программы в пуск. Не рекомендую так делать.
function enumwindowsproc(h:hwnd):bool; stdcall;
begin
closewindow(h);
enumwindowsproc:=true
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
enumwindows(@enumwindowsproc,0);
end;
Теперь посмотрим на главные особенности использования данной функции... Первое, не забудте, что в Enumwindows, на месте первого параметра вы указываете не описанную функцию, а адрес на нее (@). Второе, чтоб enumwindowsproc выполнялась ко всем окнам, необходимо в конце её тела сделать Callback, тоесть написать enumwindowsproc:=true. И третье, enumwindowsproc - просто стандартное название, изменить его можно на любое другое.:)
вторник, 23 сентября 2008 г.
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий