2015-02-10 3 views
0

Я видел много потоков об этом руководстве к SendInput, но в этом случае это не работает.PostMessage mouse click to background window

Я пытаюсь отправить щелчок мыши в определенное место в фоновое окно (игра).

Я могу успешно отправить щелчок мыши в фоновое окно с помощью PostMessage, но мне нужно внешне установить положение мыши для его работы.

[DllImport("user32.dll")] 
static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam); 

const int WM_LBUTTONDOWN = 0x0201; 
const int WM_LBUTTONUP = 0x0202; 

PostMessage(hWnd, WM_LBUTTONDOWN, 1, 0); 
PostMessage(hWnd, WM_LBUTTONUP, 0, 0); 

Я также попытался простирающийся с точки

public int MakeLParam(int LoWord, int HiWord) 
{ 
    return (int)((HiWord << 16) | (LoWord & 0xFFFF)); 
} 

PostMessage(hWnd, WM_LBUTTONDOWN, 1, MakeLParam(pt.X, pt.Y)); 

Но ничто не похоже на работу. Можно ли установить местоположение через PostMessage или мне нужно сделать это извне, затем нажмите, а затем верните курсор в исходное положение?

Любая помощь приветствуется.

+0

Она имеет тенденцию работать, но несчастные случаи довольно распространены. Вы не контролируете состояние клавиатуры (и не можете), чтобы программа могла думать, что вы создали, скажем, Ctrl + Click. И, конечно, вы, возможно, неправильно обрабатываете дескриптор окна, Process.MainWindowHandle не всегда корректен. Используйте Spy ++, которые имеют хороший внешний вид, всегда предпочитают библиотеку автоматизации пользовательского интерфейса. –

ответ

0

pt.X и pt.Y означает положение в hWnd, а не положение на экране.
Потому что остальная часть вашего кода работает очень хорошо.

+0

Ничего страшного, это не исправляет – pnda

0

вам необходимо изменить местоположение точки оп так:

PostMessage(pl, WM_LBUTTONDOWN, 1,MakeLParam(70,20)); 
     PostMessage(pl, WM_LBUTTONUP, 0,MakeLParam(71,21));