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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2013, 17:17   #1
maz-man
Новичок
Джуниор
 
Регистрация: 18.04.2013
Сообщений: 1
По умолчанию Написать программу на дельфи

Всем привет.
Эта тема скорее для тех у кого есть свободное время, чтоб помочь. Ну может кому-нибудь будет интересно эта область проблемы.

Итак имеем игру. Надо, чтоб во время игры по нажатию мной клавиши F8 происходили какие-либо действия мышкой. Полазил по инету посмотрел теорию как это все выглядит, а осилить в виде кода не смог. Может кто поможет.
Нажатие клавиши F8 отлавливается функцией SetWindowsHookEx, которую надо выносить в dll чтоб код всегда был в памяти.

вот какой код я нарыл в инете, но он у меня не компилируется в дельфи 7 секонд эдишин.

Код:
library SendKey;  

uses  
 WinTypes, WinProcs, Messages;  

const  
 {пользовательские сообщения}

 HookHandle: hHook = 0;  

var  
 SaveExitProc : Pointer;  
   
{собственно ловушка}
function Key_Hook(Code: integer; wParam: word; lParam: Longint): Longint; export;  
var H: HWND;  
begin  
 {если Code>=0, то ловушка может обработать событие}
 if Code >= 0 then  
  begin  
  {это те клавиши?}
  if (wParam = VK_F8) and
      (lParam and $40000000 = 0) then  
   begin  
     
       MyProc(работаем с мышкой)
   
   end;  
  
end;  
   
{при выгрузке DLL надо снять ловушку}
procedure LocalExitProc; far;  
begin  
 if HookHandle<>0 then  
  begin  
  UnhookWindowsHookEx(HookHandle);  
  ExitProc := SaveExitProc;  
  end;  
end;  

{инициализация DLL при загрузке ее в память}
begin  
 {устанавливаем ловушку}
 HookHandle := SetWindowsHookEx(wh_Keyboard, Key_Hook, hInstance, 0);  
 if HookHandle = 0 then  
  MessageBox(0, 'Unable to set hook!', 'Error', mb_Ok)  
 else
  begin  
  SaveExitProc := ExitProc;  
  ExitProc := @LocalExitProc;  
  end;
end.  



Далее приведен код модуля в Delphi, который загружает DLL и обрабатывает  
сообщения от ловушки, просто отображая их в Label1.  

unit Unit1;  

interface  

uses  
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,  
Forms, Dialogs, StdCtrls;  

{пользовательские сообщения}
const  
  
   
type  
  TForm1 = class(TForm)  
  
    procedure FormCreate(Sender: TObject);  
  private  
   {обработчики сообщений}


var  
  Form1: TForm1;  
  P : Pointer;  

implementation  

{$R *.DFM}

{загрузка DLL}

function Key_Hook : Longint; far; external 'SendKey';  


procedure TForm1.FormCreate(Sender: TObject);  
begin  
 {если не использовать вызов процедуры из DLL в программе,  
  то компилятор удалит загрузку DLL из программы}
  P:=@Key_Hook;  
end;

end.
maz-man вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу в Дельфи. L0102591 Помощь студентам 1 28.03.2010 07:38
Надо написать программу в дельфи. L0102591 Помощь студентам 1 27.03.2010 23:58
Работа в дельфи.Написать программу. L0102591 Помощь студентам 0 27.03.2010 23:46
Помогите написать программу (дельфи) Delpher Помощь студентам 2 09.12.2007 19:34