powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Имитация нажатий. имитация сигнала
25 сообщений из 277, страница 11 из 12
Имитация нажатий. имитация сигнала
    #37614662
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аппаратурая правильно понял что когда игра не запущена то можно весь экран прочитать а когда запущена то нельзя? когда запущена, можно прочитать все окна, кроме окна игры. будет возвращаться сплошной чёрный цвет
аппаратураа может кнопка PrintScreen работает?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const VK_SNAPSHOT = &H2C
Private Sub Timer2_Timer()
Timer2.Enabled = False
keybd_event VK_SNAPSHOT, 0, 0, 0
Image1.Picture = Clipboard.GetData(vbCFBitmap)
'SavePicture Image1.Picture, "c:\ps.bmp"
End Sub

скрин работает. но загружать скрин в image - хлопотно. если в секунду делать 10 скринов, каждый примерно 5мб, то 50 мб в секунду...
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37614699
если PrintScreen работает
ну так 50 мб это же в памяти а для памяти это не критично просто на диск не надо его писать а выбрать то что нужно и анализировать

если PrintScreen работает
то может и блокировки никакой нет может просто что-то другое неверно сделано

а может надо просто вызывать так
lngHdc = GetDC(0)
для всего экрана

или так
lngHdc = CreateDC("DISPLAY", 0, 0, 0)

это просто другие функции с помощью которых можно получить графический контекст для всего экрана
а имея этот контекст уже вызывать GetPixel

можно еще попробовать вызвать из .net соответствующую функцию
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37614715
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аппаратураlngHdc = GetDC(0) пробовал, я выкладывал парой смс выше BelowZero'hdcA = (GetWindowDC(HWND_DESKTOP)) тогда попробую при помощи image. только хз, будет ли работать распознавание из image, если фокус на игре. возможно. игра будет блокировать всё.
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37614725
там где я видел там GetWindowDC а тут просто GetDC
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37614761
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аппаратура,

проверил - GetDC тоже не работает. более того, защита железобетонная. блокируются полностью функции, если фокус на игре. т.е. прога не может распознать цвета даже чужой программы, если фокус на игре, и не может распознать цвета окна игры, даже если игра без фокуса.
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37616034
ну если PrintScreen Clipboard.GetData работает то я думаю нужно им и пользоваться и не мучаться
я могу сделать code.bytes файлы для GetPixel например но все равно они могут не работать из-за защиты или по какой-то другой причине

кстати ведь можно написать цикл
PrintScreen
ClipBoard.GetData
Clipboard.Clear

и посмотреть сколько раз успеет такое выполниться за 1 секунду например
те оценить скорость работы
я думаю весь экран копировать получится достаточно быстро для данной задачи
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37620217
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аппаратура,

на всякий случай проверил -
Код: vbnet
1.
2.
hWndA = GetForegroundWindow()
hdcA2 = (GetWindowDC(hWndA))

и
Код: vbnet
1.
hdcA = GetDC(0)

работают, т.е. возвращают значения. отсюда вывод, что не работает именно
Код: vbnet
1.
GetPixel(hdcA, 400, 400)

нужно получить пиксели экрана или окна как-то подругому. я думаю, будет работать, если сначала загрузить изображение в image, убрать фокус с игры, а затем снова его ставить... но тогда окно будет мелькать несколько раз в секунду... как-то непрофессионально... пока что попробую юзать getpixel через левую дллку.
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37620255
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аппаратура,

простое переименование gdi32 на gdi327 в system32 привело к глобальному краху среды vb6 и закрытию несохранённого проекта... о5. надо научиться сохранять промежуточные варианты кода...
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37620870
авторнадо научиться сохранять промежуточные варианты кода


не уверен но по-моему есть галочка в настройках бейсика которая позволяет сохранять изменения каждый раз когда программа запускается на выполнение
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37620887
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аппаратура,

что посоветуете делать с getpixel? нужно, чтобы прога хоть как-то получала данные от игры. были даже идеи через звук(томный вздох - под атакой мобов, звон меча - удары, шарканье - персонаж бежит), но это как-то чересчур экстремально) меня напрягла dll gdi32. не ожидал, что бональная переименовка приводит к краху. с user32 так не было
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37620901
работает ли PrintScreen на игре?
если работает то предлагаю его использовать те
1 программно нажать PrintScreen
2 прочитать из Clipboard картинку
3 прочитать пиксел


