mirror of
https://github.com/stablyai/orca.git
synced 2026-10-20 00:03:45 +00:00
fix(computer-use): pace modified Windows multiclicks
This commit is contained in:
@@ -24,16 +24,25 @@ describe('computer-use modifier safety', () => {
|
||||
expect(clickInput).not.toContain('down: true')
|
||||
})
|
||||
|
||||
it('submits the complete modified click in one Windows SendInput batch', () => {
|
||||
it('submits each modified Windows click in a closed, timed SendInput batch', () => {
|
||||
const windows = source('native/computer-use-windows/runtime.ps1')
|
||||
const modifiedClick = windows.slice(
|
||||
windows.indexOf('public static void SendModifiedClick'),
|
||||
windows.indexOf('private static INPUT KeyboardInput')
|
||||
)
|
||||
const mouseClick = windows.slice(
|
||||
windows.indexOf('function Send-OrcaMouseClick'),
|
||||
windows.indexOf('function Send-OrcaDrag')
|
||||
)
|
||||
|
||||
expect(modifiedClick).toContain('SendInput((uint)values.Length, values')
|
||||
expect(modifiedClick).toContain('SendInput((uint)releaseValues.Length, releaseValues')
|
||||
expect(modifiedClick).toContain('if (sent != (uint)values.Length)')
|
||||
expect(modifiedClick).not.toContain('int count')
|
||||
expect(mouseClick).toMatch(
|
||||
/for \(\$i = 0; \$i -lt \$clickCount; \$i\+\+\) \{\s+\[OrcaDesktopWin32\]::SendModifiedClick\(/
|
||||
)
|
||||
expect(mouseClick).toContain('if ($i + 1 -lt $clickCount) { Start-Sleep -Milliseconds 35 }')
|
||||
expect(windows).not.toContain('keybd_event')
|
||||
})
|
||||
|
||||
|
||||
@@ -94,7 +94,7 @@ public static class OrcaDesktopWin32 {
|
||||
[DllImport("user32.dll")]
|
||||
public static extern uint SendInput(uint count, INPUT[] inputs, int size);
|
||||
|
||||
public static void SendModifiedClick(byte[] modifiers, uint mouseDown, uint mouseUp, int count) {
|
||||
public static void SendModifiedClick(byte[] modifiers, uint mouseDown, uint mouseUp) {
|
||||
const uint keyboardInput = 1;
|
||||
const uint mouseInput = 0;
|
||||
const uint keyUp = 0x0002;
|
||||
@@ -102,10 +102,8 @@ public static class OrcaDesktopWin32 {
|
||||
foreach (var modifier in modifiers) {
|
||||
inputs.Add(KeyboardInput(keyboardInput, modifier, 0));
|
||||
}
|
||||
for (var index = 0; index < count; index++) {
|
||||
inputs.Add(MouseInput(mouseInput, mouseDown));
|
||||
inputs.Add(MouseInput(mouseInput, mouseUp));
|
||||
}
|
||||
inputs.Add(MouseInput(mouseInput, mouseDown));
|
||||
inputs.Add(MouseInput(mouseInput, mouseUp));
|
||||
for (var index = modifiers.Length - 1; index >= 0; index--) {
|
||||
inputs.Add(KeyboardInput(keyboardInput, modifiers[index], keyUp));
|
||||
}
|
||||
@@ -1016,12 +1014,14 @@ function Send-OrcaMouseClick([IntPtr]$WindowHandle, [int]$ScreenX, [int]$ScreenY
|
||||
}
|
||||
return
|
||||
}
|
||||
[OrcaDesktopWin32]::SendModifiedClick(
|
||||
[byte[]]$modifierKeys,
|
||||
[uint32]$down,
|
||||
[uint32]$up,
|
||||
$clickCount
|
||||
)
|
||||
for ($i = 0; $i -lt $clickCount; $i++) {
|
||||
[OrcaDesktopWin32]::SendModifiedClick(
|
||||
[byte[]]$modifierKeys,
|
||||
[uint32]$down,
|
||||
[uint32]$up
|
||||
)
|
||||
if ($i + 1 -lt $clickCount) { Start-Sleep -Milliseconds 35 }
|
||||
}
|
||||
}
|
||||
|
||||
function Send-OrcaDrag([IntPtr]$WindowHandle, $From, $To) {
|
||||
|
||||
Reference in New Issue
Block a user