![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Триста лет не шпилил в игрушки. Сегодня взял у соседа джойстик, и решил установив старенькую гоночьку. Узнал что джойстики игра не поддержует. Решил написать на делфи прогу которая сможет решить эту проблему. Принцип работы такой: программа определяет нажатия клавиш на джойстике, затем с помощью компонента sendkeys посылает соответственные кнопки игре... В общем программу я сделал, протэстил на блокноте - все клавиши посылаются верно. Проблема вот в чём. Когда дело доходит до игры, стоит мне нажать какую либо клавишу джойстика, как игра тут же сворачивается и выскакивает форма с программой. Пробовал просто скрыть форму с помощью:
showwindow(Application.handle, SW_HIDE); showwindow(Frorm1.handle, SW_HIDE); В этом случае игра просто сворачивается. Затем пробовал пользоваться всякого рода ДЖОЙНЕРАМИ для склейки двух EXE в один. Понял что они пригодны только для рассылки троянов, так как в процессах всё равно висит две проги... Мой друг посоветовал мне с помощью дисасемблера просто добавить код одного EXE в другой, но это сложно, долго и тупо.... Пожалуйста, подскажите как можна справится с этой проблемой. Заранее благодарен. |
|
#2
|
||||
|
||||
|
Тогда пиши сервис:
File -> New -> Other -> Service Application и там уже делай обработку. |
|
#3
|
||||
|
||||
|
А не проще просто поискать программу такого типа и не писать на Delphi ничего? В нете где-то видел такие программы, поищи.
|
|
#4
|
||||
|
||||
|
Сервис таки написал. Всё пашет. Правда, как всегда, пошпилил в игрушку 5 минут и надоело... Зато узнал как сервисы создавать... Вобщем спасибо, и с новым годом!
|
|
#5
|
||||
|
||||
|
Плз, выложите исходник! Очень нужно!
|
|
#6
|
||||
|
||||
|
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, ExtCtrls, MMSYSTEM; type TService1 = class(TService) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); private { Private declarations } public function GetServiceController: TServiceController; override; { Public declarations } end; var Service1: TService1; Label1,Label2,Label3,Label4:string; radiobuttonA,radiobuttonB,radiobuttonC,radiobutton X,radiobuttonY,radiobuttonZ,radiobutton7,radiobutt on8: Boolean; hWnd: THandle; implementation {$R *.DFM} procedure ServiceController(CtrlCode: DWord); stdcall; begin Service1.Controller(CtrlCode); end; function TService1.GetServiceController: TServiceController; begin Result := ServiceController; end; procedure TService1.Timer1Timer(Sender: TObject); var myjoy: tjoyinfo; p: TPoint; begin joygetpos(joystickid1,@myjoy); Label1:=inttostr(myjoy.wxpos); Label2:=inttostr(myjoy.wypos); Label3:= inttostr(myjoy.wZpos); radiobuttonA:= (myjoy.wbuttons and joy_button1)>0; radiobuttonB:= (myjoy.wbuttons and joy_button2)>0; radiobuttonC:= (myjoy.wbuttons and joy_button3)>0; radiobuttonX:= (myjoy.wbuttons and joy_button4)>0; radiobuttonY:= (myjoy.wbuttons and joy_button5)>0; radiobuttonZ:= (myjoy.wbuttons and joy_button6)>0; radiobutton8:= (myjoy.wButtons and JOY_POVLEFT)>0; if strtoint(Label3)<35000 then begin if Label2='65535' then begin keybd_event(VK_DOWN,0,0,0); keybd_event(VK_DOWN,0,KEYEVENTF_KEYUP,0); end; if Label2='0' then begin keybd_event(VK_UP,0,0,0); keybd_event(VK_UP,0,KEYEVENTF_KEYUP,0); end; if Label1='0' then begin keybd_event(VK_LEFT,0,0,0); keybd_event(VK_LEFT,0,KEYEVENTF_KEYUP,0); end; if Label1='65535' then begin keybd_event(VK_RIGHT,0,0,0); keybd_event(VK_RIGHT,0,KEYEVENTF_KEYUP,0); end; end; if strtoint(Label3)>35000 then begin if Label2='65535' then begin if GetCursorPos(p)=true then SetCursorPos(p.X,p.Y+20); end; if Label2='0' then begin if GetCursorPos(p)=true then SetCursorPos(p.X,p.Y-20); end; if Label1='0' then begin if GetCursorPos(p)=true then SetCursorPos(p.X-20,p.Y); end; if Label1='65535' then begin if GetCursorPos(p)=true then SetCursorPos(p.X+20,p.Y); end; end; if (RadioButtonA=true) then begin keybd_event(VK_RETURN ,0,0,0); keybd_event(VK_RETURN ,0,KEYEVENTF_KEYUP,0); end; if (RadioButtonB=true) then begin keybd_event(VK_tab,0,0,0); keybd_event(VK_tab,0,KEYEVENTF_KEYUP,0); end; if (RadioButtonC=true) then begin keybd_event(VK_MENU ,0,0,0); keybd_event(VK_MENU ,0,KEYEVENTF_KEYUP,0); end; if (RadioButtonX=true) then begin keybd_event(VK_BACK,0,0,0); keybd_event(VK_BACK,0,KEYEVENTF_KEYUP,0); end; if (RadioButtonY=true) then begin keybd_event(VK_LWIN ,0,0,0); keybd_event(VK_LWIN ,0,KEYEVENTF_KEYUP,0); end; if (RadioButtonZ=true) then begin mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0); end; if (RadioButton8=true) then begin mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); end; end; end. |
|
#7
|
||||
|
||||
|
Вот. Если есть вопросы - задавай...
|