еще могу сделать такой же GetPixel.code.bytes.bin файл как и для SetCursorPos
только я не очень верю в то что он заработает думаю что функция GetPixel в ядре перехвачена так же как и SendInput но конечно это надо проверить
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37620927
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аппаратура2 прочитать из Clipboard картинку
3 прочитать пиксел а как вы прочитаете картинку? вернее чем? getpixel не работает, если игра в фокусе
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37620937
игра запущена
защита активирована
жмем PrintScreen
идем в Paint
вставлям картинку из ClipBoard
сохраняем картинка в файл


вот если такие действия позволяют картинку игры сохранить то и программно их наверное можно сделать

или так нельзя сохранить картинку игры вручную?
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37620942
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аппаратураигра запущена
защита активирована
жмем PrintScreen
идем в Paint
вставлям картинку из ClipBoard
сохраняем картинка в файл


вот если такие действия позволяют картинку игры сохранить то и программно их наверное можно сделать

или так нельзя сохранить картинку игры вручную? всё это можно только толку. вот у вас есть сохранённая картинка экрана. а что с ней делать?) как считать, что на ней нарисовано?
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37620959
авторвсё это можно только толку. вот у вас есть сохранённая картинка экрана. а что с ней делать?) как считать, что на ней нарисовано?


я думал как читать дальше известно Вам кто-то ведь приводил в этом топике или в соседнем топике пример

я тоже могу посмотреть как читать эту картинку
сразу сказать как на бейсике это сделать не знаю надо посмотреть
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37620967
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аппаратура,

приводили, если не ошибаюсь, getpixel. можно убирать фокус с игры, будет работать, но это не идеально...
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37620970
я посмотрю что можно сделать
просто PrintScreen пишет картинку в ClipBoard определенном формате
надо посмотреть в каком именно
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37621239
у меня сейчас нет возможности на игре протестировать функции поэтому
я написал тестовый пример
на vb.net
можно откомпилировать и запусить
или можно сразу запустить (есть готовый m05.exe)

для запуска нужен .net framework 2.0 или выше

функция делает следующее
1 показывает msgbox
2 ждет 5 сек
3 за это время нужно переключиться на игру
4 нужно нажать руками PrintScreen
5 после того как 5 сек пройдут
6 читается из Clipboard картинка в память
7 mgsbox спрашивает координаты точки для которой надо считать цвет
8 показывается цвет выбранной точки

вот такой тест надо запусить на игре
я пока на не могу его на игре запустить

просто я думаю что когда игра запущена то этот тест не пройдет тк защита игры не даст ему выполниться
ведь если защита смогла GetPixel запретить она и GetClipboardData может запретить
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37622532
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аппаратура,

всё работает... но результаты опыта зависят от того, как построен проект. Я не знаю, как написан ваш код:
1) после ввода координат пикселя запускается считывание, а затем возвращается фокус игре(в таком случае ничего не нового не узнали, т.к. при отсутствии фокуса игра и так позволяла считывать пиксели)
2) сначала фокус возвращается игре, а затем производится считываение пикселя. в этом случае вам удалось решить задачу, т.е. считать пиксели, когда фокус у игры. (в этом случае остаётся понять, почему в моём проекте ничего не вышло, а у вас получилось)
p/s выводятся 4 составляющие: зелёный, синий, красный цвета, а что за А? возвращает 255
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37622655
ну ведь есть исходники их можно посмотреть и понять как работает
ведь синтаксис vb.net похож на систаксис vb6
кроме того я написал выше 1-8 пункты как работает

первый msgbox для того чтобы подготовиться
потом будет пауза на 5 сек за это время надо отдать фокус игре и нажать PrintScreen
после паузы фокус у игры но наш тестовый пример продолжает работать
одной командой наш тестовый пример копирует в память картинку из clipboard те когда фокус еще у игры
после этого выводится msgbox для задания координат
но тк картинку из clipboard мы скопировали в память
то нам уже не важно что игра потеряла фокус
пример ввода координат x y через пробел
120 240

цвет это 32 бита А значит прозрачность при снимке экрана она всегда 255
она может использоваться только при наложении двух картинок
тогда можно для каждой картинки задать прозрачность
и с учетом этой прозрачности получить из двух картинок одну

я прошу проверить тк пока у меня нет возможности запустить игру


если все будет работать то я расскажу как этот код для определения пиксела вызывать из vb6

те будет примерно так
1 посылаем программно PrintScreen это мы умеем делать
2 читаем файл из Clipboard в память это делает код из m05
3 вызываем функцию чтения пиксела из картинки которая теперь находиться в памяти
параметры функци будут задавать координаты это делает код из m05
4 тк картинка в памяти то функцию чтение пиксела можем вызывать любое количество раз
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37624802
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аппаратура,

