VR
Virtual Reality On-line   Приколы
Новости   |     Журнал    |    Хаkер   |     Магазин   |   Проекты
[   Вход    ]
[Kарта сайтa]
[ Download  ]
[  Конкурс  ]
[  Анекдоты ]
[  Ссылки   ]
[  Реклама  ]
[ Почтальон ]
[ О проекте ]






TopList
Logo
Приколы с помощью Delphi.
Незакрывающиеся окна и клавиатура
:

Автор: Артём Сухобоков chimaf@mail.ru или artem2@beep.ru
Logo
Рис. 1 Общие приколы.

Мне сказали, что не все приколы работают в Win2k, поэтому в программах и статьях я буду писать, что где работает. Вернемся к предыдущей статье "Приколы c помощью Delphi: Общие приколы":
1) Невидимка работает только в Win9x;
2) Отключение комбинаций клавиш Ctrl-Alt-Del, Alt-Tab, Ctrl-Esc работает только в Win9x;
3) Изменение надписи на окнах открытых приложений работает в Win9x и Win2k;

Итак, что у нас на сегодня?

1) Окно, которое не возможно закрыть штатными средствами Windows.
(работает только в Win9x)

Для этого нужно вызвать функцию DeleteMenu:

BOOL DeleteMenu(
    HMENU hMenu,	// хэндл меню
    UINT uPosition,	// позиция или элемент меню для удаления
    UINT uFlags	// флаг элемента. От него зависит смысл параметра uPosition
   );

uFlags может принимать одно из следующих значений:

  • MF_BYCOMMAND показывает, что uPosition указывает на элемент меню
  • MF_BYPOSITION показывает, что uPosition - относительная позиция элемента меню, отсчитываемая от 0.

DeleteMenu возвращает ненулевое число, если завершается успешно. В случае ошибки она возвращает 0. Чтобы узнать информацию об ошибке нужно вызвать функцию GetLastError.

Пишем программу. Создаем форму Form2. В событии OnCreate Form2 пишем:

procedure TForm2.FormCreate(Sender: TObject);
Var MenuHandle:HMENU; //хэндл системного меню
begin
if Form1.Button1.Enabled=true then
  Form1.Button1.Click; //Убираем приложение из списка 
//Ctrl-Alt-Del (смотри предыдущую статью)
MenuHandle:=GetSystemMenu(Handle,False); //Получаем хэндл системного меню
if MenuHandle<>0 then
  //удаляем из меню команду закрытия
  DeleteMenu(MenuHandle,SC_CLOSE,MF_BYCOMMAND);
end;

Приколы с клавиатурой.

2) Программно нажимаем на Num Lock, Caps Lock и Scroll Lock
(работает только в Win9x)

//Программно нажимаем на Num Lock
procedure TForm1.Button7Click(Sender: TObject);
Var KeyboardState: TKeyboardState; //состояние клавиатуры-массив
begin
GetKeyboardState(KeyboardState); //получвем состояние клавиатуры
//изменяем состояние клавиши с номером 144
KeyboardState[144]:=KeyboardState[144] xor 1;
SetKeyboardState(KeyboardState); //устанавливаем новое состояние клавиатуры
end;
Logo
Рис. 2 Приколы с клавиатурой.

Чтобы изменить состояние клавиши Caps Lock и Scroll Lock нужно в предыдущей процедуре изменить только одну строчку:

  • Для Caps Lock:
    //изменяем состояние клавиши с 
    номером 20
    KeyboardState[020]:=
    KeyboardState[020] xor 1;
  • Для Scroll Lock:
    //изменяем состояние клавиши с 
    номером 145
    KeyboardState[145]:=
    KeyboardState[145] xor 1;

3) Цветомузыка на клавиатуре
(работает только в Win9x)

Помещаем на форму таймер и в его событии OnTimer пишем:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
// Нажимаем на Num Lock, Caps Lock и Scroll Lock
Button7.Click;
Button8.Click;
Button9.Click;
end;

Пишем процедуры включения и выключения цветомузыки:

// Включение цветомузыки
procedure TForm1.Button10Click(Sender: TObject);
begin
GetKeyboardState(OldKeyboardState); //сохраняем состояние клавиатуры
//Разрешаем/запрещаем кнопки
Button11.Enabled:=true;
Button10.Enabled:=false;
Timer1.Enabled:=true; //запускаем таймер
end;
// Выключение цветомузыки
procedure TForm1.Button11Click(Sender: TObject);
begin
Timer1.Enabled:=false; //останавливаем таймер
//Разрешаем/запрещаем кнопки
Button11.Enabled:=false;
Button10.Enabled:=true;
SetKeyboardState(OldKeyboardState); //восстанавливаем состояние клавиатуры
end;

Еще в начале модуля Unit1 нужно описать переменную OldKeyboardState:

...
Var OldKeyboardState: TKeyboardState;
...

4) Установка русской/английской раскладки клавиатуры
(работает в Win9x и Win2k)

Установка раскладки клавиатуры производится с помощью функции

HKL LoadKeyboardLayout(
    LPCTSTR pwszKLID,	// название раскладки для загрузки
    UINT Flags 	// флаги
   );

Из флагов нас интересует только KLF_ACTIVATE, который загружает указанную раскладку и активирует ее. Если раскладка уже загружена, то происходит только ее активация. Если функция выполняется успешно, то она возвращает хэндл раскладки клавиатуры, в противном случае NULL.

Все. В следующий раз я расскажу о том, что можно сделать с CD-ROMом и монитором.

 Исходники примера для Delphi 6 забирай здесь


Copyright©: Horrific aka Флёнов Михаил
Design by FMk group©