Вопрос C# отправить клик в свернутое окно, при этом чтобы окно не разворачивалось.

  • Автор темы Автор темы craizik
  • Дата начала Дата начала
  • Теги Теги
    c##
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
20 Фев 2023
Сообщения
3
Реакции
0
моя функция отправки клика:

моя функция отправки клика::
Expand Collapse Copy
public static void SendLeftClick(IntPtr hWnd, int x, int y)
{
const uint WM_LBUTTONDOWN = 0x0201;
const uint WM_LBUTTONUP = 0x0202;

IntPtr lParam = (IntPtr)((y << 16) | x);

SendMessage(hWnd, WM_LBUTTONDOWN, IntPtr.Zero, lParam);
SendMessage(hWnd, WM_LBUTTONUP, IntPtr.Zero, lParam);
}

Нужно что-то подобное, только чтобы можно было отправить в окно процесса, в кратце я пытаюсь сделать бота в свернутом режиме.
Нужно кликать по определенным координатам. Ещё возможно ли эмулировать нажатие клавишь в свернутое окно? У меня есть функция, но она работает опять же, когда разворачиваешь окно.

Много способов попробовал ничего не получается. Хелп ?

UPD. В ahk есть подобное решение функция ControlSend ((но как вставлять текст в окно/эмулировать нажатие клавишь, не знаю))
 
Не проще использовать запись памяти?
 
Ну во первых что бы ты мог работать в свёрнутом окне тебе как минимум нужно определять это окно с помощью FindWindow
Вот накидал тебе пример эмуляции клавиши в свёрнутом окне

Код:
Expand Collapse Copy
using System;
using System.Runtime.InteropServices;

public class TestEmulationKey
{
    [DllImport("user32.dll")]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName); // ФУнкция про которую я говорил для определения окна

    [DllImport("user32.dll")]
    static extern IntPtr SetForegroundWindow(IntPtr hWnd);

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

    static void Main()
    {
      
        IntPtr hWnd = FindWindow(null, "notepad");

      
        if (hWnd != IntPtr.Zero)
        {
            SetForegroundWindow(hWnd);
            const uint WM_KEYDOWN = 0x100;
            const uint WM_KEYUP = 0x101;
            const int VK_RETURN = 0x0D;
            PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0);
            PostMessage(hWnd, WM_KEYUP, VK_RETURN, 0);
        }
 
    }
}
 
Есть на крестах
C++:
Expand Collapse Copy
PostMessage(GameHandle, WM_LBUTTONDOWN, WM_LBUTTONDOWN, NULL);
Sleep(MOUSE_PRESS_DELAY);
PostMessage(GameHandle, WM_LBUTTONUP, WM_LBUTTONUP, NULL);
 
Ну во первых что бы ты мог работать в свёрнутом окне тебе как минимум нужно определять это окно с помощью FindWindow
Вот накидал тебе пример эмуляции клавиши в свёрнутом окне

Код:
Expand Collapse Copy
using System;
using System.Runtime.InteropServices;

public class TestEmulationKey
{
    [DllImport("user32.dll")]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName); // ФУнкция про которую я говорил для определения окна

    [DllImport("user32.dll")]
    static extern IntPtr SetForegroundWindow(IntPtr hWnd);

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

    static void Main()
    {
     
        IntPtr hWnd = FindWindow(null, "notepad");

     
        if (hWnd != IntPtr.Zero)
        {
            SetForegroundWindow(hWnd);
            const uint WM_KEYDOWN = 0x100;
            const uint WM_KEYUP = 0x101;
            const int VK_RETURN = 0x0D;
            PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0);
            PostMessage(hWnd, WM_KEYUP, VK_RETURN, 0);
        }

    }
}

В свернутом у меня получилось сделать,вот этим способом. Теперь появился вопрос как сделать, чтобы работало в неактивном окне.У меня два монитора и я хочу чтобы на одном была игра, а на втором я занимался своими делами. Эта функция уже не работает при таком сценарии.
 
Назад
Сверху Снизу