利用API函数模拟鼠标点击.有几个菜鸟级问题.
1.mouse_eventMOUSEEVENTF_LEFTDOWNOrMOUSEEVENTF_LEFTUP,0,0,0,0这是单击左键的代码,后面的坐标有啥用啊?我改动了...
1.
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
这是单击左键的代码,后面的坐标有啥用啊?我改动了一下,好象没什么用...
☆2.
mouse_event MOUSEEVENTF_MOVE, 0 , 0 , 0 , 0
这是移动鼠标的代码,后面那个坐标是相对于当前鼠标的位置的,好象VB应该是把屏幕 65535*65535 等分吧..为什么有4个坐标,而且只能相对于鼠标的当前位置移动,这是不是叫做"相对鼠标坐标"呢?那么"绝对鼠标坐标"应该怎么弄呢?而且怎么准确的找到自己想要的坐标呢?
★3.
我是把动作都加到Timer控件里,然后利用开始按扭来控制Timer控件的,要想完成一连串的动作则需要好几个Timer.这也不是很大的问题..可是,还有个问题..举个例子来说明..
比如,我想要鼠标先移动到A点,然后双击左键.然后再移动到B点.
这就需要3个Timer控件.可是,设置完Timer控件的Interval属性之后,假设时间间隔设置的都没有问题..可是,每个Timer里的动作都会重复的运行,间隔时间少的动作就会出现N遍, 这样根本就达不到效果...请问怎么让所有的Timer里的动作都运行完毕之后再循环运行呢?
菜鸟一个,别说太深...请说具体解决办法..200分送上,再追50!
3楼的,你那个是什么?我怎么看不明白啊?能说的详细点吗~ 展开
mouse_event MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
这是单击左键的代码,后面的坐标有啥用啊?我改动了一下,好象没什么用...
☆2.
mouse_event MOUSEEVENTF_MOVE, 0 , 0 , 0 , 0
这是移动鼠标的代码,后面那个坐标是相对于当前鼠标的位置的,好象VB应该是把屏幕 65535*65535 等分吧..为什么有4个坐标,而且只能相对于鼠标的当前位置移动,这是不是叫做"相对鼠标坐标"呢?那么"绝对鼠标坐标"应该怎么弄呢?而且怎么准确的找到自己想要的坐标呢?
★3.
我是把动作都加到Timer控件里,然后利用开始按扭来控制Timer控件的,要想完成一连串的动作则需要好几个Timer.这也不是很大的问题..可是,还有个问题..举个例子来说明..
比如,我想要鼠标先移动到A点,然后双击左键.然后再移动到B点.
这就需要3个Timer控件.可是,设置完Timer控件的Interval属性之后,假设时间间隔设置的都没有问题..可是,每个Timer里的动作都会重复的运行,间隔时间少的动作就会出现N遍, 这样根本就达不到效果...请问怎么让所有的Timer里的动作都运行完毕之后再循环运行呢?
菜鸟一个,别说太深...请说具体解决办法..200分送上,再追50!
3楼的,你那个是什么?我怎么看不明白啊?能说的详细点吗~ 展开
5个回答
2007-07-10
展开全部
1。mouse_event有五个参数,第一个为选项标志,为 MOUSEEVENTF_LEFTDOWN时表示左键按下,为MOUSEEVENTF_LEFTUP表示左键松开,向系统发送相应消息。第二三个参数分别表示x,y相对位置,一般可设为0,0,第四五个参数并不重要,一般也可设为0,0。
2。mouse_event MOUSEEVENTF_MOVE, 0 , 0 , 0 , 0前面两个别0,0是代表的坐标x , y,如果都设置为零的话,则每次模拟事件的位置是鼠标的当前位置,x , y 在没有使用MOUSEEVENTF_ABSOLUTE标志时是相对于鼠标当前位置的坐标.如果使用绝对坐标,那么x,y应该是相对于屏幕的坐标.
3。timer当有多个时候,你在移动时候应该使用timer的Enabled属性将使用过的变为不可用吧,避免一直使用中,然后在变为可用。
2。mouse_event MOUSEEVENTF_MOVE, 0 , 0 , 0 , 0前面两个别0,0是代表的坐标x , y,如果都设置为零的话,则每次模拟事件的位置是鼠标的当前位置,x , y 在没有使用MOUSEEVENTF_ABSOLUTE标志时是相对于鼠标当前位置的坐标.如果使用绝对坐标,那么x,y应该是相对于屏幕的坐标.
3。timer当有多个时候,你在移动时候应该使用timer的Enabled属性将使用过的变为不可用吧,避免一直使用中,然后在变为可用。
展开全部
WM_LBUTTONDOWN
WM_LBUTTONUP
WM_LBUTTONDBLCLK
何不察看在线MSDN
http://www.microsoft.com/china/msdn/library/
WM_LBUTTONUP
WM_LBUTTONDBLCLK
何不察看在线MSDN
http://www.microsoft.com/china/msdn/library/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先引用API函数
[DllImport("user32.dll")]
static extern short GetKeyState(int nVirtKey);
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk,byte bScan,uint dwFlags,uint dwExtraInfo);
定义几个只读变量表示鼠标的动作
private readonly int MOUSEEVENTF_LEFTDOWN = 0x2;
private readonly int MOUSEEVENTF_RIGHTDOWN = 0x8;
private readonly int MOUSEEVENTF_LEFTUP = 0x4;
private readonly int MOUSEEVENTF_RIGHTUP = 0x10;
要完成鼠标模拟动作,要引用这个WIN函数
[DllImport("user32.dll")]
public static extern UInt32 RegisterHotKey(IntPtr hWnd, UInt32 id, UInt32 fsModifiers, UInt32 vk);
然后改写
protected override void WndProc(ref Message m)
{
const int WM_HOTKEY = 0x0312;
switch (m.Msg)
{
case WM_HOTKEY:
if (m.WParam.ToInt32() == 0x3400)
{
this.Hide();
StartEx();
}
if (m.WParam.ToInt32() == 0x3401)
{
this.Show();
t.Close();
}
base.WndProc(ref m);
break;
default:
base.WndProc(ref m);
break;
}
}
[DllImport("user32.dll")]
static extern short GetKeyState(int nVirtKey);
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk,byte bScan,uint dwFlags,uint dwExtraInfo);
定义几个只读变量表示鼠标的动作
private readonly int MOUSEEVENTF_LEFTDOWN = 0x2;
private readonly int MOUSEEVENTF_RIGHTDOWN = 0x8;
private readonly int MOUSEEVENTF_LEFTUP = 0x4;
private readonly int MOUSEEVENTF_RIGHTUP = 0x10;
要完成鼠标模拟动作,要引用这个WIN函数
[DllImport("user32.dll")]
public static extern UInt32 RegisterHotKey(IntPtr hWnd, UInt32 id, UInt32 fsModifiers, UInt32 vk);
然后改写
protected override void WndProc(ref Message m)
{
const int WM_HOTKEY = 0x0312;
switch (m.Msg)
{
case WM_HOTKEY:
if (m.WParam.ToInt32() == 0x3400)
{
this.Hide();
StartEx();
}
if (m.WParam.ToInt32() == 0x3401)
{
this.Show();
t.Close();
}
base.WndProc(ref m);
break;
default:
base.WndProc(ref m);
break;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先引用API函数
[DllImport("user32.dll")]
static extern short GetKeyState(int nVirtKey);
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk,byte bScan,uint dwFlags,uint dwExtraInfo);
定义几个只读变量表示鼠标的动作
private readonly int MOUSEEVENTF_LEFTDOWN = 0x2;
private readonly int MOUSEEVENTF_RIGHTDOWN = 0x8;
private readonly int MOUSEEVENTF_LEFTUP = 0x4;
private readonly int MOUSEEVENTF_RIGHTUP = 0x10;
要完成鼠标模拟动作,要引用这个WIN函数
[DllImport("user32.dll")]
public static extern UInt32 RegisterHotKey(IntPtr hWnd, UInt32 id, UInt32 fsModifiers, UInt32 vk);
然后改写
protected override void WndProc(ref Message m)
{
const int WM_HOTKEY = 0x0312;
switch (m.Msg)
{
case WM_HOTKEY:
if (m.WParam.ToInt32() == 0x3400)
{
this.Hide();
StartEx();
}
if (m.WParam.ToInt32() == 0x3401)
{
this.Show();
t.Close();
}
base.WndProc(ref m);
break;
default:
base.WndProc(ref m);
break;
}
}
_LEFTUP, 0, 0, 0, 0 不要改,否则无效!!!
我是把动作都加到Timer控件里,然后利用开始按扭来控制Timer控件的,要想完成一连串的动作则需要好几个Timer.这也不是很大的问题
[DllImport("user32.dll")]
static extern short GetKeyState(int nVirtKey);
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk,byte bScan,uint dwFlags,uint dwExtraInfo);
定义几个只读变量表示鼠标的动作
private readonly int MOUSEEVENTF_LEFTDOWN = 0x2;
private readonly int MOUSEEVENTF_RIGHTDOWN = 0x8;
private readonly int MOUSEEVENTF_LEFTUP = 0x4;
private readonly int MOUSEEVENTF_RIGHTUP = 0x10;
要完成鼠标模拟动作,要引用这个WIN函数
[DllImport("user32.dll")]
public static extern UInt32 RegisterHotKey(IntPtr hWnd, UInt32 id, UInt32 fsModifiers, UInt32 vk);
然后改写
protected override void WndProc(ref Message m)
{
const int WM_HOTKEY = 0x0312;
switch (m.Msg)
{
case WM_HOTKEY:
if (m.WParam.ToInt32() == 0x3400)
{
this.Hide();
StartEx();
}
if (m.WParam.ToInt32() == 0x3401)
{
this.Show();
t.Close();
}
base.WndProc(ref m);
break;
default:
base.WndProc(ref m);
break;
}
}
_LEFTUP, 0, 0, 0, 0 不要改,否则无效!!!
我是把动作都加到Timer控件里,然后利用开始按扭来控制Timer控件的,要想完成一连串的动作则需要好几个Timer.这也不是很大的问题
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询