Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.10.2011, 22:00
unity unity вне форума
Прохожий
 
Регистрация: 14.07.2011
Сообщения: 43
Репутация: -2279
По умолчанию цвет пикселя в игре

сделал прогу которая в зависимости от цвета жмет на кнопку
(программма делалась для игры)
так вот когда игра в оконом режиме все норм работает но как только
разворачиваеш во весь экран перестает работать (т.е постоянна жмет на кнопку необрашая внимания на цвет пикселя)

вот код проги (немного урезан вконце изза ограничения в 10к символов):
Код:
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
unit Unit1;
procedure TForm1.startClick(Sender: TObject);
begin
d1:=strtoint(edt1.Text);
d2:=strtoint(edt2.text);
d3:=strtoint(edt3.text);
p1:=(key1.ItemIndex);
p2:=(key2.ItemIndex);
p3:=(key3.ItemIndex);
nkey1.Interval:= d1;
nkey2.Interval:=d2;
nkey3.Interval:=d3;
nkey1.Enabled:= Not(nkey1.Enabled);
nkey2.Enabled:= Not(nkey2.Enabled);
nkey3.Enabled:= Not(nkey3.Enabled);
end;
 
procedure TForm1.windowClick(Sender: TObject);
begin
hwndtmr.Enabled:= Not(hwndtmr.Enabled);
end;
 
procedure TForm1.hwndtmrTimer(Sender: TObject);
begin
if (getasynckeystate($13)<>0then  //условия на то чтоб было нажатие кнопки
  begin
    GetCursorPos( Pos ); //определяет координаты курсора
    Wnd:= WindowFromPoint( Pos );//запоминает хвид окна который под курсорам
    hwndtmr.Enabled:= Not(hwndtmr.Enabled);
    ShowMessage('окно захваченно!');
  end
end;
 
procedure TForm1.zdc1Click(Sender: TObject);
begin
zdc1tmr.Enabled:= Not(zdc1tmr.Enabled);
end;
 
procedure TForm1.zdc1tmrTimer(Sender: TObject);
begin
  GetCursorPos(pos);
DC:=GetDC(0);
colzdc1:=GetPixel(DC,pos.x,pos.y);
ReleaseDC(0,DC);
shp1.brush.Color:=colzdc1;
if (getasynckeystate($13)<>0then  //условия на то чтоб было нажатие кнопки
  begin
SetForeGroundWindow(wnd); 
GetCursorPos(pos);
DC:=GetDC(0);
colzdc1:=GetPixel(DC,pos.x,pos.y);
kx1:=Pos.X;
ky1:=Pos.Y;
ReleaseDC(0,DC);
shp1.brush.Color:=colzdc1;
zdc1tmr.Enabled:= Not(zdc1tmr.Enabled);
ShowMessage('цвет захвачен(1)!');
  end
 
end;
 
procedure TForm1.zdc2Click(Sender: TObject);
begin
 zdc2tmr.Enabled:= Not(zdc2tmr.Enabled);
end;
 
procedure TForm1.zdc2tmrTimer(Sender: TObject);
begin
GetCursorPos(pos);
DC:=GetDC(0);
colzdc2:=GetPixel(DC,pos.x,pos.y);
ReleaseDC(0,DC);
shp2.brush.Color:=colzdc2;
if (getasynckeystate($13)<>0then  //условия на то чтоб было нажатие кнопки
  begin
    SetForeGroundWindow(wnd);
GetCursorPos(pos);
DC:=GetDC(0);
colzdc1:=GetPixel(DC,pos.x,pos.y);
kx2:=Pos.X;
ky2:=Pos.Y;
ReleaseDC(0,DC);
shp2.brush.Color:=colzdc2;
zdc2tmr.Enabled:= Not(zdc2tmr.Enabled);
ShowMessage('цвет захвачен!(2)');
  end
 
end;
 
procedure TForm1.zdc3Click(Sender: TObject);
begin
zdc3tmr.Enabled:= Not(zdc3tmr.Enabled);
end;
 
procedure TForm1.zdc3tmrTimer(Sender: TObject);
begin
GetCursorPos(pos);
DC:=GetDC(0);
colzdc3:=GetPixel(DC,pos.x,pos.y);
ReleaseDC(0,DC);
shp3.brush.Color:=colzdc3;
if (getasynckeystate($13)<>0then  //условия на то чтоб было нажатие кнопки
  begin
    SetForeGroundWindow(wnd);
GetCursorPos(pos);
DC:=GetDC(0);
colzdc3:=GetPixel(DC,pos.x,pos.y);
kx3:=Pos.X;
ky3:=Pos.Y;
ReleaseDC(0,DC);
shp3.brush.Color:=colzdc3;
zdc3tmr.Enabled:= Not(zdc3tmr.Enabled);
ShowMessage('цвет захвачен!(3)');
  end
 
end;
 
procedure TForm1.nkey1Timer(Sender: TObject);
begin
if p1<>0 then
begin
DC:=GetDC(0);
colsr:=GetPixel(DC,kx1,ky1);
 if (colsr<>colzdc1)and (p1=1) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F1, 0);
 PostMessage(wnd,WM_KEYUP,vk_F1, 0);
 end;
 
 if (colsr<>colzdc1)and (p1=2) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F2, 0);
 PostMessage(wnd,WM_KEYUP,vk_F2, 0);
 end;
 
 if (colsr<>colzdc1)and (p1=3) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F3, 0);
 PostMessage(wnd,WM_KEYUP,vk_F3, 0);
 end;
 
 if (colsr<>colzdc1)and (p1=3) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F3, 0);
 PostMessage(wnd,WM_KEYUP,vk_F3, 0);
 end;
 
 if (colsr<>colzdc1)and (p1=4) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F4, 0);
 PostMessage(wnd,WM_KEYUP,vk_F4, 0);
 end;
 
 if (colsr<>colzdc1)and (p1=5) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F5, 0);
 PostMessage(wnd,WM_KEYUP,vk_F5, 0);
 end;
 
 if (colsr<>colzdc1)and (p1=6) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F6, 0);
 PostMessage(wnd,WM_KEYUP,vk_F6, 0);
 end;
 
 if (colsr<>colzdc1)and (p1=7) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F7, 0);
 PostMessage(wnd,WM_KEYUP,vk_F7, 0);
 end;
 
 if (colsr<>colzdc1)and (p1=8) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F8, 0);
 PostMessage(wnd,WM_KEYUP,vk_F8, 0);
 end;
 
 if (colsr<>colzdc1)and (p1=9) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F9, 0);
 PostMessage(wnd,WM_KEYUP,vk_F9, 0);
 end;
 
 if (colsr<>colzdc1)and (p1=10) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F10, 0);
 PostMessage(wnd,WM_KEYUP,vk_F10, 0);
 end;
 
 if (colsr<>colzdc1)and (p1=11) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F11, 0);
 PostMessage(wnd,WM_KEYUP,vk_F11, 0);
 end;
 
 if (colsr<>colzdc1)and (p1=12) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F12, 0);
 PostMessage(wnd,WM_KEYUP,vk_F12, 0);
 end;
