-
Notifications
You must be signed in to change notification settings - Fork 1
/
Winuser.cs
76 lines (63 loc) · 1.84 KB
/
Winuser.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
using System.Runtime.InteropServices;
namespace Nacimota.Win32;
internal static class Winuser
{
const short CTRL = 0x11;
const short LWIN = 0x5B;
const short RIGHT = 0x27;
const short LEFT = 0x25;
private static INPUT[] leftChord = { new(CTRL), new(LWIN), new(LEFT), new(LEFT, true), new(LWIN, true), new(CTRL, true) };
private static INPUT[] rightChord = { new(CTRL), new(LWIN), new(RIGHT), new(RIGHT, true), new(LWIN, true), new(CTRL, true) };
[DllImport("user32.dll")]
private static extern uint SendInput(int cInputs, INPUT[] pInputs, int cbSize);
internal static void SendCtrlWinLeft() => SendInput(6, leftChord, INPUT.Size);
internal static void SendCtrlWinRight() => SendInput(6, rightChord, INPUT.Size);
}
[StructLayout(LayoutKind.Sequential)]
internal struct KEYBDINPUT
{
internal short wVk;
internal short wScan;
internal int dwFlags;
internal int time;
internal IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
internal struct MOUSEINPUT
{
internal int dx;
internal int dy;
internal int mouseData;
internal int dwFlags;
internal int time;
internal IntPtr dwExtraInfo;
}
[StructLayout(LayoutKind.Sequential)]
internal struct HARDWAREINPUT
{
internal int uMsg;
internal short wParamL;
internal short wParamH;
}
[StructLayout(LayoutKind.Explicit)]
internal struct InputUnion
{
[FieldOffset(0)]
internal MOUSEINPUT mi;
[FieldOffset(0)]
internal KEYBDINPUT ki;
[FieldOffset(0)]
internal HARDWAREINPUT hi;
}
[StructLayout(LayoutKind.Sequential)]
internal struct INPUT
{
internal uint type = 1;
internal InputUnion u;
internal static int Size => Marshal.SizeOf(typeof(INPUT));
internal INPUT(short virtualKey, bool keyup = false)
{
u.ki.wVk = virtualKey;
u.ki.dwFlags = keyup ? 2 : 0;
}
}