static void SpaceReleaseTimer_Tick(object sender, EventArgs e) { WndTimer timer = (sender as WndTimer); IntPtr wnd = timer.Wnd; if (_spaceSendTime.AddMilliseconds(_spaceHoldTimeMilliseconds) <= DateTime.UtcNow) { _spaceReleaseTimer.Stop(); if (_spaceAddShift) { PressShift(wnd); } if (_spaceAddW) { User32.PostMessage(wnd, User32.WM_KEYDOWN, (IntPtr)CharCode('w'), (UIntPtr)0x00110001); } if (_spaceAddZ) { User32.PostMessage(wnd, User32.WM_KEYDOWN, (IntPtr)CharCode('z'), (UIntPtr)0x002C0001); } if (_spaceAddX) { User32.PostMessage(wnd, User32.WM_KEYDOWN, (IntPtr)CharCode('x'), (UIntPtr)0x002D0001); } if (_spaceAddC) { User32.PostMessage(wnd, User32.WM_KEYDOWN, (IntPtr)CharCode('c'), (UIntPtr)0x002E0001); } User32.PostMessage(wnd, User32.WM_KEYUP, (IntPtr)VK_SPACE, (UIntPtr)0xC0390001); if (_spaceAddW) { User32.PostMessage(wnd, User32.WM_KEYUP, (IntPtr)CharCode('w'), (UIntPtr)0xC0110001); } if (_spaceAddZ) { User32.PostMessage(wnd, User32.WM_KEYUP, (IntPtr)CharCode('z'), (UIntPtr)0xC02C0001); } if (_spaceAddX) { User32.PostMessage(wnd, User32.WM_KEYUP, (IntPtr)CharCode('x'), (UIntPtr)0xC02D0001); } if (_spaceAddC) { User32.PostMessage(wnd, User32.WM_KEYUP, (IntPtr)CharCode('c'), (UIntPtr)0xC02E0001); } if (_spaceAddShift) { ReleaseShift(wnd); } } }
public static void SendSpace(IntPtr wnd, int msToHoldDown = 0, bool addShift = false, bool addW = false, bool addZ = false, bool addX = false, bool addC = false) { User32.PostMessage(wnd, User32.WM_KEYDOWN, (IntPtr)VK_SPACE, (UIntPtr)0x00390001); if (msToHoldDown == 0) { if (addShift) { User32.PostMessage(wnd, User32.WM_KEYDOWN, (IntPtr)VK_SHIFT, (UIntPtr)0x002A0001); } if (addW) { User32.PostMessage(wnd, User32.WM_KEYDOWN, (IntPtr)CharCode('w'), (UIntPtr)0x00110001); } if (addZ) { User32.PostMessage(wnd, User32.WM_KEYDOWN, (IntPtr)CharCode('z'), (UIntPtr)0x002C0001); } if (addX) { User32.PostMessage(wnd, User32.WM_KEYDOWN, (IntPtr)CharCode('x'), (UIntPtr)0x002D0001); } if (addC) { User32.PostMessage(wnd, User32.WM_KEYDOWN, (IntPtr)CharCode('c'), (UIntPtr)0x002E0001); } User32.PostMessage(wnd, User32.WM_KEYUP, (IntPtr)VK_SPACE, (UIntPtr)0xC0390001); if (addW) { User32.PostMessage(wnd, User32.WM_KEYUP, (IntPtr)CharCode('w'), (UIntPtr)0xC0110001); } if (addZ) { User32.PostMessage(wnd, User32.WM_KEYUP, (IntPtr)CharCode('z'), (UIntPtr)0xC02C0001); } if (addX) { User32.PostMessage(wnd, User32.WM_KEYUP, (IntPtr)CharCode('x'), (UIntPtr)0xC02D0001); } if (addC) { User32.PostMessage(wnd, User32.WM_KEYUP, (IntPtr)CharCode('c'), (UIntPtr)0xC02E0001); } if (addShift) { User32.PostMessage(wnd, User32.WM_KEYUP, (IntPtr)VK_SHIFT, (UIntPtr)0xC02A0001); } } else { if (_spaceReleaseTimer == null) { _spaceReleaseTimer = new WndTimer(wnd); _spaceReleaseTimer.Tick += new EventHandler(SpaceReleaseTimer_Tick); _spaceReleaseTimer.Interval = 1; } _spaceSendTime = DateTime.UtcNow; _spaceHoldTimeMilliseconds = msToHoldDown; _spaceAddShift = addShift; _spaceAddW = addW; _spaceAddZ = addZ; _spaceAddX = addX; _spaceAddC = addC; _spaceReleaseTimer.Start(); } }