ReleaseDC(0,DC);
end;
end;
 
procedure TForm1.nkey2Timer(Sender: TObject);
begin
if p2<>0 then
begin
DC:=GetDC(0);
colsr2:=GetPixel(DC,kx2,ky2);
if (colsr2<>colzdc2)and (p2=1) then
begin
 PostMessage(wnd,WM_KEYDOWN,vk_F1, 0);
 PostMessage(wnd,WM_KEYUP,vk_F1, 0);
end;
 
if (colsr2<>colzdc2)and (p2=2) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F2, 0);
 PostMessage(wnd,WM_KEYUP,vk_F2, 0);
 end;
 
 if (colsr2<>colzdc2)and (p2=3) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F3, 0);
 PostMessage(wnd,WM_KEYUP,vk_F3, 0);
 end;
 
 if (colsr2<>colzdc2)and (p2=3) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F3, 0);
 PostMessage(wnd,WM_KEYUP,vk_F3, 0);
 end;
 
 if (colsr2<>colzdc2)and (p2=4) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F4, 0);
 PostMessage(wnd,WM_KEYUP,vk_F4, 0);
 end;
 
 if (colsr2<>colzdc2)and (p2=5) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F5, 0);
 PostMessage(wnd,WM_KEYUP,vk_F5, 0);
 end;
 
 if (colsr2<>colzdc2)and (p2=6) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F6, 0);
 PostMessage(wnd,WM_KEYUP,vk_F6, 0);
 end;
 
 if (colsr2<>colzdc2)and (p2=7) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F7, 0);
 PostMessage(wnd,WM_KEYUP,vk_F7, 0);
 end;
 
 if (colsr2<>colzdc2)and (p2=8) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F8, 0);
 PostMessage(wnd,WM_KEYUP,vk_F8, 0);
 end;
 
 if (colsr2<>colzdc2)and (p2=9) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F9, 0);
 PostMessage(wnd,WM_KEYUP,vk_F9, 0);
 end;
 
 if (colsr2<>colzdc2)and (p2=10) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F10, 0);
 PostMessage(wnd,WM_KEYUP,vk_F10, 0);
 end;
 
 if (colsr2<>colzdc2)and (p2=11) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F11, 0);
 PostMessage(wnd,WM_KEYUP,vk_F11, 0);
 end;
 
 if (colsr2<>colzdc2)and (p2=12) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F12, 0);
 PostMessage(wnd,WM_KEYUP,vk_F12, 0);
 end;
ReleaseDC(0,DC);
end;
end;
 
procedure TForm1.nkey3Timer(Sender: TObject);
begin
if p3<>0 then
begin
DC:=GetDC(0);
colsr3:=GetPixel(DC,kx3,ky3);
if (colsr3<>colzdc3)and (p3=1) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F1, 0);
 PostMessage(wnd,WM_KEYUP,vk_F1, 0);
 end;
 
 if (colsr3<>colzdc3)and (p3=2) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F2, 0);
 PostMessage(wnd,WM_KEYUP,vk_F2, 0);
 end;
 
 if (colsr3<>colzdc3)and (p3=3) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F3, 0);
 PostMessage(wnd,WM_KEYUP,vk_F3, 0);
 end;
 
 if (colsr3<>colzdc3)and (p3=3) then
 begin
 PostMessage(wnd,WM_KEYDOWN,vk_F3, 0);
 PostMessage(wnd,WM_KEYUP,vk_F3, 0);
 end;

вот часть кода которыя показывает как я определяю цвет пикселя (и его координаты)
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.zdc3tmrTimer(Sender: TObject);
begin
GetCursorPos(pos);
DC:=GetDC(0);
colzdc3:=GetPixel(DC,pos.x,pos.y);
ReleaseDC(0,DC);
shp3.brush.Color:=colzdc3;
if (getasynckeystate($13)<>0then  //условия на то чтоб было нажатие кнопки
  begin
    SetForeGroundWindow(wnd);
GetCursorPos(pos);
DC:=GetDC(0);
colzdc3:=GetPixel(DC,pos.x,pos.y);
kx3:=Pos.X;
ky3:=Pos.Y;
ReleaseDC(0,DC);
shp3.brush.Color:=colzdc3;
zdc3tmr.Enabled:= Not(zdc3tmr.Enabled);
ShowMessage('цвет захвачен!(3)');
  end
в чем мая ошибка?
как еще можно получить цвет пикселя?
можно ли как вариант делать скриншот и из него узнавать цвет?
(и как это сделать, насколько затратная эта операция в плане загрузки ресурсов компа)
Ответить с цитированием
  #2  
Старый 14.10.2011, 22:33
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от unity
можно ли как вариант делать скриншот и из него узнавать цвет?
(и как это сделать, насколько затратная эта операция в плане загрузки ресурсов компа)
Ничего сложного и затратного. Контекст вы уже получили, теперь создайте bitmap с размерами экрана, создайте совместимый контекст от экранного выберите bitmap в полученный ранее контекст и функцией BitBlt скопируйте.
Код:
1
2
3
4
5
DC := GetDC(0);
MemDC := CreateCompatibleDC(DC);
MemBmp := CreateCompatibleBitmap(DC, Width, Height); // размеры экрана
SelectObject(MemDC, MemBmp);
BitBlt(MemDC, 0, 0, Width, Height, DC, 0, 0, SRCCOPY);
ну и не забыть, всё удалить, когда станет не нужно.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 15.10.2011, 00:08
unity unity вне форума
Прохожий
 
Регистрация: 14.07.2011
Сообщения: 43
Репутация: -2279
По умолчанию

Цитата:
Сообщение от angvelem
Ничего сложного и затратного. Контекст вы уже получили, теперь создайте bitmap с размерами экрана, создайте совместимый контекст от экранного выберите bitmap в полученный ранее контекст и функцией BitBlt скопируйте.
Код:
1
2
3
4
5
DC := GetDC(0);
MemDC := CreateCompatibleDC(DC);
MemBmp := CreateCompatibleBitmap(DC, Width, Height); // размеры экрана
SelectObject(MemDC, MemBmp);
BitBlt(MemDC, 0, 0, Width, Height, DC, 0, 0, SRCCOPY);
ну и не забыть, всё удалить, когда станет не нужно.
а можите если, у вас есть полный код такого метода определения цвета пикселя, выложить его а то чето я несовсем понемаю

так я посматрю весь код непонятные строки в гугл и пойму
Ответить с цитированием
  #4  
Старый 15.10.2011, 01:30
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Простенький пример в архиве. 1 кнопка - получить цвет точки непосредственно с экрана, 2 кнопка, сначала создать копию экрана в битмапе, затем - также получить цвет точки. Подводите курсор в нужное место и пробелом нажимаете кнопку. Никаких замудрённостей.
Вложения
Тип файла: rar pixels.rar (1.6 Кбайт, 118 просмотров)
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #5  
Старый 15.10.2011, 14:04
unity unity вне форума
Прохожий
 
Регистрация: 14.07.2011
Сообщения: 43
Репутация: -2279
По умолчанию

ну получилось вот так (просто скопировал ваш код в свой)

Код:
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.zdc1tmrTimer(Sender: TObject);
begin
 bmp := TBitmap.Create;
  bmp.Width  := Screen.Width;
  bmp.Height := Screen.Height;
  bmp.PixelFormat := pf24bit;
GetCursorPos(pos);
DC:=GetDC(0);
BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DC, 0, 0, SRCCOPY);
colzdc1:= bmp.Canvas.Pixels [pos.x,pos.y];
ReleaseDC(0,DC);
shp1.brush.Color:=colzdc1;

