C # Как получить координаты определенной точки на экране. (не mouselocation)

#c# #winforms #location #screen #coordinates

#c# #winforms #Расположение #экран #координаты

Вопрос:

У меня следующая проблема: я пишу приложение WinForms на C # и хочу получить экранные координаты части изображения, в данном случае верхней части этой руки (отмеченной красной точкой).

Кто-нибудь знает, как я могу сделать это программно?

(«Координаты точек» = Координаты этой точки)

РЕДАКТИРОВАТЬ: извините, что сбил вас с толку, картинка выше должна демонстрировать только мою проблему. Фактическая цель моей программы — переместить управляемую мышью руку в игре в дартс в правильное положение, но это невозможно, только установив MouseLocation в фиксированную точку, потому что каждый ход стрелка получает другое расстояние x: y до MouseLocation. Итак, мне нужно найти местоположение стрелки (-arrow).

Я надеюсь, что теперь все знают, в чем моя проблема.

Картинка из игры в дартс

Комментарии:

1. Как с помощью кода угадать, что кто-то нарисовал руку на рабочем столе?

2. Какого рода информацию мы можем предположить? Я имею в виду, знаете ли вы относительные координаты точки на картинке? Или мы должны сканировать все изображение рабочего стола пиксель за пикселем в поисках определенного местоположения? Как рисуется картинка на рабочем столе? Является ли это частью прозрачной формы, или вы рисуете ее непосредственно на DC рабочего стола?

3. Это довольно близко к распознаванию шаблона… и красные точки могут быть даже на фоновом изображении

4. @Shekhar_Pro, действительно звучит как задание для OpenCV.

Ответ №1:

В каком-то случае формы используйте:

 this.PointToScreen(new System.Drawing.Point(250, 300));
  

Замените точку точкой (относительно формы), которая вас интересует.

Комментарии:

1. У меня это не сработало, когда окно было вне экрана. смотрите решение ниже.

Ответ №2:

Управление.PointToScreen не будет работать корректно, если ваше окно свернуто, скрыто или находится за пределами экрана. Вам придется перейти вниз, чтобы взаимодействовать с Win32 API:

итак, начните с импорта API:

 [System.Runtime.InteropServices.DllImport("user32.dll")]
static extern bool GetCursorPos(out Point lpPoint);
  

и используйте это:

 Point pts;
GetCursorPos(out pts);
MessageBox.Show(this, pts.ToString());