Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 20.11.2021
Сообщений: 5

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

22.09.2024, 19:29. Показов 1769. Ответов 21

Студворк — интернет-сервис помощи студентам
Мир вашему дому уважаемые программисты.
Например есть калькулятор. Программа его находит по его HWND. Затем находит его самый первый пиксель, узнает его RGB код, записывает его в массив и переходит к другому пикселю. И так до последнего пикселя. То есть как будто бы программа рисует калькулятор в массив.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.09.2024, 19:29
Ответы с готовыми решениями:

VB 6 Как программно нажать На кнопку В окне другого приложения ?
Есть программа на ней есть Кнопка комманд баттон как на неее нажать программно ? Как я знаю надо найти окно Findewindow но как найти кнопку...

Как программно узнать tcp-соединение для некоторого приложения и потом замочить его?
Привет всем. Имеется некоторое приложение (пусть будет Project.exe), которое по TCP IP передает данные серверу. Как программно определить...

Как разделить каждый пиксель одного изображения на соответствующий пиксель другого?
Здравствуйте! Есть два битмапа, одинакового размера, нужно получить третий, являющийся результатом деления пикселей первого на пиксели...

21
Модератор
10053 / 3898 / 884
Регистрация: 22.02.2013
Сообщений: 5,851
Записей в блоге: 79
22.09.2024, 21:25
Нужно использовать GetDiBits и получать сразу несколько пикселей.
2
0 / 0 / 0
Регистрация: 20.11.2021
Сообщений: 5
23.09.2024, 07:25  [ТС]
Уважаемый TheTrick функция GetDiBits новая для меня и мне понадобиться немало времени, которых у меня сейчас нет, чтобы понять его. Вы не могли бы написать маленький код по выше указанному алгоритму. Заранее благодарю.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
23.09.2024, 13:27
Нашёл как использовать эту функцию:

Украдено на просторах интернета с чужого сайта, форум же запрещает ссылки ставить.

Решение задачи: «Поиск пикселя черного цвета в PictureBox (VB6)»

Visual Basic
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
Option Explicit
 
Private Declare Function GetDIBits Lib "gdi32" (ByVal ahdc As Long, ByVal hBitmap As Long, ByVal nStartScan As Long, ByVal nNumScans As Long, lpBits As Any, lpBI As Any, ByVal wUsage As Long) As Long
 
Private Sub Form_Load()
    Dim pix()       As Long
    Dim bi(11)      As Long
    Dim pic         As IPicture
    Dim s           As Long
    Dim x           As Long
    Dim y           As Long
    
    Set pic = Image1.Picture
 
    bi(0) = 40
    GetDIBits Me.hdc, pic.Handle, 0, ScaleY(pic.Height, vbHimetric, vbPixels), ByVal 0&, bi(0), 0
    bi(4) = 0: bi(3) = &H200001
 
    ReDim pix(bi(1) - 1, bi(2) - 1)
 
    GetDIBits Me.hdc, pic.Handle, 0, bi(2), pix(0, 0), bi(0), 0
    
    For y = bi(2) - 1 To 0 Step -1: For x = 0 To bi(1) - 1
        If pix(x, y) = vbBlack Then Stop
    Next: Next
 
End Sub
1
0 / 0 / 0
Регистрация: 20.11.2021
Сообщений: 5
23.09.2024, 14:08  [ТС]
Уважаемый HackerVlad, по правде говоря, я тоже нашел этот код. И в течении двух дней мне не удалось, чтобы он работал по вышеуказанному алгоритму. И поэтому я обратился сюда. Может у тебя получится? Заранее благодарю.
0
 Аватар для Mikle Quits
772 / 289 / 17
Регистрация: 21.01.2023
Сообщений: 470
23.09.2024, 15:21
Allaberdi, программа находит окно с заголовком "Calc" и скриншотит его.
Если заголовок будет не латинский, может не сработать, это тебе HackerVlad исправит , это его тема.
Вложения
Тип файла: zip ScreenShot.zip (1.5 Кб, 11 просмотров)
1
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
23.09.2024, 15:32
Mikle Quits, у меня твой код не работает, хотя переписал по русски Калькулятор.

Добавлено через 13 секунд
И он не использует GetDIBits

Добавлено через 1 минуту
Mikle Quits, твоя функция GetScreenshot не работает короче

Добавлено через 3 минуты
ни в твипах, ни в пикселях, вообще никак не работает
0
 Аватар для Mikle Quits
772 / 289 / 17
Регистрация: 21.01.2023
Сообщений: 470
23.09.2024, 15:37
Цитата Сообщение от HackerVlad Посмотреть сообщение
хотя переписал по русски Калькулятор
Поэтому и не работает. Сделай папку "Calc", открой её, проверь мою программу.
Цитата Сообщение от HackerVlad Посмотреть сообщение
он не использует GetDIBits
Замени BitBlt на GetDIBits. Я взял BitBlt, чтобы сразу отобразить для наглядности.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
23.09.2024, 15:37
Да и задача стояла не скриншотить окно, а наполнить массив пикселей.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
23.09.2024, 15:44
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Поэтому и не работает.
Окно-то находит, а вот твой код дальше не работает.

Добавлено через 2 минуты
Я раньше помню с помощью функции GetPixel получал массив пикселей. Но это жутко тормознуто сейчас было бы.