но из за того что нужен постоянный мониторинг, и етовсе в таймере
за сек 30 работы проги съедаеться 2 гига оперативы

наскока я понял скриншот делаеться всего экрана
что затратно, мне будет достаточно скриншота в 1 пиксель
за это наверно отвечает Screen.Width, Screen.Height им надо значение 1

а как заставить делать этот скриншот в определеном месте экрана?
все нашел за это отвечают BitBlt(bmp.Canvas.Handle, 0, 0,Screen.Width, Screen.Height, DC, 0, 0, SRCCOPY);
красные нули

вообщем получилось чтото такое:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.zdc1tmrTimer(Sender: TObject);
begin
 bmp := TBitmap.Create;
 bmp.Width  := 1;
  bmp.Height := 1;
 bmp.PixelFormat := pf24bit;
GetCursorPos(pos);
DC:=GetDC(0);
BitBlt(bmp.Canvas.Handle, 0,0, 1, 1, DC, Pos.x,Pos.y, SRCCOPY);
colzdc1:= bmp.Canvas.Pixels [0,0];
ReleaseDC(0,DC);
shp1.brush.Color:=colzdc1;
вроде оперативку нетак хавает )

всеравно правда неработает в полноэкранном режиме наверно там както
спецом сделали чтоб цвет неопределялся (или это из за directx )

какими еще способами можно определить цвет пикселя?

так установил опытным путем что цвет который узнает програма это цвет под полоской очков жизней
очки жизни и прочие показатели героя в блоке который похож на окно в винде, внутри игры его можно свободно перемещать
насколько я понял мне надо его хвид узнать (если он у него есть, гдето читал что даже у флеш анимации в браузере хвид есть свой) и сделать вот так: DC:=GetDC(hwnd)

вот а как узнать этот хвид (например хвид окна игры я узнаю наведением мыши на облость окна, и у меня есть своя мини прога которая показывает
хвид того что под курсором)

Последний раз редактировалось unity, 15.10.2011 в 19:59.
Ответить с цитированием
  #6  
Старый 15.10.2011, 21:33
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

1. Не, ты конечно молодец. Обрати внимание, я создавал bitmap в событии OnCreate - т.е один раз на сессию программы. Ты умудряешься создавать в таймере, а удалять кто будет? Вот память и "съедается".
2. Для игры, идея с GetDC(0) не прокатит. Нужно знать контекст игры.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 18.10.2011, 21:26
unity unity вне форума
Прохожий
 
Регистрация: 14.07.2011
Сообщения: 43
Репутация: -2279
По умолчанию

а что за контекст игры?
я попробывал наити хвиды дочерних окон игры нечего ненашлось
странно то что когда игра в окне то все норм работает
а как только на весь экран так начинает определять цвет под полоской жизни

