2011-01-22 2 views
0

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

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

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

EDIT: СРЮ для путаю, то картина выше должна продемонстрировать только мою проблему. Фактическая цель моей программы состоит в том, чтобы переместить мышь с контролируемой мышью руки в дарт-игру в нужное положение, но это невозможно, только установив MouseLocation в точку исправления, потому что каждый поворот дротика дает другой x : y расстояние до MouseLocation. Поэтому мне нужно найти местоположение дротика (-arrow).

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

Picture of the dart game

+2

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

+1

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

+0

Его довольно близко к Pattern Recogition ... и красные точки могут быть даже на фоновом изображении. –

ответ

0

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

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

Замените точку на точку (по отношению к форме) вы заинтересованы в

+0

Это не сработало для меня, когда окно было выключено. см. решение ниже. – dmihailescu

0

Control.PointToScreen выиграл» t работает правильно, если ваше окно минимизировано, скрыто или выключено. Вам придется опуститься до Interop с 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()); 
Смежные вопросы