### Install vmulti driver using devcon Source: https://github.com/kolyn090/vmulti-mice/blob/main/README.md This command installs the vmulti driver using 'devcon.exe'. It requires the 'vmulti.inf' file and a hardware ID. Ensure 'devcon.exe', 'hidkmdf.sys', and 'WdfCoInstaller01009.dll' (or equivalent version) are in the correct directory. ```command-line devcon install vmulti.inf djpnewton\vmulti ``` -------------------------------- ### Build, Sign, and Install vmulti Driver (Batch) Source: https://context7.com/kolyn090/vmulti-mice/llms.txt This batch script automates the process of building the vmulti driver, generating necessary signing artifacts (certificate and PFX), creating a catalog file, signing the catalog, and finally installing the driver on a 64-bit Windows system. It requires the Windows Driver Kit 7.1.0 and administrative privileges for installation. The script assumes a specific directory structure and requires placeholder passwords for signing. ```batch REM Build driver with Windows Driver Kit 7.1.0 cd sys build -wgc REM Navigate to build output cd objfre_win7_amd64\amd64 REM Generate certificate makecert -r -pe -n "CN=VMulti Certificate" -ss My -sr LocalMachine -a sha256 -cy authority -sky signature -sv C:\vmulti.pvk C:\vmulti.cer REM Create PFX for signing pvk2pfx -pvk C:\vmulti.pvk -spc C:\vmulti.cer -pfx C:\vmulti.pfx -po YourPassword REM Create catalog file Inf2Cat.exe /driver:. /os:7_X64,10_X64 REM Sign catalog signtool sign /v /fd SHA256 /f "C:\vmulti.pfx" /p YourPassword /t http://timestamp.digicert.com vmulti.cat REM Install driver (run as Administrator) devcon install vmulti.inf djpnewton\vmulti ``` -------------------------------- ### Build vmulti driver with command line Source: https://github.com/kolyn090/vmulti-mice/blob/main/README.md This command builds the vmulti project driver. It requires the Windows Driver Kit to be installed. The output is typically a folder named 'objfre_win7_amd64' within the 'sys' directory. ```command-line build -wgc ``` -------------------------------- ### Sign vmulti driver catalog file with signtool Source: https://github.com/kolyn090/vmulti-mice/blob/main/README.md This command signs the generated vmulti.cat catalog file, which is necessary for driver installation on 64-bit systems. It requires a PFX certificate file and password. The command uses a timestamping service for the signature. ```command-line signtool sign /v /fd SHA256 /f "C:\vmulti.pfx" /p YourPassword /t http://timestamp.digicert.com vmulti.cat ``` -------------------------------- ### Create PFX file for driver signing Source: https://github.com/kolyn090/vmulti-mice/blob/main/README.md This command converts the .pvk and .cer files into a .pfx file, which is used for signing the driver. It requires the private key password. ```command-line pvk2pfx -pvk C:\vmulti.pvk -spc C:\vmulti.cer -pfx C:\vmulti.pfx -po YourPassword ``` -------------------------------- ### Generate driver catalog file with Inf2Cat Source: https://github.com/kolyn090/vmulti-mice/blob/main/README.md This command generates a catalog file (.cat) for the driver, specifying the target operating systems. It needs to be run from the directory containing the driver's INF file. ```command-line Inf2Cat.exe /driver:. /os:7_X64,10_X64 ``` -------------------------------- ### Python Low-Level Client Interface Source: https://context7.com/kolyn090/vmulti-mice/llms.txt Direct ctypes wrapper around the C library providing granular control over the vmulti client lifecycle, including creation, connection, and input simulation. ```APIDOC ## Python Low-Level Client Interface ### Description Direct ctypes wrapper around the C library providing granular control over the vmulti client lifecycle. ### Method `Mouse_C.create_client()` `Mouse_C.click(client, x, y, touch_width=10, touch_height=10, press_duration=0.5)` `Mouse_C.vmulti_disconnect(client)` `Mouse_C.vmulti_free(client)` `Mouse_C.vmulti_alloc()` `Mouse_C.vmulti_connect(client)` ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```python from mouse_c import Mouse_C mouse_c = Mouse_C(dll_path='../DLL/mice.dll') vmulti_client = mouse_c.create_client() if vmulti_client: mouse_c.click(vmulti_client, 300, 300, touch_width=10, touch_height=10, press_duration=0.5) mouse_c.vmulti_disconnect(vmulti_client) mouse_c.vmulti_free(vmulti_client) client = mouse_c.vmulti_alloc() if mouse_c.vmulti_connect(client): mouse_c.click(client, 400, 500) mouse_c.vmulti_disconnect(client) mouse_c.vmulti_free(client) ``` ### Response #### Success Response (200) None (This is a function call, not an HTTP response) #### Response Example None ``` -------------------------------- ### vmulti_connect - Connect to Driver Source: https://context7.com/kolyn090/vmulti-mice/llms.txt Establishes connection to the vmulti HID driver by searching for matching hardware IDs in C. ```APIDOC ## vmulti_connect - Connect to Driver ### Description Establishes connection to the vmulti HID driver by searching for matching hardware IDs. ### Method `BOOL vmulti_connect(pvmulti_client vmulti)` ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```c #include "vmulticlient.h" pvmulti_client vmulti = vmulti_alloc(); if (!vmulti_connect(vmulti)) { printf("Failed to connect to vmulti driver\n"); vmulti_free(vmulti); return 1; } ``` ### Response #### Success Response (200) - **Return Value** (BOOL) - TRUE if the connection was successful, FALSE otherwise. #### Response Example None ``` -------------------------------- ### vmulti_alloc - Allocate Client Source: https://context7.com/kolyn090/vmulti-mice/llms.txt Allocates memory for a new vmulti client instance in C. ```APIDOC ## vmulti_alloc - Allocate Client ### Description Allocates memory for a new vmulti client instance. ### Method `pvmulti_client vmulti_alloc()` ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```c #include "vmulticlient.h" pvmulti_client vmulti = vmulti_alloc(); if (vmulti == NULL) { printf("Failed to allocate vmulti client\n"); return 1; } ``` ### Response #### Success Response (200) - **vmulti** (pvmulti_client) - Pointer to the newly allocated vmulti client structure. #### Response Example None ``` -------------------------------- ### Generate self-signed certificate for vmulti driver Source: https://github.com/kolyn090/vmulti-mice/blob/main/README.md This command generates a self-signed root certificate for driver signing. It creates a .cer file and a .pvk file, which are then used to create a .pfx file for signing. ```command-line makecert -r -pe -n "CN=VMulti Certificate" -ss My -sr LocalMachine -a sha256 -cy authority -sky signature -sv C:\vmulti.pvk C:\vmulti.cer ``` -------------------------------- ### Python Low-Level Client for vmulti Source: https://context7.com/kolyn090/vmulti-mice/llms.txt Offers a direct ctypes wrapper for the C library, enabling granular control over the vmulti client lifecycle. This interface allows for creating, connecting, performing actions like clicks, and disconnecting the vmulti client. It requires the 'mouse_c' library and a path to the vmulti DLL. ```python from mouse_c import Mouse_C # Create client and perform click mouse_c = Mouse_C(dll_path='../DLL/mice.dll') vmulti_client = mouse_c.create_client() if vmulti_client: # Click at (300, 300) with 10x10 touch area for 0.5 seconds mouse_c.click(vmulti_client, 300, 300, touch_width=10, touch_height=10, press_duration=0.5) # Cleanup mouse_c.vmulti_disconnect(vmulti_client) mouse_c.vmulti_free(vmulti_client) else: print("Failed to create vmulti client") # Alternative: manual allocation and connection client = mouse_c.vmulti_alloc() if mouse_c.vmulti_connect(client): mouse_c.click(client, 400, 500) mouse_c.vmulti_disconnect(client) mouse_c.vmulti_free(client) ``` -------------------------------- ### C: Allocate vmulti Client Source: https://context7.com/kolyn090/vmulti-mice/llms.txt This C function allocates memory for a new vmulti client instance. It is a foundational step before connecting to the vmulti HID driver. The function returns a pointer to the allocated client structure or NULL if allocation fails. ```c #include "vmulticlient.h" pvmulti_client vmulti = vmulti_alloc(); if (vmulti == NULL) { printf("Failed to allocate vmulti client\n"); return 1; } ``` -------------------------------- ### C: Connect to vmulti Driver Source: https://context7.com/kolyn090/vmulti-mice/llms.txt Establishes a connection to the vmulti HID driver by searching for matching hardware IDs. This function should be called after allocating a vmulti client. If the connection fails, the client should be freed. ```c #include "vmulticlient.h" pvmulti_client vmulti = vmulti_alloc(); if (!vmulti_connect(vmulti)) { printf("Failed to connect to vmulti driver\n"); vmulti_free(vmulti); return 1; } ``` -------------------------------- ### Python Mouse Click Simulation Source: https://context7.com/kolyn090/vmulti-mice/llms.txt Provides a high-level Python interface for simulating multitouch mouse clicks at specific screen coordinates without moving the system cursor. It supports both context manager and manual lifecycle management for the Mouse object. Dependencies include the 'mouse' library and potentially a DLL path to the vmulti driver. ```python from mouse import Mouse # Context manager approach (recommended) with Mouse() as m: # Click at screen coordinates (300, 300) # Uses default touch dimensions 10x10 and 0.5s press duration m.click(300, 300) # Custom touch parameters m.click(500, 400, touch_width=20, touch_height=20, press_duration=1.0) # Manual lifecycle management mouse = Mouse(dll_path='../DLL/mice.dll') mouse.click(300, 300) mouse.free() # Must call to avoid memory leaks ``` -------------------------------- ### Simulate Virtual Joystick with vmulti_update_joystick Source: https://context7.com/kolyn090/vmulti-mice/llms.txt Sends joystick axis positions and button states for game controller simulation. Supports analog sticks, D-pad, and buttons. Parameters include button states, hat switch position, and X/Y/RX/RY/throttle values. ```c #include "vmulticlient.h" pvmulti_client vmulti = vmulti_alloc(); vmulti_connect(vmulti); USHORT buttons = 0x0001; // Button 1 pressed BYTE hat = 0; // D-pad centered BYTE x = 128; // Left stick X (centered) BYTE y = 128; // Left stick Y (centered) BYTE rx = 255; // Right stick X (full right) BYTE ry = 0; // Right stick Y (full up) BYTE throttle = 128; // Throttle centered vmulti_update_joystick(vmulti, buttons, hat, x, y, rx, ry, throttle); Sleep(100); // Press multiple buttons buttons = 0x0003; // Buttons 1 and 2 vmulti_update_joystick(vmulti, buttons, hat, x, y, rx, ry, throttle); vmulti_disconnect(vmulti); vmulti_free(vmulti); ``` -------------------------------- ### Python Mouse Click Interface Source: https://context7.com/kolyn090/vmulti-mice/llms.txt High-level Python interface for clicking screen coordinates without moving the system cursor by simulating multitouch input. Supports context manager and manual lifecycle management. ```APIDOC ## Python Mouse Click Interface ### Description High-level Python interface for clicking screen coordinates without moving the system cursor by simulating multitouch input. ### Method `Mouse.click(x, y, touch_width=10, touch_height=10, press_duration=0.5)` ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```python from mouse import Mouse # Context manager approach with Mouse() as m: m.click(300, 300) m.click(500, 400, touch_width=20, touch_height=20, press_duration=1.0) # Manual lifecycle management mouse = Mouse(dll_path='../DLL/mice.dll') mouse.click(300, 300) mouse.free() ``` ### Response #### Success Response (200) None (This is a function call, not an HTTP response) #### Response Example None ``` -------------------------------- ### Simulate Digitizer/Stylus Input with vmulti_update_digi Source: https://context7.com/kolyn090/vmulti-mice/llms.txt Sends digitizer pen/stylus position and state for drawing tablet simulation. Supports hover, tip-down, and movement events. The function takes status flags, X, and Y coordinates. Proper client connection and disconnection are necessary. ```c #include "vmulticlient.h" pvmulti_client vmulti = vmulti_alloc(); vmulti_connect(vmulti); // Hover pen at position vmulti_update_digi(vmulti, DIGI_IN_RANGE_BIT, 1000, 10000); Sleep(100); // Pen tip touches screen vmulti_update_digi(vmulti, DIGI_IN_RANGE_BIT | DIGI_TIPSWITCH_BIT, 1000, 12000); Sleep(100); // Draw line by moving with tip down vmulti_update_digi(vmulti, DIGI_IN_RANGE_BIT | DIGI_TIPSWITCH_BIT, 2000, 14000); Sleep(100); // Lift pen vmulti_update_digi(vmulti, DIGI_IN_RANGE_BIT, 2000, 14000); vmulti_disconnect(vmulti); vmulti_free(vmulti); ``` -------------------------------- ### vmulti_update_relative_mouse - Relative Mouse Movement Source: https://context7.com/kolyn090/vmulti-mice/llms.txt Sends relative mouse movement deltas and button state in C. ```APIDOC ## vmulti_update_relative_mouse - Relative Mouse Movement ### Description Sends relative mouse movement deltas and button state. ### Method `vmulti_update_relative_mouse(pvmulti_client vmulti, USHORT button_state, LONG dx, LONG dy, ULONG flags)` ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```c #include "vmulticlient.h" pvmulti_client vmulti = vmulti_alloc(); vmulti_connect(vmulti); // Move mouse 10 pixels right and 5 pixels down vmulti_update_relative_mouse(vmulti, 0, 10, 5, 0); // Right click with relative movement vmulti_update_relative_mouse(vmulti, MOUSE_BUTTON_2, 0, 0, 0); vmulti_disconnect(vmulti); vmulti_free(vmulti); ``` ### Response #### Success Response (200) None #### Response Example None ``` -------------------------------- ### Send and Receive Vendor Messages with vmulti_write_message / vmulti_read_message Source: https://context7.com/kolyn090/vmulti-mice/llms.txt Allows sending and receiving custom vendor-defined messages through the HID message channel. The `vmulti_write_message` function sends a message report, and `vmulti_read_message` attempts to read a response. Ensure proper initialization and cleanup of the client connection. ```c #include "vmulticlient.h" pvmulti_client vmulti = vmulti_alloc(); vmulti_connect(vmulti); VMultiMessageReport report; memcpy(report.Message, "Hello VMulti\x00", 13); // Write message to driver if (vmulti_write_message(vmulti, &report)) { printf("Message sent successfully\n"); // Read response from driver memset(&report, 0, sizeof(report)); if (vmulti_read_message(vmulti, &report)) { printf("Response: %s\n", report.Message); } } vmulti_disconnect(vmulti); vmulti_free(vmulti); ``` -------------------------------- ### Simulate Multitouch Gestures with vmulti_update_multitouch Source: https://context7.com/kolyn090/vmulti-mice/llms.txt Sends multitouch reports to simulate simultaneous touch points for gestures like clicks. Requires at least two touch points for multitouch recognition. Coordinates are normalized values between 0 and 32767. Ensure proper resource management by freeing allocated memory and disconnecting the client. ```c #include "vmulticlient.h" pvmulti_client vmulti = vmulti_alloc(); vmulti_connect(vmulti); // Create two touch points for multitouch click PTOUCH pTouch = (PTOUCH)malloc(2 * sizeof(TOUCH)); // Configure first touch point pTouch[0].ContactID = 0; pTouch[0].Status = MULTI_CONFIDENCE_BIT | MULTI_IN_RANGE_BIT | MULTI_TIPSWITCH_BIT; pTouch[0].XValue = 5000; // Normalized coordinate (0-32767) pTouch[0].YValue = 10000; pTouch[0].Width = 10; pTouch[0].Height = 10; // Second touch point (required for multitouch recognition) pTouch[1] = pTouch[0]; pTouch[1].ContactID = 1; // Send touch down if (!vmulti_update_multitouch(vmulti, pTouch, 2)) printf("Touch down failed\n"); Sleep(500); // Send touch up (release) pTouch[0].Status = 0; pTouch[1].Status = 0; vmulti_update_multitouch(vmulti, pTouch, 2); free(pTouch); vmulti_disconnect(vmulti); vmulti_free(vmulti); ``` -------------------------------- ### Simulate Keyboard Input with vmulti_update_keyboard Source: https://context7.com/kolyn090/vmulti-mice/llms.txt Sends keyboard key press events, including support for modifier keys like Shift and GUI (Windows key). Uses USB HID key codes for character representation. Ensure correct handling of key states (press/release) and modifier combinations. ```c #include "vmulticlient.h" pvmulti_client vmulti = vmulti_alloc(); vmulti_connect(vmulti); BYTE shiftKeys = 0; BYTE keyCodes[KBD_KEY_CODES] = {0, 0, 0, 0, 0, 0}; // Press Windows key shiftKeys = KBD_LGUI_BIT; vmulti_update_keyboard(vmulti, shiftKeys, keyCodes); shiftKeys = 0; vmulti_update_keyboard(vmulti, shiftKeys, keyCodes); Sleep(100); // Type 'H' with shift shiftKeys = KBD_LSHIFT_BIT; keyCodes[0] = 0x0b; // USB HID key code for 'h' vmulti_update_keyboard(vmulti, shiftKeys, keyCodes); // Type 'e' without shift shiftKeys = 0; keyCodes[0] = 0x08; // USB HID key code for 'e' vmulti_update_keyboard(vmulti, shiftKeys, keyCodes); // Release keys keyCodes[0] = 0; vmulti_update_keyboard(vmulti, shiftKeys, keyCodes); vmulti_disconnect(vmulti); vmulti_free(vmulti); ``` -------------------------------- ### vmulti_update_mouse - Absolute Mouse Position Source: https://context7.com/kolyn090/vmulti-mice/llms.txt Sends absolute mouse position and button state to the virtual mouse device in C. ```APIDOC ## vmulti_update_mouse - Absolute Mouse Position ### Description Sends absolute mouse position and button state to the virtual mouse device. ### Method `vmulti_update_mouse(pvmulti_client vmulti, USHORT button_state, LONG x, LONG y, ULONG flags)` ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```c #include "vmulticlient.h" pvmulti_client vmulti = vmulti_alloc(); vmulti_connect(vmulti); // Click at absolute position (1000, 10000) with left button vmulti_update_mouse(vmulti, MOUSE_BUTTON_1, 1000, 10000, 0); Sleep(100); // Release button vmulti_update_mouse(vmulti, 0, 1000, 10000, 0); vmulti_disconnect(vmulti); vmulti_free(vmulti); ``` ### Response #### Success Response (200) None #### Response Example None ``` -------------------------------- ### C: Update Relative Mouse Movement Source: https://context7.com/kolyn090/vmulti-mice/llms.txt Sends relative mouse movement deltas and button state to the virtual mouse device. This function is used for simulating mouse movements as offsets from the current position, as well as simulating clicks. It requires an active connection to the vmulti driver. ```c #include "vmulticlient.h" pvmulti_client vmulti = vmulti_alloc(); vmulti_connect(vmulti); // Move mouse 10 pixels right and 5 pixels down vmulti_update_relative_mouse(vmulti, 0, 10, 5, 0); // Right click with relative movement vmulti_update_relative_mouse(vmulti, MOUSE_BUTTON_2, 0, 0, 0); vmulti_disconnect(vmulti); vmulti_free(vmulti); ``` -------------------------------- ### vmulti_disconnect - Disconnect from Driver Source: https://context7.com/kolyn090/vmulti-mice/llms.txt Closes handles to the vmulti HID devices in C. ```APIDOC ## vmulti_disconnect - Disconnect from Driver ### Description Closes handles to the vmulti HID devices. ### Method `vmulti_disconnect(pvmulti_client vmulti)` ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example ```c vmulti_disconnect(vmulti); vmulti_free(vmulti); ``` ### Response #### Success Response (200) None #### Response Example None ``` -------------------------------- ### C: Update Absolute Mouse Position Source: https://context7.com/kolyn090/vmulti-mice/llms.txt Sends absolute mouse position and button state to the virtual mouse device. This function allows for precise cursor placement and simulates mouse button presses and releases. It requires an active connection to the vmulti driver. ```c #include "vmulticlient.h" pvmulti_client vmulti = vmulti_alloc(); vmulti_connect(vmulti); // Click at absolute position (1000, 10000) with left button vmulti_update_mouse(vmulti, MOUSE_BUTTON_1, 1000, 10000, 0); Sleep(100); // Release button vmulti_update_mouse(vmulti, 0, 1000, 10000, 0); vmulti_disconnect(vmulti); vmulti_free(vmulti); ``` -------------------------------- ### C: Disconnect from vmulti Driver Source: https://context7.com/kolyn090/vmulti-mice/llms.txt Closes handles to the vmulti HID devices and frees associated resources. This function should be called to properly clean up after using the vmulti client. It's typically paired with `vmulti_free`. ```c vmulti_disconnect(vmulti); vmulti_free(vmulti); ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.