какие еще есть методы определения цвета пикселя?
игра на directx мб в этом и проблема
Ответить с цитированием
  #8  
Старый 18.10.2011, 22:07
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Канвас, контекст, холст, DC - суть одна, названия разные.
Оконный режим он и есть оконный режим. А вот в полноэкранном, получить контекст (Канвас, холст, DC) несколько сложнее. Для OpenGL это проблем не составляет, не знаю как с этим у DirectX.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #9  
Старый 18.10.2011, 23:05
unity unity вне форума
Прохожий
 
Регистрация: 14.07.2011
Сообщения: 43
Репутация: -2279
По умолчанию

может кто небудь знает книги какие небудь
в которых можно что небудь узнать на тему directx
а именно как получить его контекст или чтото в этом духе

дайте ссылки пожалуйста
Ответить с цитированием
  #10  
Старый 18.10.2011, 23:15
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Какой из поисковиков тебя забанил?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #11  
Старый 18.10.2011, 23:17
unity unity вне форума
Прохожий
 
Регистрация: 14.07.2011
Сообщения: 43
Репутация: -2279
По умолчанию

Цитата:
Сообщение от angvelem
Канвас, контекст, холст, DC - суть одна, названия разные.
Оконный режим он и есть оконный режим. А вот в полноэкранном, получить контекст (Канвас, холст, DC) несколько сложнее. Для OpenGL это проблем не составляет, не знаю как с этим у DirectX.

ну ведь цвет определяет только цвет того что под полоской жизни
(ну и как показали эксперементы определяет оно так нетолко с окном жизней но и с любым другим, всегда только цвет того что под окном)
(завтра устанавлю какую нить игру посатрю как в другом случае будет определять)
возможно ли что это из за того что окошко с показателем здоровья имеет прозрачность (сама полоска жизни неимеет прозрачности) ?

Цитата:
Сообщение от angvelem
Какой из поисковиков тебя забанил?
ну может ктото разбираеться в directx и посоветует ту книгу где будет то что мне нужно

Последний раз редактировалось unity, 18.10.2011 в 23:19.
Ответить с цитированием
  #12  
Старый 18.10.2011, 23:20
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от unity
возможно ли что это из за того что окошко с показателем здоровья имеет прозрачность (сама полоска жизни неимеет прозрачности) ?
Для функции GetPixel (Pixels в VCL), важны только координаты - откуда брать и контекст - с которого брать
Попробуй посмотреть Краснова.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #13  
Старый 18.10.2011, 23:22
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

а не легче с помощью artmoney узнать адрес твоих жизней, и уже работать непосредственно с памятью..
Ответить с цитированием
  #14  
Старый 18.10.2011, 23:41
unity unity вне форума
Прохожий
 
Регистрация: 14.07.2011
Сообщения: 43
Репутация: -2279
По умолчанию

Цитата:
Сообщение от Pilot_Red
а не легче с помощью artmoney узнать адрес твоих жизней, и уже работать непосредственно с памятью..

можно
но мне хотелось самому написать свою програмку (оснавная цель ненаписать кликер для игры (уже есть готовые программы которые делают это даже скрипт свой можно вписывать), это только мативация)
а как работать с процесамми я вообще незнаю (будет повод поучиться=)), но идея хорошая можно будет так попробывать но хотелось бы разобраться с определением цвета в directx

я както об этом и недумал чтоб взависимости от того какое значение в переменой где хранятся уровень очков жизни делать опред действие.
а небудет ли это вмешателсьтвом в процесс игры?
(я сам незнаю по идее чтение данных приложения это невмешательство так?)

Последний раз редактировалось unity, 18.10.2011 в 23:45.
Ответить с цитированием
  #15  
Старый 18.10.2011, 23:52
Аватар для Pilot_Red
Pilot_Red Pilot_Red вне форума
Продвинутый
 
Регистрация: 01.11.2006
Адрес: Карелия
Сообщения: 702
Версия Delphi: D7
Репутация: 11581
По умолчанию

ну.. вообще способ который вы выбрали это - дрочение....
вот все что нужно для того чтобы работать с памятью.

получаем хендл игры wnd:=findwindow();
получаем ид процесса игры GetWindowThreadProcessId();
открываем этот процесс openprocess();

ну а дальше классика жанра))
write/readprocessmemory();

в инете описание функций есть..
Ответить с цитированием
Ответ


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:25.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025