10 / 9 / 20
Регистрация: 15.12.2012
Сообщений: 93
1

Управление мышью (курсором) в DirectX приложениях (играх)

18.08.2019, 20:11. Показов 543. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!

Написал программку которая, по координатам премещает курсор.
Проблема следующая:
- На рабочем столе и и некоторых играх все работает, но в стрелялке (Warface) не работает, просто ноль реакции. Читал что если игра использует DirectInput, то у нее нет такого понятия как курсор, или просто игра занимает курсор, и он недоступен.
Подскажите что можно сделать чтобы курсор перемещался и в игре. (Такая программа уже есть, в ней все работает.)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
unit _main;
 
interface
 
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
    Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls,
  Vcl.ExtCtrls;
 
const
    KEY_ID = 123456;
 
type
    TForm1 = class(TForm)
        Memo1: TMemo;
        HotKey1: THotKey;
        Label1: TLabel;
        Button1: TButton;
    Timer1: TTimer;
        procedure Button1Click(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure Timer1Timer(Sender: TObject);
    private
        procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;
    { Private declarations }
    public
        procedure Macros;
    { Public declarations }
    end;
 
var
    Form1: TForm1;
    TrackingMacros: Boolean = False;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.WMHotKey(var Msg: TWMHotKey);
begin
  //ВКЛ
    if (Msg.HotKey = KEY_ID) then
        if TrackingMacros = False then
        begin
            TrackingMacros := True;
            Timer1.Enabled := True;
        end
        else
        begin
            TrackingMacros := False;
            Timer1.Enabled := False;
        end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
    RegisterHotKey(Self.Handle, KEY_ID, 0, HotKey1.HotKey);
end;
 
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
    UnRegisterHotKey(Handle, KEY_ID);
end;
 
procedure TForm1.Macros;
var
    i, j: Integer;
    T_, _T: Integer;
    buf: string;
    x_buf, y_buf, delay_buf: string;
    x, y, delay: Integer;
    foo: TPoint;
begin
    GetCursorPos(foo);
 
    for i := 0 to Form1.Memo1.Lines.Count - 1 do
    begin
        GetCursorPos(foo);
        x_buf := '';
        y_buf := '';
        delay_buf := '';
 
        buf := Form1.Memo1.Lines[i];
 
        if Pos('MoveR', buf) > 0 then
        begin
            T_ := Pos(' ', buf);
            Delete(buf, 1, T_);
            _T := T_ + Pos(' ', buf);
 
            for j := T_ to _T do
                x_buf := x_buf + Form1.Memo1.Lines[i][j];
 
            x := StrToInt(Trim(x_buf));
 
            for j := _T to Length(Form1.Memo1.Lines[i]) do
                y_buf := y_buf + Form1.Memo1.Lines[i][j];
 
            y := StrToInt(Trim(y_buf));
 
            SetCursorPos(foo.X + x, foo.Y + y);
 
        end;
 
        if Pos('Delay', buf) > 0 then
        begin
            T_ := Pos(' ', buf);
            Delete(buf, 1, T_);
            _T := T_ + Pos(' ', buf);
 
            for j := T_ to _T do
                delay_buf := delay_buf + Form1.Memo1.Lines[i][j];
 
            delay := StrToInt(Trim(delay_buf));
 
            if delay < 3000 then
                Sleep(delay);
        end;
    end;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
    Form1.Caption := IntToStr(GetKeyState(01));
 
    if GetKeyState(01) < 0 then  //Если < 0 то нажата, если 0 или 1 то отпущена.
        Macros;
 
//    Mouse_Event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE, Screen.Width div 2, Screen.Height div 2, 0, 0);
 
end;
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.08.2019, 20:11
Ответы с готовыми решениями:

Управление мышью
хочу написать простенькую прогу которая должна двигать курсор до края экрана потом курсор долежен...

Откат DirectX на более раннюю версию. Управление DirectX
Доброго времени суток. Как откатить DirectX11 до DirectX10 на Win 7 x64? А может существуют...

Что-то с мышью(курсором)
Всем привет. Ситуация такая: привезли комп из ремонта, поставили новую семёрку. Запустил комп,...

Работа с курсором(мышью)
Подскажите пожалуста:есть ли какая нибудь функция делавшая такую задачу:узнает координаты х и у...

0
18.08.2019, 20:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.08.2019, 20:11
Помогаю со студенческими работами здесь

Ошибка nvlddmkm в играх и приложениях
Здравствуйте. При запуске игр и программ связанных с графикой 3D графикой (Planoplan), экран...

Неполадки с изображением в играх и приложениях
Привет всем! Помогите пожалуйста с проблеммой: в некоторых играх и приложения происходят искажения...

Загрузка HDD 100% в приложениях и играх
Ноутбук Такой Еще на гарантии. Заметил, что в играх и приложениях жесткий диск на скорости чтения...

Сбиваются цветовые настройки в играх и полноэкранных приложениях
Здравствуйте. У меня следующая проблема: если убавить настройки одного из цветов (красный, зеленый,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru