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

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

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

("Koordinaten dieses Punktes" = Координаты этой точки)

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

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

Изображение игры в дартс


person user2579436    schedule 22.01.2011    source источник
comment
Как код угадывает, что кто-то нарисовал руку на рабочем столе?   -  person Hans Passant    schedule 22.01.2011
comment
Какого рода информацию мы можем предположить? Я имею в виду, вы знаете относительные координаты точки на картинке? Или нам нужно сканировать все изображение рабочего стола пиксель за пикселем в поисках определенного места? Как рисуется картинка на рабочем столе? Это часть прозрачной формы или вы рисуете ее прямо на DC рабочего стола?   -  person Cody Gray    schedule 22.01.2011
comment
Это довольно близко к распознаванию образов... и красные точки могут быть даже на фоновом изображении.   -  person Shekhar_Pro    schedule 22.01.2011
comment
@Shekhar_Pro действительно звучит как работа для OpenCV.   -  person Blindy    schedule 21.02.2012


Ответы (2)


В некоторых случаях использования формы:

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

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

person Emond Erno    schedule 22.01.2011
comment
Это не сработало для меня, когда окно было вне экрана. см. решение ниже. - person dmihailescu; 19.12.2013

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

поэтому начните с импорта API:

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

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

Point pts;
GetCursorPos(out pts);
MessageBox.Show(this, pts.ToString());
person dmihailescu    schedule 19.12.2013