Работа с рабочим столом в Delphi.
Добрый день!
1.Меняем фоновую картинку Desktop-а.
Поменять картинку рабочего стола очень легко, сейчас вы
сами убедитесь. Создайте новый проект, просьте на форму
компонент TButton, далее обрабатывайте событие OnClick (2
раза на конпку можно нажаьб), и пишите туда вот этот код:
SystemParametersInfo(SPI_SETDESKWALLPAPER,
0,
PChar('C:\test.bmp'), SPIF_SENDWININICHANGE);
Там где 'C:\test.bmp' введите путь к рисунку, на который
вы хотите поменять фон рабочего стола. Как видите ничего
сложного.
2.Делаем неактивным рабочий стол.
Выносите на форму компонент TImage, далее нужно растянуть
его во весь экран, для этого свойство align в Image установите
alClient, а у форму свойтсво BorderStyle установите bsNone,
далее нужно сфотографировать экран и вывести на форму, но
это мы сделаем по событию OnCreate (Form1), нажимаем на
форму 2 раза, и пишем:
var
ScreenDC:hdc;
canvas :Tcanvas;
begin
ScreenDC:=GetDC(0);
Canvas:=TCanvas.Create();
canvas.Handle:=ScreenDC;
Width:=Screen.Width;
Height:=Screen.Height;
Image1.Canvas.CopyRect(Rect(0,0,Image1.Width,Image1.Height),
canvas,Rect(0,0,Screen.Width,Screen.Height));
Releasedc(0,ScreenDC);
Canvas.Free;
end;
Теперь как всё сделали можно запускать ваш проект, как
запустите создасться впечатление, что комп завис, на самомо
это просто фотография экрана, её можно закрыть с помощью
Alt+F4. Но чтобы нельзя было закрыть :), пишем в событии
формы - OnCloseQuery, вот это:
CanClose:=false;
Теперь ваше приложение нельзя будет никак закрыть. Но наше
приложение всё ещё видно на панеле задач, для этого в в
событии формы - OnActivate, пишите такой код:
ShowWindow(Application.Handle,sw_Hide);
Теперь всё! Программу нельзя будет закрыть через Alt+F4,
Ctrl+Alt+Del, и нигде не видно, конечно программу можно
модернизировать, например под прогу-заподлянку, но этого
я описывать не буду, я основное написал, а если я начну
писать как программу прописать в автозапуск это уже будет
другая тема!
Функции завершения работ и перезагрузки системы.
Сейчас я опишу несколько знакомых мне функций выключения
и перезагрузки компьютера. Итак, вот они:
1.Код который я приведу ниже, завершает работу всех запущенных
процессов в системе, но сохраняет данные приложения, с которого
пошёл данный код (функция):
ExitWindowsEx(EWX_LOGOFF or ewx_force,0);
2.Останавливает работу системы в безопасный момент времени.
Все буферы очищаются, с сохранением данных на диске, также
останавливаются все процессы:
ExitWindowsEx(EWX_SHUTDOWN or ewx_force,0);
3.Простая перезагрузка системы:
ExitWindowsEx(EWX_REBOOT or ewx_force,0);
4.Завершает работу всех запущенных приложений в системе,
не посылая сообщений - WM_QUERYENDSESSION и WM_ENDSESSIO.
Это может привести к потере не сохранённых данных:
ExitWindowsEx(EWX_FORCE or ewx_force,0);
5.Завершает работу компьютера с выключением питания, если
система поддерживает автоуправление питанием:
ExitWindowsEx(EWX_POWEROFF or ewx_force,0);
6.Завершает работу всех запущенных в системе приложений,
если система зависла:
ExitWindowsEx(EWX_FORCEIFHUNG or
ewx_force,0);
Вот и все функции которые я знаю, конечно есть ещё, но
я помню только эти, так как они самые распространённые.
Эта статья посвящается тем Дельфирам, которые хотят написать
ShareWare продукт. К примеру написали вы чудесную программу,
и хотите чтобы вам за неё платили, а защитить не знаете
как. Вот эта статейка поможет вам найти несколько выходов
из этой ситуации.
1.Сделать так, чтобы программа запускалась один раз.
Многие делают, чтобы программа записывалась в реестр, создают
INI файлы. Но например записи в реестре можно стереть программой
- TrashKeysFinder, которая ищёт триальные ключи и удаляет
их, а с INI файлами итак понятно, найдёшь ini файл стерёшь
строку и пользуйся. Сейчас я расскажу о более умном решении,
а именно алгоритм такой, когда пользователь будет запускать
программу, сделать так чтобы создавался файл (например:
kernel.fhd), и когда пользователь второй раз запустит программу,
то она будет проверять если файл kernel.fhd есть, то программа
аварийно закрывается, а если нет, то продолжает работу,
для осуществления этой цели надо в OnCreate прописать этот
код:
if FileExists('c:\Windows\kernel.fhd')=true
then Halt
else FileCreate('c:\Windows\kernel.fhd');
Всё теперь вашу программу нельзя будет запустить 2 раза,
как вы поняли где "kernel.fhd" вы можете написать
любое имя файла. И врядли пользователь начнёт искать этот
файл дабы удалить его, особенно в системной папке, да и
откуда он вообще узнает, что вы используете именно этот
способ, так что по моему мнению, способ достаточно надёжный.
И даже если программу удалят и распакуют, он уже будет действовать.
2.Сделать так, чтобы программа запускалась один раз за
сессию windows.
Сейчас я покажу как сделать, чтобы программа запускалась
один раз за сессию windows, т.е., после включения (или перезагрузки)
компьютера программу можно будет запустить снова один раз.
Для этого в OnCreate вставляем такой код:
var CRLF : string;
begin
if GlobalFindAtom('THIS_IS_SOME_OBSCUREE_TEXT') = 0 then
GlobalAddAtom('THIS_IS_SOME_OBSCUREE_TEXT')
else begin
CRLF := #10 + #13;
ShowMessage('Это приложение может запускаться только один
раз за сессию windows');
Halt;
Вот и всё, что я хотел сказать. Надеюсь эти способы покажутся
вам хорошими, и вы будете их использовать!
Удачи!!!