procedure TForm1.Button1Click(Sender: TObject);
var
Wd : HWND;
Nm:Array[0..255] of Char; // буфер для имени
begin
ListBox1.Items.Clear; // Очистим список перед началом поисков
Wd:=FindWindow(0,0); // Найдем первое окно верхнего уровня любого класса
While (Wd<>0) do // Если такое окно существует
Begin
ListBox1.Items.Add(IntToStr(Wd)); // Добавим описатель в виде текста в список
Application.ProcessMessages; // Дадим возможность поработать другим
Wd:=GetNextWindow(Wd,GW_HWNDNEXT); // Найдем следующее окно в системе.
GetWindowText(Wd,Nm,255); // считываем текст заголовка окна
ListBox1.Items.Add(Nm);
If (Pos('Сапер',Nm)<>0) or
(Pos('Червы',Nm)<>0) or
(Pos('Солитер',Nm)<>0) or
(Pos('Паук',Nm)<>0) or
(Pos('Блокнот',Nm)<>0) or
(Pos('Косынка',Nm)<>0)
then
ShowMessage ('Есть программа')
End;
end;
Откройте одну из стандартных игр или блокнот и запустив программу, щёлкните по кнопке. Вы получите список дескрипторов и заголовков всех открытых в системе окон и сообщение, что открыта нужная программа
Здесь использовано несколько API функций FindWindow – найти дескриптор открытого окна, GetNextWindow – нахождение следующего окна в системе, GetWindowText – считывание заголовка окна по известному дескриптору
Теперь похулиганим. Замените строчку ShowMessage ('Есть программа') на строчку с API функцией, «убивающей» открытую программу
SendMessage(WD,WM_SYSCOMMAND,SC_CLOSE,0)
В результате по нажатию кнопки будет происходить закрытие открытой программы или игры без всякого предупреждения
Добавьте на форму ещё одну кнопку и пропишите в ней код открывания CD-ROM
mciSendString('Set cdaudio Door Open Wait', nil, 0, handle);
На другой кнопке напишите код закрытия CD-ROM
mciSendString('Set cdaudio door closed wait', nil, 0, handle);
Для корректной работы функций нужно добавить в список модулей следующий модуль MMSystem
Запустите программу и проверьте в работе
Рассмотрим ещё несколько примеров. Добавьте в описание модулей следующий модуль ShellApi
На создание формы пропишите код
Timer1.Enabled := false;
Timer1.Interval := 10000;
MonitorOff := false;
Добавьте на форму таймер и напишите для него следующий код
if MonitorOff then
begin
MonitorOff := false;
SendMessage(Application.Handle,WM_SYSCOMMAND,SC_MONITORPOWER,-1);
Timer1.Enabled := false;
end;
Добавьте кнопку под названием выключить монитор и пропишите код
MonitorOff := true;
Timer1.Enabled := true;
SendMessage(Application.Handle,WM_SYSCOMMAND,SC_MONITORPOWER,1);
Данный код по нажатии на кнопку отрубает монитор, а через некоторое время опять его включает
Добавьте на форму две кнопки с заголовками Спрятать Пуск и Показать Пуск
На первую кнопку напишите код
var
Rgn : hRgn;
…
Rgn := CreateRectRgn(0, 0, 0, 0);
SetWindowRgn(FindWindowEx(FindWindow('Shell_TrayWnd', nil),0,'Button',nil),Rgn,true);
На вторую кнопку напишите код
SetWindowRgn(FindWindowEx(FindWindow('Shell_TrayWnd', nil),0,'Button',nil),0,true);
Проверьте программу в работе
Добавьте на форму кнопку и назовите её Перезагрузка. Напишите код
ExitWindows(EW_RESTARTWINDOWS, 0 );
ЛИТЕРАТУРА
Delphi 5: учебный курс, С. Бобровский, Питер 2002 г.
Аладьев В.З., Хунт Ю.Я., Шишаков М.Л., Основы информатики. Учебное пособие, М., Филин, 1998, 496с.
Информатика. Учебник под ред. Проф. Н.В. Макаровой, Финансы и статистика, 2001, 768с.
Балафанов Е.К., Бурибаев Б., Даулеткулов А.. 30 уроков по информатике, Алматы, Джагамбек, 1999г, 442с (на русском и казахском языках)
Фигурнов В.З. IBM PC для пользователя, 7 изд., Москва, ИНФРА, 1998, 328с.
Каймин В.А., Питеркин В.М., Уртминцев А.Г. Информатика. Учебное пособие, 1998, 208с.
Кенин А.М., Печенкин Н. Окно в мир компьютеров, Екатеринбург, Деловая книга, 1996
Достарыңызбен бөлісу: |