SendMessage(handle,wm_close,0,0);
После такого окно которому мы это посылаем закроется, ежели конечно программа не имееет какой-то собственный обработчик этого сообщения. Но конечно возникает вопрос, а как нам узнать этот самый хэндл того окна над которым мы хотим жестоко надругаться? А для этого есть функции FindWindow и FindWindowEx. Описываются они так:
FindWindow(lpClassName:PAnsiChar,lpWindowName:PAnsiChar);
В этой функции - два параметра: первый - имя класса окна, второй - имя окна.
FindWindowEx(Parent:hwnd,child:hwnd,ClassName:PAnsiChar,WindowName:PAnsiChar);
Здесь четыре параметра - родительское окно на котором мы ищем элемент управления, с какого элемента начать поиск, класс элемента управления, имя. Если вместо имени указать nil, то будет идти поиск всех элементов подобного класса.
Примерчик:
var
Panel,Pusk:hwnd;
begin
Panel:=FindWindow('Shell_TrayWnd',nil);
Pusk:=FindWindowEx(Panel,0,'Button',nil);
end;
В этом примере мы сначала находим идентификатор панели задач, а затем находим на ней единственную кнопку - кнопку Пуск. А так как теперь есть их идентификаторы, то мы можем сделать некоторые интерестные вещи. К примеру ShowWindow (скрыть/показать), EnableWindow(активировать/дизактивировать) , SetWindowText(сменить текст) ну и еще пожалуй смену картинки на пуске. В общем хватит теории - пишем прогу.
Практика началась...
Сначала кидай на прогу 6 баттонов.Еще я добавил панель и image для того чтоб туда помещать пикчуресу ( picture ) которую мы собираемся запихнуть на Пуск. Ну и еще надо кинуть один edit, куда будем вводить текст который появится на пуске.
Ну а теперь непосредственно к кодингу. В разделе объявления переменных public - пиши
public
{ Public declarations }
Panel,Pusk:hwnd;
end;
Этим мы обьявляем две переменные в которые путем помещать нужные нам хэндлы.
Дважды щелкни на форме - появится событие FormCreate - там пиши такой обработчик:
procedure TForm1.FormCreate(Sender: TObject);
begin
Panel:=FindWindow('Shell_TrayWnd',nil);
Pusk:=FindWindowEx(Panel,0,'Button',nil);
end;
Теперь при создании формы мы узнаем эти самые идентификаторы Панели задач и кнопки Пуск.
Прячем/показываем кнопку Пуск
В обработчике кнопки "Спрятать" пиши следующее:
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowWindow(pusk,sw_hide);
end;
А в обработчике батона "Показать" пиши тоже самое , только замени sw_hide на sw_show. Зачем наверное понятно :) Для панели - аналогично, только замени Pusk на Panel
Включаем/отключаем кнопку Пуск
Для этого надо использовать EnableWindow, где параметры - хэндл и булева переменная показывающая что надо сделать.
Procedure TForm1.DisablePuskClick(Sender: TObject);
begin
EnableWindow(Pusk,false);
end;
Чтоб включить - замени false на true. Для панели - аналогично, только замени Pusk на Panel.
Смена картинки на пуске (только для 9*/Me)
Вот такую функцию я накатал для замены картинки на Пуске:
function ChangePicture(SeenByUser:TImage; paramstrZ:string;):boolean;
// ^^^^^^^^^^^^^^^^^В этот image будет грузится картинка
begin
if fileexists(paramstrZ) then // файл-картинка существует?
begin
SeenByUser.Picture.LoadFromFile(paramstrZ); //Грузим картинку из файла
SendMessage(Pusk,BM_SetImage,0,SeenByUser.picture.bitmap.handle); //Ставим картинку
end
else messagebox(hndl,PChar('Файл - '+paramstrZ+' к твоему сведенью не существует!'),PChar('Pusk'),mb_iconstop);
end;
Смена надписи на Пуске
А вот это делается и того легче:
SetWindowText(StartBtnBmp,PChar(edit1.text)); //Меняем надпись
InvalidateRect(StartBtnBmp,nil,true); //Перерисовываем Пуск
Вот и все... На пока хватит. В одной из следующих статей расскажу как задавать окну произвольную форму.
Хиппи енд.
Перейти к рубрике --> Pascal & Delphi |