|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Помогите решить проблему...
Триста лет не шпилил в игрушки. Сегодня взял у соседа джойстик, и решил установив старенькую гоночьку. Узнал что джойстики игра не поддержует. Решил написать на делфи прогу которая сможет решить эту проблему. Принцип работы такой: программа определяет нажатия клавиш на джойстике, затем с помощью компонента sendkeys посылает соответственные кнопки игре... В общем программу я сделал, протэстил на блокноте - все клавиши посылаются верно. Проблема вот в чём. Когда дело доходит до игры, стоит мне нажать какую либо клавишу джойстика, как игра тут же сворачивается и выскакивает форма с программой. Пробовал просто скрыть форму с помощью:
showwindow(Application.handle, SW_HIDE); showwindow(Frorm1.handle, SW_HIDE); В этом случае игра просто сворачивается. Затем пробовал пользоваться всякого рода ДЖОЙНЕРАМИ для склейки двух EXE в один. Понял что они пригодны только для рассылки троянов, так как в процессах всё равно висит две проги... Мой друг посоветовал мне с помощью дисасемблера просто добавить код одного EXE в другой, но это сложно, долго и тупо.... Пожалуйста, подскажите как можна справится с этой проблемой. Заранее благодарен. |
#2
|
||||
|
||||
Тогда пиши сервис:
File -> New -> Other -> Service Application и там уже делай обработку. Велик и могуч наш Object Pascal ! ICQ: 357-591-887 |
#3
|
||||
|
||||
А не проще просто поискать программу такого типа и не писать на Delphi ничего? В нете где-то видел такие программы, поищи.
|
#4
|
||||
|
||||
Сервис таки написал. Всё пашет. Правда, как всегда, пошпилил в игрушку 5 минут и надоело... Зато узнал как сервисы создавать... Вобщем спасибо, и с новым годом!
Программист это тоже самое что и шаман: целими днями бормочет чего-то, в бубен бет, а потом и сам не знает как оно работает... |
#5
|
||||
|
||||
Плз, выложите исходник! Очень нужно!
00110001 00101100 00110110 00110001 00111000 00110000 00110011 00110011 00111001 00111000 00111000 00110111 00110100 00111001 00111000 00111001 00110100 00111000 00110100 00111000 00110010 00110000 00110100 00110101 00111000 00110110 00111000 00110011 00110100 00110011 00110110 00110101 00110110 |
#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
|
||||
|
||||
Вот. Если есть вопросы - задавай...
Программист это тоже самое что и шаман: целими днями бормочет чего-то, в бубен бет, а потом и сам не знает как оно работает... |