Добавлено через 4 минуты
Цитата Сообщение от Allaberdi Посмотреть сообщение
И в течении двух дней
Цитата Сообщение от Allaberdi Посмотреть сообщение
Может у тебя получится?
За два дня у меня конечно получилось бы. Но у меня тоже нет времени возиться сильно долго.
0
1387 / 843 / 92
Регистрация: 08.02.2017
Сообщений: 3,592
Записей в блоге: 1
23.09.2024, 16:39
Я так понял (из имеющихся кодов), можно сначала сделать скриншот ф-ей BitBit на форму, а потом из формы выкачать массив пикселей в GetDiBits, но может это тупо и можно сразу напрямую GetDiBits, но тогда нужен параметр hdc окна
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
23.09.2024, 16:47
Надо через GetDC получать hdc окна

Добавлено через 17 секунд
Потом GetDiBits, мне кажется код должен быть лёгким
0
Модератор
10053 / 3898 / 884
Регистрация: 22.02.2013
Сообщений: 5,851
Записей в блоге: 79
23.09.2024, 21:48
Тут в разделе куча тем с этой функцией.

https://www.cyberforum.ru/post15593131.html

Вот поиск иконки на всем экране по картинке с маской.
2
0 / 0 / 0
Регистрация: 20.11.2021
Сообщений: 5
24.09.2024, 10:27  [ТС]
Доброе время суток Уважаемые программисты. Есть 64 бит система, например Windows 10. В нём запущена программа. Так вот надо, программным путём, найти его первый пиксель и записать его в массив, затем узнать и записать его RGB код. И так, по циклу, до последнего пикселя. И всё. Все предложенные материалы не помогли, ну или я не не смог их понять. Напишите пожалуйста маленький и быстрый код по выше указанному алгоритму. Заранее благодарю.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
24.09.2024, 12:14
Потом GetDiBits, мне кажется код должен быть лёгким
Цитата Сообщение от Allaberdi Посмотреть сообщение
маленький и быстрый код
Если бы это было так легко люди давно бы вам уже помогли. Это не маленький и лёгкий код, это много кода и много часов работы над этим кодом.
0
0 / 0 / 0
Регистрация: 20.11.2021
Сообщений: 5
24.09.2024, 17:06  [ТС]
HackerVlad, Вы правы. Возможно я тороплюсь. Но я не писал, что это легко или, что это легкий код и с этим я не могу с Вами согласиться. Возможно Вас запутало слово "маленький". Когда я писал маленький и быстрый код, я не имел ввиду код в две строки. Мне надо было, чтобы код был не раздутый и программе не надо было бы отвлекаться на не нужные алгоритмы тем самым загружая систему и благодаря этому она и будет быстрой. Возможно модераторы отметят этот ответ как не по теме, но я не смог не отреагировать на Ваше сообщение. С уважением Allaberdi.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
24.09.2024, 19:35
Allaberdi, вам лучше всего разобраться с этим кодом самому, даже если придётся для этого потратить несколько дней, зато научитесь сами
0
 Аватар для Mikle Quits
772 / 289 / 17
Регистрация: 21.01.2023
Сообщений: 470
24.09.2024, 21:01
Лучший ответ Сообщение было отмечено Allaberdi как решение

Решение

Цитата Сообщение от HackerVlad Посмотреть сообщение
Это не маленький и лёгкий код, это много кода и много часов работы над этим кодом
А я и не знал, поэтому сделал коротко и просто
Allaberdi, вот программа, которая именно попиксельно читает изображение окна.
Убедись, что окно с заголовком "3" существует, например, создай папке с таким именем и открой её.
Но работает медленно, GetPixel() - медленная функция.
Единственное, я не записываю данные в массив, а так же попиксельно вывожу на форму, просто для наглядности.
Вложения
Тип файла: zip PerPixel.zip (1.5 Кб, 17 просмотров)
2
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
25.09.2024, 03:32
Цитата Сообщение от Mikle Quits Посмотреть сообщение
Но работает медленно, GetPixel() - медленная функция.
Я же говорил уже об этом про GetPixel у меня у самого уже давно такой код был написан

Добавлено через 2 минуты
Mikle Quits, этот код не очень, он медленный и то работает то ни работает то без заголовка рисует
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
25.09.2024, 03:36
Быстро переписал этот "3" на "Калькулятор", скомпилировал, запустил EXE и вот что (смотрите рисунок):
А в IDE вроде с заголовком рисовало через F5... А иногда и вовсе не рисовало и было всё чёрное... Чёрный квадрат Малевича прям...
Миниатюры
Программно найти пиксель в окне другого приложения и узнать его RGB код  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.09.2024, 03:36
Помогаю со студенческими работами здесь

Поиск строки в окне другого приложения
Прошу помощи. Есть мое приложение написанное на Microsoft Visual Studio 2010 (MFC библиотека) на форме приложения есть ListBox Control...

Qt qml - открытие другого приложения в основном окне
Подскажите, как можно в основном окне (main.qml) открыть стороннюю программу *.exe , чтоб она находилась внутри моей ?

Перехват нажатия кнопки в окне другого приложения
Всем доброго времени суток! Задача стоит следующая: выполнить свой код по нажатию кнопки в окне чужого приложения, назовем его...

Включение/отключение курсора в окне другого приложения
Народ, помогите пожалуйста. такая проблема: есть прога, при наведении курсора на ее окно курсор пропадает(прога без глюков, просто...

Показывать окно одного приложения в окне другого
Добрый день. Можно ли встроить окно одного приложения (запущенного уже или запускать его самому - не суть) - чужого, внутрь окна своего...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru