public Sequence_t LoadSequence(string name) { m_cmd.CommandText = "SELECT SA.type, SA.value, SA.duration, SA.keybind FROM Sequences S JOIN SequenceAction SA ON SA.sequence = S.id WHERE S.name=@name"; m_cmd.Parameters.AddWithValue("@name", name); m_cmd.Prepare(); SQLiteDataReader rdr = m_cmd.ExecuteReader(); List <Action_t> actions = new List <Action_t>(); while (rdr.Read()) { Action_t act = new Action_t(rdr.GetString(0), rdr.GetString(1), rdr.GetInt32(2)); try { int keybind = rdr.GetInt32(3); Keybind_t kb = LoadKeyBind(keybind); kb.readable = rdr.GetString(1); act.keybind = kb; } catch (InvalidCastException) { } actions.Add(act); } rdr.Close(); Sequence_t seqs = new Sequence_t(actions); return(seqs); }
private void process1_toggle_key_check_changed(object sender, EventArgs e) { if (process_1_toggle_key_checkbox.Checked == true) { if (backgroundWorker2.IsBusy == true) { return; } backgroundWorker2.RunWorkerAsync(); process1_toggle_key_button.Enabled = true; } else { if (backgroundWorker2.WorkerSupportsCancellation == false) { return; } backgroundWorker2.CancelAsync(); m_toggle = null; process1_toggle_key.Text = "N/A"; process1_toggle_key_button.Enabled = false; m_db.SaveToggle(m_toggle); } }
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex != 1) { return; } string type = (string)dataGridView1.Rows[e.RowIndex].Cells[0].Value; if (type != "Spam" && type != "Toggle" && type != "Press" && type != "Release") { return; } Keyfinder key_search = new Keyfinder(this.TopMost); key_search.ShowDialog(); KeyEventArgs key = key_search.m_key; string key_readable = key_search.m_key_readable; if (key == null) { return; } Keybind_t obj = new Keybind_t(); obj.m_key = new Keycombo_t(key); obj.readable = key_readable; DataGridViewTextBoxCell cell = (DataGridViewTextBoxCell)dataGridView1.Rows[e.RowIndex].Cells[1]; cell.Value = obj; }
public Form1() { this.FormBorderStyle = FormBorderStyle.FixedDialog; this.StartPosition = FormStartPosition.CenterScreen; this.MinimizeBox = false; this.MaximizeBox = false; m_pid = 0; m_toggle = null; InitializeComponent(); this.KeyPreview = true; backgroundWorker1.WorkerSupportsCancellation = true; backgroundWorker2.WorkerSupportsCancellation = true; DataGridViewComboBoxColumn combo = new DataGridViewComboBoxColumn(); combo.HeaderText = "Type"; combo.Items.AddRange("Delay", "Spam", "Toggle", "Write", "Loop", "Press", "Release", "Stop"); dataGridView1.Columns.Add(combo); dataGridView1.Columns.Add("Value", "Value"); dataGridView1.Columns.Add("Duration", "Duration"); dataGridView1.RowHeadersWidth = 15; dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(dataGridView1_CellValueChanged); dataGridView1.CurrentCellDirtyStateChanged += new EventHandler(dataGridView1_CurrentCellDirtyStateChanged); m_db = new Database(); m_db.SetDatabase("URI=file:context.db"); m_db.OpenDatabase(); foreach (DataGridViewColumn column in dataGridView1.Columns) { column.SortMode = DataGridViewColumnSortMode.NotSortable; } UpdateSavesList(); m_toggle = m_db.LoadToggle(); if (m_toggle != null) { process_1_toggle_key_checkbox.Checked = true; process1_toggle_key.Text = m_toggle.readable; process1_toggle_key_button.Enabled = true; if (backgroundWorker2.IsBusy == true) { return; } backgroundWorker2.RunWorkerAsync(); } }
private void toggle_thread(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; if (m_toggle == null) { while (m_toggle == null) { Thread.Sleep(50); if (worker.CancellationPending == true) { e.Cancel = true; return; } } } while (true) { Keybind_t toggle = m_toggle; if (worker.CancellationPending == true) { e.Cancel = true; return; } Thread.Sleep(1); if (toggle == null) { continue; } if (!IsKeyComboPushedDown(toggle)) { continue; } toggle_background_thread(); while (IsKeyPushedDown(toggle.m_key.KeyCode)) { Thread.Sleep(1); } ; } }
public void SaveToggle(Keybind_t key) { m_cmd.CommandText = "UPDATE GenericActionKeys SET keybind=@keybind, desc=@desc WHERE name = 'toggle'"; if (key == null) { m_cmd.Parameters.AddWithValue("@keybind", key); m_cmd.Parameters.AddWithValue("@desc", "N/A"); m_cmd.Prepare(); m_cmd.ExecuteNonQuery(); return; } int id = SaveKeyBind(key); m_cmd.Parameters.AddWithValue("@keybind", id); m_cmd.Parameters.AddWithValue("@desc", key.readable); m_cmd.Prepare(); m_cmd.ExecuteNonQuery(); }
public bool IsKeyComboPushedDown(Keybind_t vkey) { if ((vkey.m_key.Shift && !IsKeyPushedDown(Keys.ShiftKey)) || (!vkey.m_key.Shift && IsKeyPushedDown(Keys.ShiftKey))) { return(false); } if (vkey.m_key.Control && !IsKeyPushedDown(Keys.ControlKey) || (!vkey.m_key.Control && IsKeyPushedDown(Keys.ControlKey))) { return(false); } if (vkey.m_key.Alt && !IsKeyPushedDown(Keys.Menu) || (!vkey.m_key.Alt && IsKeyPushedDown(Keys.Menu))) { return(false); } if (!IsKeyPushedDown(vkey.m_key.KeyCode)) { return(false); } return(true); }
private int SaveKeyBind(Keybind_t keybind) { Keycombo_t key = keybind.m_key; SQLiteCommand lcmd = new SQLiteCommand(m_db); try { lcmd.CommandText = "INSERT INTO ActionKey (keycode, shift, control, alt) VALUES (@keycode, @shift, @control, @alt)"; lcmd.Parameters.AddWithValue("@keycode", (int)key.KeyCode); lcmd.Parameters.AddWithValue("@shift", key.Shift ? 1 : 0); lcmd.Parameters.AddWithValue("@control", key.Control ? 1 : 0); lcmd.Parameters.AddWithValue("@alt", key.Alt ? 1 : 0); lcmd.Prepare(); lcmd.ExecuteNonQuery(); } catch { } lcmd.CommandText = "SELECT id FROM ActionKey WHERE keycode=@keycode AND shift=@shift AND control=@control AND alt=@alt"; lcmd.Prepare(); return(Convert.ToInt32(lcmd.ExecuteScalar().ToString())); }
private Keybind_t LoadKeyBind(int id) { SQLiteCommand lcmd = new SQLiteCommand(m_db); lcmd.CommandText = "SELECT keycode, shift, control, alt FROM ActionKey WHERE id=@id"; lcmd.Parameters.AddWithValue("@id", id); lcmd.Prepare(); SQLiteDataReader rdr = lcmd.ExecuteReader(); Keybind_t kb = new Keybind_t(); kb.m_key = new Keycombo_t(); while (rdr.Read()) { kb.m_key.KeyCode = (Keys)rdr.GetInt32(0); kb.m_key.Shift = rdr.GetInt32(1) == 1; kb.m_key.Control = rdr.GetInt32(2) == 1; kb.m_key.Alt = rdr.GetInt32(3) == 1; } rdr.Close(); return(kb); }
public Keybind_t LoadToggle() { m_cmd.CommandText = "SELECT desc, keybind FROM GenericActionKeys WHERE name = 'toggle'"; Keybind_t kb = null; SQLiteDataReader rdr = m_cmd.ExecuteReader(); while (rdr.Read()) { try { string desc = rdr.GetString(0); int keybind = rdr.GetInt32(1); kb = LoadKeyBind(keybind); kb.readable = desc; } catch { } } rdr.Close(); return(kb); }
private void process1_toggle_key_button_Click(object sender, EventArgs e) { Keyfinder key_search = new Keyfinder(this.TopMost); key_search.ShowDialog(); KeyEventArgs key = key_search.m_key; string key_readable = key_search.m_key_readable; if (key == null) { return; } Keybind_t obj = new Keybind_t(); obj.m_key = new Keycombo_t(key); obj.readable = key_readable; m_toggle = obj; m_db.SaveToggle(m_toggle); process1_toggle_key.Text = key_readable; }
private void background_thread(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; List <LoopLocation_t> loops = new List <LoopLocation_t>(); Process proc; try { proc = Process.GetProcessById(m_pid); } catch (Exception except) { process1_pid.BeginInvoke((MethodInvoker) delegate() { process1_pid.Text = "Process PID: N/A"; }); m_pid = 0; button1.BeginInvoke((MethodInvoker) delegate() { button1.Text = "Start"; button1.Enabled = false; }); MessageBox.Show(except.Message, "Error", MessageBoxButtons.OK); e.Cancel = true; return; } try { while (true) { if (worker.CancellationPending == true) { e.Cancel = true; return; } for (int i = 0; i < dataGridView1.Rows.Count; i++) { DataGridViewRow row = dataGridView1.Rows[i]; if (dataGridView1.Rows.Count <= 1) { Thread.Sleep(1); } if (row == null) { continue; } if (row.Cells[0] == null || row.Cells[2] == null) { continue; } if (row.Cells[0].Value == null || row.Cells[2].Value == null) { continue; } row.Selected = true; string type = row.Cells[0].Value.ToString(); decimal duration; bool ret = Decimal.TryParse(row.Cells[2].Value.ToString(), out duration); if ((!ret) && type != "Stop") { row.Selected = false; continue; } if (type == "Spam") { if (row.Cells[1] == null || row.Cells[1].Value == null) { row.Selected = false; continue; } Keybind_t obj = (Keybind_t)row.Cells[1].Value; duration = duration / 1000; DateTime now = DateTime.UtcNow; DateTime end = now.AddSeconds(decimal.ToDouble(duration)); while (now < end) { ToggleKey(proc, obj.m_key); if (worker.CancellationPending == true) { e.Cancel = true; return; } now = DateTime.UtcNow; } } else if (type == "Toggle") { if (row.Cells[1] == null || row.Cells[1].Value == null) { row.Selected = false; continue; } Keybind_t obj = (Keybind_t)row.Cells[1].Value; ToggleKey(proc, obj.m_key); } else if (type == "Press") { if (row.Cells[1] == null || row.Cells[1].Value == null) { row.Selected = false; continue; } Keybind_t obj = (Keybind_t)row.Cells[1].Value; PressKey(proc, obj.m_key); } else if (type == "Release") { if (row.Cells[1] == null || row.Cells[1].Value == null) { row.Selected = false; continue; } Keybind_t obj = (Keybind_t)row.Cells[1].Value; ReleaseKey(proc, obj.m_key); } else if (type == "Delay") { duration = duration / 1000; DateTime now = DateTime.UtcNow; DateTime end = now.AddSeconds(decimal.ToDouble(duration)); while (now < end) { Thread.Sleep(1); if (worker.CancellationPending == true) { e.Cancel = true; return; } now = DateTime.UtcNow; } } else if (type == "Write") { if (row.Cells[1] == null || row.Cells[1].Value == null) { row.Selected = false; continue; } string value = row.Cells[1].Value.ToString(); int per_char = decimal.ToInt32(duration / value.Length); ToggleKey(proc, new Keycombo_t(Keys.Enter)); foreach (char key in value) { short vkKeyCode = VkKeyScanExW(key, InputLanguage.CurrentInputLanguage.Handle); if ((vkKeyCode & 0xFF00) != 0) { PostMessage(proc.MainWindowHandle, WM_KEYDOWN, (int)Keys.ShiftKey, 0); } PostMessage(proc.MainWindowHandle, WM_KEYDOWN, (int)vkKeyCode, 0); Thread.Sleep(1); PostMessage(proc.MainWindowHandle, WM_KEYUP, (int)vkKeyCode, 0); if ((vkKeyCode & 0xFF00) != 0) { PostMessage(proc.MainWindowHandle, WM_KEYUP, (int)Keys.ShiftKey, 0); } if (per_char > 0) { Thread.Sleep(per_char); } if (worker.CancellationPending == true) { e.Cancel = true; return; } } if (per_char <= 0) { Thread.Sleep(per_char); } ToggleKey(proc, new Keycombo_t(Keys.Enter)); } else if (type == "Loop") { if (row.Cells[1] == null || row.Cells[1].Value == null) { row.Selected = false; continue; } LoopLocation_t entry = new LoopLocation_t(); entry.Start_location = row.Index; int tmp; bool retval = Int32.TryParse(row.Cells[1].Value.ToString(), out tmp); if (!retval) { tmp = 0; } entry.Size = tmp; retval = Int32.TryParse(row.Cells[2].Value.ToString(), out tmp); if (!retval) { tmp = 0; } entry.Count = tmp; entry.Counted = 1; loops.Add(entry); } else if (type == "Stop") { button1.BeginInvoke((MethodInvoker) delegate() { button1.Text = "Start"; }); e.Cancel = true; return; } row.Selected = false; for (int jj = 0; jj < loops.Count; jj++) { LoopLocation_t loop = loops[jj]; if (row.Index == loop.Start_location + loop.Size) { i = loop.Start_location; loop.Counted++; if (loop.Counted >= loop.Count) { loops.RemoveAt(jj); jj--; } } } } loops.Clear(); } } catch (Exception except) { process1_pid.BeginInvoke((MethodInvoker) delegate() { process1_pid.Text = "Process PID: N/A"; }); m_pid = 0; button1.BeginInvoke((MethodInvoker) delegate() { button1.Text = "Start"; button1.Enabled = false; }); MessageBox.Show(except.Message, "Error", MessageBoxButtons.OK); e.Cancel = true; return; } }