I'm trying to simulate a mouse click with a joystick button on a powershell form, I already got the hardest part right which is to actually get the joystick buttons working, however mouse clicking isn't woking as I expected. The problem is if I hold the joystick button down, the mouse just keeps clicking very quickly instead of holding the button down...
Here is the code
Add-Type -AssemblyName System.Windows.Forms
Add-Type -Name Event -Namespace Keyboard -MemberDefinition '
[DllImport("user32.dll")]
public static extern bool keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
[DllImport("user32.dll")]
public static extern bool mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
'
Add-Type -Name Window -Namespace Console -MemberDefinition '
[DllImport("winmm.dll")]
public static extern int joyGetPosEx(int uJoyID, ref JOYINFOEX pji);
[StructLayout(LayoutKind.Sequential)]
public struct JOYINFOEX
{
public int dwSize;
public int dwFlags;
public int dwXpos;
public int dwYpos;
public int dwZpos;
public int dwRpos;
public int dwUpos;
public int dwVpos;
public int dwButtons;
public int dwButtonNumber;
public int dwPOV;
public int dwReserved1;
public int dwReserved2;
}
'
####################################################
####################################################
####################################################
####################################################
####################################################
####################################################
$i = 0
$top = 0
$labels = @()
$labels.Clear()
$JOYINFOEX = New-Object -TypeName "Console.Window+JOYINFOEX"
$JOYINFOEX.dwSize = [System.Runtime.InteropServices.Marshal]::SizeOf($JOYINFOEX)
$JOYINFOEX.dwFlags = 255
$JOYID = 0
$BUTTON_STATES = @($false,$false,$false,$false,$false,$false,$false,$false,$false,$false)
$DPAD_STATES = @($false,$false,$false,$false)
$joy_timer = New-Object System.Windows.Forms.Timer
$joy_timer.Enabled = $true
$joy_timer.Interval = 15
$joy_timer.Start()
$form = New-Object System.Windows.Forms.Form
$MOUSEEVENTF_LEFTDOWN = 0x0002
$MOUSEEVENTF_LEFTUP = 0x0004
$MOUSEEVENTF_ABSOLUTE = 0x8000
$joy_timer.add_Tick(
{
############################################################
[Console.Window]::joyGetPosEx($JOYID,[ref]$JOYINFOEX)
if( $JOYINFOEX.dwButtons -gt 511 )
{
$JOYINFOEX.dwButtons -= 512
$BUTTON_STATES[9] = $true
}
else
{
$BUTTON_STATES[9] = $false
}
if( $JOYINFOEX.dwButtons -gt 255 )
{
$JOYINFOEX.dwButtons -= 256
$BUTTON_STATES[8] = $true
}
else
{
$BUTTON_STATES[8] = $false
}
if( $JOYINFOEX.dwButtons -gt 127 )
{
$JOYINFOEX.dwButtons -= 128
$BUTTON_STATES[7] = $true
}
else
{
$BUTTON_STATES[7] = $false
}
if( $JOYINFOEX.dwButtons -gt 63 )
{
$JOYINFOEX.dwButtons -= 64
$BUTTON_STATES[6] = $true
}
else
{
$BUTTON_STATES[6] = $false
}
if( $JOYINFOEX.dwButtons -gt 31 )
{
$JOYINFOEX.dwButtons -= 32
$BUTTON_STATES[5] = $true
}
else
{
$BUTTON_STATES[5] = $false
}
if( $JOYINFOEX.dwButtons -gt 15 )
{
$JOYINFOEX.dwButtons -= 16
$BUTTON_STATES[4] = $true
}
else
{
$BUTTON_STATES[4] = $false
}
if( $JOYINFOEX.dwButtons -gt 7 )
{
$JOYINFOEX.dwButtons -= 8
$BUTTON_STATES[3] = $true
}
else
{
$BUTTON_STATES[3] = $false
}
if( $JOYINFOEX.dwButtons -gt 3 )
{
$JOYINFOEX.dwButtons -= 4
$BUTTON_STATES[2] = $true
}
else
{
$BUTTON_STATES[2] = $false
}
if( $JOYINFOEX.dwButtons -gt 1 )
{
$JOYINFOEX.dwButtons -= 2
$BUTTON_STATES[1] = $true
}
else
{
$BUTTON_STATES[1] = $false
}
if( $JOYINFOEX.dwButtons -gt 0 )
{
$JOYINFOEX.dwButtons -= 1
$BUTTON_STATES[0] = $true
}
else
{
$BUTTON_STATES[0] = $false
}
###########################################
if($JOYINFOEX.dwPOV -eq 65535)
{
$DPAD_STATES[0] = $false
$DPAD_STATES[1] = $false
$DPAD_STATES[2] = $false
$DPAD_STATES[3] = $false
}
if($JOYINFOEX.dwPOV -eq 0)
{
$JOYINFOEX.dwPOV = 0
$DPAD_STATES[0] = $true
$DPAD_STATES[1] = $false
$DPAD_STATES[2] = $false
$DPAD_STATES[3] = $false
}
if($JOYINFOEX.dwPOV -eq 4500)
{
$JOYINFOEX.dwPOV = 45
$DPAD_STATES[0] = $true
$DPAD_STATES[3] = $true
$DPAD_STATES[1] = $false
$DPAD_STATES[2] = $false
}
if($JOYINFOEX.dwPOV -eq 9000)
{
$JOYINFOEX.dwPOV = 90
$DPAD_STATES[3] = $true
$DPAD_STATES[0] = $false
$DPAD_STATES[1] = $false
$DPAD_STATES[2] = $false
}
if($JOYINFOEX.dwPOV -eq 13500)
{
$JOYINFOEX.dwPOV = 135
$DPAD_STATES[1] = $true
$DPAD_STATES[3] = $true
$DPAD_STATES[2] = $false
$DPAD_STATES[0] = $false
}
if($JOYINFOEX.dwPOV -eq 18000)
{
$JOYINFOEX.dwPOV = 180
$DPAD_STATES[1] = $true
$DPAD_STATES[3] = $false
$DPAD_STATES[2] = $false
$DPAD_STATES[0] = $false
}
if($JOYINFOEX.dwPOV -eq 22500)
{
$JOYINFOEX.dwPOV = 225
$DPAD_STATES[1] = $true
$DPAD_STATES[2] = $true
$DPAD_STATES[0] = $false
$DPAD_STATES[3] = $false
}
if($JOYINFOEX.dwPOV -eq 27000)
{
$JOYINFOEX.dwPOV = 270
$DPAD_STATES[2] = $true
$DPAD_STATES[3] = $false
$DPAD_STATES[1] = $false
$DPAD_STATES[0] = $false
}
if($JOYINFOEX.dwPOV -eq 31500)
{
$JOYINFOEX.dwPOV = 315
$DPAD_STATES[0] = $true
$DPAD_STATES[2] = $true
$DPAD_STATES[1] = $false
$DPAD_STATES[3] = $false
}
#################################################
for ($g = 0; $g -lt 10; $g++)
{
$labels[$g].Text = $BUTTON_STATES[$g]
}
############################################################
# Eventos #
############################################################
if(($DPAD_STATES[0] -eq $true))
{
[Keyboard.Event]::keybd_event(0x26, 0x45, 0x1, 0 )
}
else
{
[Keyboard.Event]::keybd_event(0x26, 0x45, 0x2, 0 )
}
if($DPAD_STATES[3] -eq $true)
{
[Keyboard.Event]::keybd_event(0x27, 0x45, 0x1, 0 )
}
else
{
[Keyboard.Event]::keybd_event(0x27, 0x45, 0x2, 0 )
}
if($DPAD_STATES[1] -eq $true)
{
[Keyboard.Event]::keybd_event(0x28, 0x45, 0x1, 0 )
}
else
{
[Keyboard.Event]::keybd_event(0x28, 0x45, 0x2, 0 )
}
if($DPAD_STATES[2] -eq $true)
{
[Keyboard.Event]::keybd_event(0x25, 0x45, 0x1, 0 )
}
else
{
[Keyboard.Event]::keybd_event(0x25, 0x45, 0x2, 0 )
}
if($BUTTON_STATES[0] -eq $true)
{
[Keyboard.Event]::mouse_event(0x00000002, 0, 0, 0, 0)
}
else
{
[Keyboard.Event]::mouse_event(0x00000004, 0, 0, 0, 0)
}
############################################################
# Eventos #
############################################################
})
while($i -lt 10)
{
$labels += New-Object System.Windows.Forms.TextBox
$labels[$i].Top = $top
$labels[$i].Name = "label"+$i
$labels[$i].ReadOnly = $true
$labels[$i].AutoSize = $true
$top += 25
$form.Controls.Add($labels[$i])
$i++
}
$form.ShowDialog()
$joy_timer.Stop()
$joy_timer.Enabled = $false
#cls
Aucun commentaire:
Enregistrer un commentaire