Domanda Programma clicker

NoSte

Utente Iron
4 Aprile 2021
6
2
5
15
Ciao, ho bisogno di un programma che lavori in background, che permetta di raddoppiare i click del mouse, ovvero ad ogni click fatto con il mouse ne viene fatto automaticamente un altro. Leggendo su internet, ho trovato diversi esempi, tutti molto diversi tra loro. Essendo un neofita, come consigliate di procedere? In breve vorrei capire come intercettare gli eventi del mouse mentre il programma è in background.
 
Potrei essere OffTopic, ma Python lo mastichi? Perché in tal caso con selenium puoi effettuare milioni di click al secondo e le righe di codice sono contate sulle dita di una mano.

Che cosa vorresti cliccare?
 
Ciao, ho bisogno di un programma che lavori in background, che permetta di raddoppiare i click del mouse, ovvero ad ogni click fatto con il mouse ne viene fatto automaticamente un altro. Leggendo su internet, ho trovato diversi esempi, tutti molto diversi tra loro. Essendo un neofita, come consigliate di procedere? In breve vorrei capire come intercettare gli eventi del mouse mentre il programma è in background.

Se il tuo obiettivo e' raddoppiare ogni click del mouse a prescindere, un metodo potrebbe essere usare l'API SetWindowsHookEx con id WH_MOUSE_LL per poter registrare una callback che viene eseguita ogni qualvolta si verifichi un evento del mouse. Anzi potrebbe essere particolarmente comodo come metodo, non l'ho mai provato ma potrebbe anche fare subito quello che vuoi chiamando semplicemente due volte CallNextHookEx nella tua MouseProc callback. Occhio a raddoppiare la chiamata solo in caso l'evento e' di tipo click, altrimenti i movimenti andranno fuori controllo!

Visto che siamo nella categoria .NET allego le funzioni P/Invoke che ti serve inserire nel tuo codice per chiamare l'API nativa:

C#:
using System.Runtime.InteropServices;

//...

public enum HookType : int
{
    WH_JOURNALRECORD = 0, 
    WH_JOURNALPLAYBACK = 1,
    WH_KEYBOARD = 2,
    WH_GETMESSAGE = 3,
    WH_CALLWNDPROC = 4,
    WH_CBT = 5,
    WH_SYSMSGFILTER = 6,
    WH_MOUSE = 7,
    WH_HARDWARE = 8,
    WH_DEBUG = 9,
    WH_SHELL = 10,
    WH_FOREGROUNDIDLE = 11,
    WH_CALLWNDPROCRET = 12,
    WH_KEYBOARD_LL = 13,
    WH_MOUSE_LL = 14
}

[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
   public int X;
   public int Y;
}

[StructLayout(LayoutKind.Sequential)]
public struct MSLLHOOKSTRUCT
{
   public POINT pt;
   public int mouseData;
   public int flags;
   public int time;
   public UIntPtr dwExtraInfo;
}

delegate IntPtr HookProc(int code, IntPtr wParam, IntPtr lParam);

[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr SetWindowsHookEx(HookType hookType, HookProc lpfn, IntPtr hMod, uint dwThreadId);

[DllImport("user32.dll", SetLastError = true)]
static extern bool UnhookWindowsHookEx(IntPtr hhk);

[DllImport("user32.dll")]
static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, WM wParam, [In]MSLLHOOKSTRUCT lParam);