Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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;
        }
Beispiel #4
0
        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();
            }
        }
Beispiel #5
0
        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);
                }
                ;
            }
        }
Beispiel #6
0
        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();
        }
Beispiel #7
0
 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);
 }
Beispiel #8
0
        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()));
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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);
        }
Beispiel #11
0
        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;
        }
Beispiel #12
0
        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;
            }
        }