C#/.NET user32.dll

322
10 мая 2017, 06:10

Как получить X и Y мышки из user32.dll ? Вроде бы есть функция GetCursorPos, но я не понял как её использовать.

Результат должен выглядеть, как 2 переменные (напр. mouseX, mouseY).

Спасибо!

Answer 1

Получение координат экрана:

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetCursorPos(out POINT lpPoint);
[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
    public int X;
    public int Y;
    public POINT(int x, int y)
    {
        this.X = x;
        this.Y = y;
    }
}
private void WritePoint(object sender, RoutedEventArgs e)
{
    POINT p;
    if (GetCursorPos(out p))
    {
        System.Console.WriteLine(Convert.ToString(p.X) + ";" + Convert.ToString(p.Y));
    }
}

Конвертирование пикселей в WPF единицы:

[DllImport("User32.dll")]
static extern IntPtr GetDC(IntPtr hwnd);
[DllImport("gdi32.dll")]
static extern int GetDeviceCaps(IntPtr hdc, int nIndex);
[DllImport("user32.dll")]
static extern bool ReleaseDC(IntPtr hWnd, IntPtr hDC);
private Point ConvertPixelsToUnits(int x, int y)
{
    // get the system DPI
    IntPtr dDC = GetDC(IntPtr.Zero); // Get desktop DC
    int dpi = GetDeviceCaps(dDC, 88);
    bool rv = ReleaseDC(IntPtr.Zero, dDC);
    // WPF's physical unit size is calculated by taking the 
    // "Device-Independant Unit Size" (always 1/96)
    // and scaling it by the system DPI
    double physicalUnitSize = (1d / 96d) * (double)dpi;
    Point wpfUnits = new Point(physicalUnitSize * (double)x,
        physicalUnitSize * (double)y);
    return wpfUnits;          
}

Собираем всё вместе:

private void WriteMouseCoordinatesInWPFUnits()
{
    POINT p;
    if (GetCursorPos(out p))
    {
        Point wpfPoint = ConvertPixelsToUnits(p.X, p.Y);
        System.Console.WriteLine(Convert.ToString(wpfPoint.X) + ";" + Convert.ToString(wpfPoint.Y));
    }
}
READ ALSO
Сервер не читает данные

Сервер не читает данные

Есть проект на ардуиноСуть проекта в том, чтобы с кнопки отправлять данные на сервер

299
Как обработать ответ от сервера при завершении php сессии без лишних телодвижений

Как обработать ответ от сервера при завершении php сессии без лишних телодвижений

Подскажите, пожалуйста, универсальный метод, так как на сайте используется ajax валидация

319
cURL не отображает кириллицу

cURL не отображает кириллицу

Получаю с помощью cURL страницу, а она в ответ выводит вот такой html код(смкартинку

512
php - Fatal error: Call to undefined function mysqli_connect()

php - Fatal error: Call to undefined function mysqli_connect()

Ошибка появляется на хостингеВ начале не было, но когда пора сдавать экзамен, она резко не работает

426