请问如何把本程序暂停几秒钟,而不影响其它程序的运行?

时间:2022-11-28 17:28:04
我想做个游戏的辅助工具,需要暂停一段时间再做操作,但是我在程序里System.Threading.Thread.Sleep(5000)的时候好像游戏也停了,进游戏是黑屏,当Sleep结束的时候才恢复正常。
请问我想暂停本程序,但不影响其它程序的执行,怎么做?在线等待好心人解答,谢谢了~

9 个解决方案

#1


不知道你代码怎么写的, 你的程序HOOK了游戏程序吗?

#2


除此之外, 好象一个进程中的SLEEP, 是不会影响另外一个进程的

#3


不知道LZ的代码咋写的...
建议用Timer:)

#4


Hook?没有,其实我做程序还不到一年,水平有限啊。
其实就是想做个模拟鼠标键盘输入的小工具,中间需要暂停的地方比较多,用Timer冒似不好操作。

#5


这是段测试的代码,主要想实现暂停10秒钟后鼠标左键在屏幕上单击,再暂停一秒后鼠标移动到相应坐标点双击选中,删除内容,输入“67”。代码如下:

        private void button3_Click(object sender, EventArgs e)
        {
            System.Threading.Thread.Sleep(10000);
            l_click(new Point(20, 233));
            System.Threading.Thread.Sleep(1000);
            l_click(new Point(90, 253));
            l_click(new Point(90, 253));
            SendKeys.Send("{Delete}");
            SendKeys.Send("67");
        }
        [Flags]
        enum MouseEventFlag : uint
        {
            Move = 0x0001,
            LeftDown = 0x0002,
            LeftUp = 0x0004,
            RightDown = 0x0008,
            RightUp = 0x0010,
            MiddleDown = 0x0020,
            MiddleUp = 0x0040,
            XDown = 0x0080,
            XUp = 0x0100,
            Wheel = 0x0800,
            VirtualDesk = 0x4000,
            Absolute = 0x8000
        }
        [DllImport("user32.dll")]
        static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
        [DllImport("user32.dll")]
        static extern bool SetCursorPos(int X, int Y);
        /// <summary>
        /// 移动到坐标位置左键点击一下
         /// </summary>
        /// <param name="point">要点击的坐标位置,屏幕绝对值</param>
        public static void l_click(Point point)
        {
            move(point);
            mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);
            mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
        }
        /// <summary>
        /// 移动到指定坐标位置
         /// </summary>
        public static void move(Point point)
        {
            SetCursorPos(point.X, point.Y);
        } 

#6


这样的SLEEP, 会造成的你的程序UI长时间不响应, 
只能用TIMER,

#7


楼上正解。
System.Threading.Thread.Sleep(10000);
会阻塞当前窗体的主线程,导致窗体不响应,同时CPU占用100%,不用Timer就只能用多线程了。

#8


在button3_Click事件处理中创建新线程,所原来的处理代码放到新线程处理过程中

#9


嗯,看来这应该是比较好的解决办法了
好了,结贴,谢谢各位了

#1


不知道你代码怎么写的, 你的程序HOOK了游戏程序吗?

#2


除此之外, 好象一个进程中的SLEEP, 是不会影响另外一个进程的

#3


不知道LZ的代码咋写的...
建议用Timer:)

#4


Hook?没有,其实我做程序还不到一年,水平有限啊。
其实就是想做个模拟鼠标键盘输入的小工具,中间需要暂停的地方比较多,用Timer冒似不好操作。

#5


这是段测试的代码,主要想实现暂停10秒钟后鼠标左键在屏幕上单击,再暂停一秒后鼠标移动到相应坐标点双击选中,删除内容,输入“67”。代码如下:

        private void button3_Click(object sender, EventArgs e)
        {
            System.Threading.Thread.Sleep(10000);
            l_click(new Point(20, 233));
            System.Threading.Thread.Sleep(1000);
            l_click(new Point(90, 253));
            l_click(new Point(90, 253));
            SendKeys.Send("{Delete}");
            SendKeys.Send("67");
        }
        [Flags]
        enum MouseEventFlag : uint
        {
            Move = 0x0001,
            LeftDown = 0x0002,
            LeftUp = 0x0004,
            RightDown = 0x0008,
            RightUp = 0x0010,
            MiddleDown = 0x0020,
            MiddleUp = 0x0040,
            XDown = 0x0080,
            XUp = 0x0100,
            Wheel = 0x0800,
            VirtualDesk = 0x4000,
            Absolute = 0x8000
        }
        [DllImport("user32.dll")]
        static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);
        [DllImport("user32.dll")]
        static extern bool SetCursorPos(int X, int Y);
        /// <summary>
        /// 移动到坐标位置左键点击一下
         /// </summary>
        /// <param name="point">要点击的坐标位置,屏幕绝对值</param>
        public static void l_click(Point point)
        {
            move(point);
            mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);
            mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);
        }
        /// <summary>
        /// 移动到指定坐标位置
         /// </summary>
        public static void move(Point point)
        {
            SetCursorPos(point.X, point.Y);
        } 

#6


这样的SLEEP, 会造成的你的程序UI长时间不响应, 
只能用TIMER,

#7


楼上正解。
System.Threading.Thread.Sleep(10000);
会阻塞当前窗体的主线程,导致窗体不响应,同时CPU占用100%,不用Timer就只能用多线程了。

#8


在button3_Click事件处理中创建新线程,所原来的处理代码放到新线程处理过程中

#9


嗯,看来这应该是比较好的解决办法了
好了,结贴,谢谢各位了