请问我想暂停本程序,但不影响其它程序的执行,怎么做?在线等待好心人解答,谢谢了~
9 个解决方案
#1
不知道你代码怎么写的, 你的程序HOOK了游戏程序吗?
#2
除此之外, 好象一个进程中的SLEEP, 是不会影响另外一个进程的
#3
不知道LZ的代码咋写的...
建议用Timer:)
建议用Timer:)
#4
Hook?没有,其实我做程序还不到一年,水平有限啊。
其实就是想做个模拟鼠标键盘输入的小工具,中间需要暂停的地方比较多,用Timer冒似不好操作。
其实就是想做个模拟鼠标键盘输入的小工具,中间需要暂停的地方比较多,用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,
只能用TIMER,
#7
楼上正解。
System.Threading.Thread.Sleep(10000);
会阻塞当前窗体的主线程,导致窗体不响应,同时CPU占用100%,不用Timer就只能用多线程了。
System.Threading.Thread.Sleep(10000);
会阻塞当前窗体的主线程,导致窗体不响应,同时CPU占用100%,不用Timer就只能用多线程了。
#8
在button3_Click事件处理中创建新线程,所原来的处理代码放到新线程处理过程中
#9
嗯,看来这应该是比较好的解决办法了
好了,结贴,谢谢各位了
好了,结贴,谢谢各位了
#1
不知道你代码怎么写的, 你的程序HOOK了游戏程序吗?
#2
除此之外, 好象一个进程中的SLEEP, 是不会影响另外一个进程的
#3
不知道LZ的代码咋写的...
建议用Timer:)
建议用Timer:)
#4
Hook?没有,其实我做程序还不到一年,水平有限啊。
其实就是想做个模拟鼠标键盘输入的小工具,中间需要暂停的地方比较多,用Timer冒似不好操作。
其实就是想做个模拟鼠标键盘输入的小工具,中间需要暂停的地方比较多,用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,
只能用TIMER,
#7
楼上正解。
System.Threading.Thread.Sleep(10000);
会阻塞当前窗体的主线程,导致窗体不响应,同时CPU占用100%,不用Timer就只能用多线程了。
System.Threading.Thread.Sleep(10000);
会阻塞当前窗体的主线程,导致窗体不响应,同时CPU占用100%,不用Timer就只能用多线程了。
#8
在button3_Click事件处理中创建新线程,所原来的处理代码放到新线程处理过程中
#9
嗯,看来这应该是比较好的解决办法了
好了,结贴,谢谢各位了
好了,结贴,谢谢各位了