private IntPtr KeyboardEventCallback(int nCode, IntPtr wParam, IntPtr lParam) { eKeyboardEvent eKB = (eKeyboardEvent)wParam; if (!(nCode < 0) && (eKB == eKeyboardEvent.KeyDown || eKB == eKeyboardEvent.KeyUp)) { lock (this) { KeyboardEvent kbEvent = (KeyboardEvent)Marshal.PtrToStructure(lParam, typeof(KeyboardEvent)); DateTime cTime = DateTime.Now; int delay = (cTime - delayBegin).Milliseconds; MacroEvent_Delay dEvent = new MacroEvent_Delay(delay); MacroEvent_Keyboard kEvent = new MacroEvent_Keyboard(eKB, kbEvent); if (PopulateInternalEventList) { EventList.Add(dEvent); EventList.Add(kEvent); } if (OnEvent != null) { OnEvent(dEvent); OnEvent(kEvent); } delayBegin = cTime; } } return(WinApi.CallNextHookEx(KeyboardHook, nCode, wParam, lParam)); }
public MacroEvent_Keyboard(eKeyboardEvent _eType, KeyboardEvent _event) { EventType = _eType; Event = _event; uint keyState = Convert.ToUInt32(EventType == eKeyboardEvent.KeyDown ? 0 : 0x2); INPUT keyInput = new INPUT(); keyInput.type = 1; KEYBDINPUT kbInput = new KEYBDINPUT(); kbInput.wVk = Convert.ToUInt16(Event.vKeyCode); kbInput.wScan = Convert.ToUInt16(Event.scanCode); kbInput.dwFlags = keyState; kbInput.time = 0; kbInput.dwExtraInfo = Event.dwExtraInfo; keyInput.iUinion.ki = kbInput; InputList[0] = keyInput; inputSize = Marshal.SizeOf(InputList[0]); }
private void loadAMacroToolStripMenuItem_Click(object sender, EventArgs e) { string filePath = string.Empty; using (OpenFileDialog ofd = new OpenFileDialog()) { ofd.Filter = "Macro File|*.bmr"; if (ofd.ShowDialog() != System.Windows.Forms.DialogResult.OK) { return; } filePath = ofd.FileName; } try { IMacroEvent[] loadedEvents = null; using (FileStream fs = new FileStream(filePath, FileMode.Open)) using (BinaryReader br = new BinaryReader(fs)) { loadedEvents = new IMacroEvent[br.ReadInt32()]; int eventIndex = 0; while (fs.Position != fs.Length) { MacroEventType mType = (MacroEventType)br.ReadByte(); if (mType == MacroEventType.Delay) { loadedEvents[eventIndex] = new MacroEvent_Delay(br.ReadInt32()); } if (mType == MacroEventType.Keyboard) { eKeyboardEvent kbEvent = (eKeyboardEvent)br.ReadInt32(); KeyboardEvent eventData = new KeyboardEvent(); eventData.vKeyCode = br.ReadUInt32(); eventData.scanCode = br.ReadUInt32(); eventData.Flags = br.ReadUInt32(); eventData.Time = 0; eventData.dwExtraInfo = WinApi.GetMessageExtraInfo(); loadedEvents[eventIndex] = new MacroEvent_Keyboard(kbEvent, eventData); } if (mType == MacroEventType.Mouse) { eMouseButton mButton = (eMouseButton)br.ReadInt32(); MouseEvent mEvent = new MouseEvent(); mEvent.mouseData = br.ReadUInt32(); mEvent.Location = new mPoint(); mEvent.Location.X = br.ReadInt32(); mEvent.Location.Y = br.ReadInt32(); mEvent.Flags = br.ReadUInt32(); loadedEvents[eventIndex] = new MacroEvent_Mouse(mEvent, mButton); } eventIndex++; } } ClearCurrent(); foreach (IMacroEvent lEvent in loadedEvents) { AddEvent(lEvent); } MessageBox.Show("Loaded successfully"); } catch { MessageBox.Show("Failed to load macro."); } }