0

Microsoft Visual Studio を使用して C# で簡単なアプリケーションを作成しています。

アプリケーションは、カーソルをポイント (フォーム ウィンドウの外) に移動させ、何度もクリックします。X を押してクリック ループを開始します。興味がある場合は、コードは次のようになります。

public void Wait(int milliseconds)
        {
            System.Threading.Thread.Sleep(milliseconds);
        }

        [System.Runtime.InteropServices.DllImport("user32.dll")]
        public static extern void mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

        public const int MOUSEEVENTF_LEFTDOWN = 0x02;
        public const int MOUSEEVENTF_LEFTUP = 0x04;
        public const int MOUSEEVENTF_RIGHTDOWN = 0x08;
        public const int MOUSEEVENTF_RIGHTUP = 0x10;

        public void MouseClick(Point pos, int click = 0)
        {
            int x = pos.X;
            int y = pos.Y;
            //MessageBox.Show("clicking mouse on " + pos.ToString());

            if (click == 1)
            {
                mouse_event(MOUSEEVENTF_RIGHTDOWN, x, y, 0, 0);
                mouse_event(MOUSEEVENTF_RIGHTUP, x, y, 0, 0);
            }
            else
            {
                mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
                mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
            }
        }

        public void MouseMove(int x, int y)
        {
            MouseMove(new Point(x,y));
        }

        public void MouseMove(Point target)
        {
            Cursor.Position = target;
        }

        private void Form1_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.A)
            {
                MessageBox.Show(Cursor.Position.ToString());
            }
            MouseMove(42, 42);

            if (e.KeyCode == Keys.X)
            {
                MessageBox.Show(Cursor.Position.ToString());            
                Wait(42);
                Random r = new Random();
                for (int i = 0; i < number_of_times ; i++)
                {
                    Wait(r.Next(42));
                    MouseClick(Cursor.Position);
                }

            }

        }

しかし、ご覧のとおり、クリックが始まるとフォームが元に戻る (画面に表示されない) ため、キーの押下を検出できません。では、どうすればクリックループを止めることができますか? Ctrl + Alt + Del を押すと一時停止し、タスク マネージャーを開きますが、クリックは続きます。

おそらくctrl alt delを検出する方法ですか?またはウィンドウがダウンしているときに他のキーを押しますか?

助けてくれてありがとう!

4

1 に答える 1

1

次の記事をご覧ください: Low-Level Keyboard Hook in C# .

また、コード例はhttps://gist.github.com/Ciantic/471698です。

グローバル ホットキーが良い解決策かもしれません: http://bloggablea.wordpress.com/2007/05/01/global-hotkeys-with-net/

于 2013-09-22T10:02:16.017 に答える