похожий код на vb6. не работает. вот строки кода:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal Y As Long) As Long
Private Sub Timer1_Timer()
Picture1.Picture = Clipboard.GetData
    Dim pColor
    pColor = GetPixel(Picture1.hdc, 100, 100)
    Dim KRA
    Dim SIN
    Dim ZEL
    KRA = (pColor Mod 256)
    SIN = (Int(pColor / 65536))
    ZEL = ((pColor - (SIN * 65536) - KRA) / 256)
    Text1.Text = "Red=" & KRA & " Green=" & ZEL & " Blue=" & SIN
End Sub


на форме текстбокс, пикчебокс, таймер. изображение, как ему и положено, успешно загружается из буфера обмена в пикчебокс. но если фокус у игры, то прога не может обработать даже свой пикчебокс. возвращается 0. отсюда 2 возможных варианта:
1) я что делаю не так, как у вас в проекте
2) у вас показывается табличка, куда нужно вводить данные, т.е. вы забираете фокус у игры. только затем используете getpixel. в таком, случае, как и положено, всё будет работать. а нужно, что-бы всё работало, когда фокус у игры
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37624960
я два раза написал практически одно и то же читайте внимательно
и не просто читайте мой текст здесь
а еще и читайте код программы которую я выложил для m05
да vb.net это другой язык не vb6 но синтаксис похож и последовательность действий которые там делаются можно уловить даже не зная языка совсем


третий раз объясняю как работает m05

1 MsgBox чтобы подготовиться
2 пауза 5 секунд чтобы сделать нужные действия
3 за эти пять секунд активируем игру
4 за эти пять секунд нажимаем PrintScreen
5 после нажатия PrintScreen в clipboard помещается картинка всего экрана
6 после того как 5 сек прошли m05 пример отводит память для картинки и копирует из clipboard картинку в эту память
7 все картинка скопирована в память и к нашей памяти мы можем обращаться как хотим
8 я мог бы просто не выдавать msgbox с запросом на ввод координат и вбить фиксированные x y прямо в код но я решил спросить x y
9 на тест этот вопрос о координатах x y никак не влияет
10 когда координаты введены я просто читаю из памяти нужный пиксел
11 все


я не знаю как это сделать на vb6 мне лень разбираться
но даже если это и можно сделать
то потребуется больше писанины
а в m05 примере всего две команды две строчки
1 Glipboard.GetImage прочитать из Clipboard в память картинку
2 objImage.GetPixel(x, y) прочитать цвет пиксела
3 все



почему не работаем Ваш пример

Вы упорно не хотите сравнить то что я предлагаю с тем что есть у Вас
Вы используете
GetPixel(hdc, x, y)
это api функция
hdc это графический контекст который нужен каждой api функции
hdc в этой функции не просто так задан он используется

я же предлагаю считать одной командой всю картинку в память
те после этой операции картинка помещается в область памяти которую я сам задаю
а после того как она туда помещена
к своей памяти я могу обращаться как хочу
и когда хочу
и защита никакая это не может запретить
хотя защита может запретить копирование картинки в свою память
ведь это тоже api функция только другая
вот как раз для этого я и написал тестовый пример m05
он позволяет проверить дает ли защита игры копировать картинку целиком


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

кстати на vb6 тоже есть две команды

Set objImage = Clipboard.GetImage
SavePicture objImage, "c:\image.bmp"

они позволяют записать картинку из clipboard в файл
но только в файл а как объяснить что писать надо в память не знаю
наверное нельзя это vb6 объяснить
наверное vb6 дает писать только в файл

кстати смысл m05 теста проверить что игра дает скопировать весь экран когда она в фокусе
это тест можно заменить тестом на vb6 приведенным выше те
Set objImage = Clipboard.GetImage
SavePicture objImage, "c:\image.bmp"
все
если это работает значит игра дает скопировать весь экран

вот только даже если это работает
то vb6 мы не можем использовать для того чтобы получить цвет пиксела
вернее я не знаю как это сделать надо разбираться
сделать это точно можно но как неизвестно мне
а в m05 уже есть и код который получает цвет пиксела
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37624965
кстати то что мы может послать PrintScreen нажатия с помощью SendInput надо тоже проверить защита именно эту кнопку может не пропускать
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37626564
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: аппаратура
> но только в файл а как объяснить что писать надо в память не знаю
> наверное нельзя это vb6 объяснить
> наверное vb6 дает писать только в файл

Можно, в MSDN даже статья с примером была на эту тему как сделать скрин формы, экрана.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Имитация нажатий. имитация сигнала
    #37627010
Фотография BelowZero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,

ссылку не подкинете?
...
Рейтинг: 0 / 0
25 сообщений из 277, страница 11 из 12
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Имитация нажатий. имитация сигнала
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]