⽤c#实现控制⿏标位置的⽅法----------------------------------------------------------
using  System;
using  System.Runtime.InteropServices;
using  System.Text;
namespace  ConsoleApplication8{
class  Class1{
[STAThread]
static  void  Main(string[]  args){
//  Display  current  status  of  keys.
Console.WriteLine(
"**BEFORE**/r/nCAP:  {0}/r/nSCR:  {1}/r/nNUM:  {2}",
Keyboard.GetState(VirtualKeys.VK_CAPITAL)?"ON":"OFF",
Keyboard.GetState(VirtualKeys.VK_SCROLL)?"ON":"OFF",
Keyboard.GetState(VirtualKeys.VK_NUMLOCK)?"ON":"OFF"
);
//  Toggle  all  the  keys:
Keyboard.SetState(
VirtualKeys.VK_CAPITAL,
!Keyboard.GetState(VirtualKeys.VK_CAPITAL)
);
Keyboard.SetState(
VirtualKeys.VK_SCROLL,
!
Keyboard.GetState(VirtualKeys.VK_SCROLL)
);
Keyboard.SetState(
VirtualKeys.VK_NUMLOCK,
!Keyboard.GetState(VirtualKeys.VK_NUMLOCK)
);
//  Display  new  status  of  keys.
Console.WriteLine(
"/r/n**AFTER**/r/nCAP:  {0}/r/nSCR:  {1}/r/nNUM:  {2}",
Keyboard.GetState(VirtualKeys.VK_CAPITAL)?"ON":"OFF",
Keyboard.GetState(VirtualKeys.VK_SCROLL)?"ON":"OFF",
Keyboard.GetState(VirtualKeys.VK_NUMLOCK)?"ON":"OFF"
);
Console.ReadLine();
}
}
public  enum  VirtualKeys:  byte{
VK_NUMLOCK  =  0x90,
VK_SCROLL  =  0x91,
VK_CAPITAL  =  0x14
}
class  Keyboard{
const  uint  KEYEVENTF_EXTENDEDKEY  =  0x1;
const  uint  KEYEVENTF_KEYUP  =  0x2;
[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
);
public  static  bool  GetState(VirtualKeys  Key){
return  (GetKeyState((int)Key)==1);
}
public  static  void  SetState(VirtualKeys  Key,  bool  State){
if(State!=GetState(Key)){
keybd_event(
(byte)Key,
0x45,
KEYEVENTF_EXTENDEDKEY    ¦  0,
);
keybd_event(
(byte)Key,
0x45,
KEYEVENTF_EXTENDEDKEY    ¦  KEYEVENTF_KEYUP,
);
}
}
}
----------------------------------------------------------
using  System;
using  System.Drawing;
using  System.Collections;
using  System.ComponentModel;
using  System.Windows.Forms;
using  System.Data;
namespace  Example107_模拟⿏标
{
///  <summary>
///  Form1  的摘要说明。
///  </summary>
public  class  Form1  :  System.Windows.Forms.Form
{
///  <summary>
system的头文件/
//  必需的设计器变量。
///  </summary>
private  System.ComponentModel.Container  components  =  null;
public  Form1()
{
//
//  Windows  窗体设计器⽀持所必需的
//
InitializeComponent();
//
//  TODO:  在  InitializeComponent  调⽤后添加任何构造函数代码
/
/
}
///  <summary>
///  清理所有正在使⽤的资源。
///  </summary>
protected  override  void  Dispose(  bool  disposing  )
{
if(  disposing  )
{
if  (components  !=  null)
{
components.Dispose();
}
}
base.Dispose(  disposing  );
}
#region  Windows  Form  Designer  generated  code
///  <summary>
///  设计器⽀持所需的⽅法  -  不要使⽤代码编辑器修改
///  此⽅法的内容。
///  </summary>
private  void  InitializeComponent()
{
this.button1  =  new  System.Windows.Forms.Button();
this.SuspendLayout();
//
//  button1
//
this.button1.Location  =  new  System.Drawing.Point(144,  176);
this.button1.Name  =  "button1";
this.button1.TabIndex  =  0;
this.button1.Text  =  "Mouse";
this.button1.Click  +=  new  System.EventHandler(this.button1_Click);
/
/
//  Form1
//
this.AutoScaleBaseSize  =  new  System.Drawing.Size(6,  14);
this.ClientSize  =  new  System.Drawing.Size(280,  237);
this.Controls.AddRange(new  System.Windows.Forms.Control[]  {
this.button1});                                    this.Name  =  "Form1";
this.Text  =  "Form1";
this.DoubleClick  +=  new  System.EventHandler(this.Form1_DoubleClick);
this.ResumeLayout(false);
}
#endregion
///  <summary>
///  应⽤程序的主⼊⼝点。
///  </summary>
[STAThread]
static  void  Main()
{
Application.Run(new  Form1());
}
private  System.Windows.Forms.Button  button1;
[System.Runtime.InteropServices.DllImport("user32")]
private  static  extern  int  mouse_event(int  dwFlags,int  dx,int  dy,  int  cButtons,  int  dwExtraInfo);
const  int  MOUSEEVENTF_MOVE  =  0x0001;
const  int  MOUSEEVENTF_LEFTDOWN  =  0x0002;
const  int  MOUSEEVENTF_LEFTUP  =  0x0004;
const  int  MOUSEEVENTF_RIGHTDOWN  =  0x0008;
const  int  MOUSEEVENTF_RIGHTUP  =  0x0010;
const  int  MOUSEEVENTF_MIDDLEDOWN  =  0x0020;
const  int  MOUSEEVENTF_MIDDLEUP  =  0x0040;
const  int  MOUSEEVENTF_ABSOLUTE  =  0x8000;
private  void  Form1_DoubleClick(object  sender,  System.EventArgs  e)
{
MessageBox.Show("Double  Click");
}
private  void  button1_Click(object  sender,  System.EventArgs  e)
{
mouse_event(MOUSEEVENTF_MOVE,100,100,0,0);
//下⾯是模拟双击的
//mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
//mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
//mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
//mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}
}
}
----------------------------------------------------------
mouse_event函数说明:
dwFlags  --------    Long,下述标志的⼀个组合
MOUSEEVENTF_ABSOLUTE
dx和dy指定⿏标坐标系统中的⼀个绝对位置。在⿏标坐标系统中,屏幕在⽔平和垂直⽅向上均匀分割成65535×65535个单元  -    MOUSEEVENTF_MOVE  移动⿏标
MOUSEEVENTF_LEFTDOWN
模拟⿏标左键按下
MOUSEEVENTF_LEFTUP
模拟⿏标左键抬起
MOUSEEVENTF_RIGHTDOWN
模拟⿏标右键按下
MOUSEEVENTF_RIGHTUP
模拟⿏标右键按下
MOUSEEVENTF_MIDDLEDOWN
模拟⿏标中键按下
MOUSEEVENTF_MIDDLEUP
模拟⿏标中键按下
dx
Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定⽔平⽅向的绝对位置或相对运动
dy  -------------    Long,根据是否指定了MOUSEEVENTF_ABSOLUTE标志,指定垂直⽅向的绝对位置或相对运动
cButtons  -------    Long,未使⽤
dwExtraInfo  ----    Long,通常未⽤的⼀个值。⽤GetMessageExtraInfo函数可取得这个值。可⽤的值取决于特定的驱动程序
函数功能:该函数综合⿏标击键和⿏标动作。
函数原型:
VOID  mouse_event(DWORD  dwFlags,DWORD  dx,DWORD  dwFlags,OWORD  dx,DWORD  dy,  DWORD  dwData,  DWORD  dwExtralnfo);
参数:
dwFlags:标志位集,指定点击按钮和⿏标动作的多种情况。此参数⾥的各位可以是下列值的任何合理组合:
MOOSE_EVENTF_ABSOLOTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,参数含有相对数据:相对于上次位置的改动位置。此标志可被设置,也可不设置,不管⿏标的类型或与系统相连的类似于⿏标的设备的类型如何。要得到关于相对⿏标动作的信息,参见下⾯备注部分。
MOOSEEVENTFMOVE:表明发⽣移动。
M00SEEVENTF_LEFTDOWN:表明接按下⿏标左键。
M00SEEVENTF_LEFTUP:表明松开⿏标左键。
MOOSEEVENTF_RIGHTDOWN:表明按下⿏标右键。
MOOSEEVENTF_RIGHTUP:表明松开⿏标右键。
MOOSEEVENTF_MIDDLEDOWN:表明按下⿏标中键。
MOOSEEVENTF_MIDDLEUP:表明松开⿏标中键。
MOOSEEVENTF_WHEEL:在Windows  NT中如果⿏标有⼀个轮,表明⿏标轮被移动。移动的数量由dwData给出。
dx:指定⿏标沿x轴的绝对位置或者从上次⿏标事件产⽣以来移动的数量,依赖于MOOSEEVENTF_ABSOLOTE的设置。给出的绝对数据作为⿏标的实际X 坐标;给出的相对数据作为移动的mickeys数。⼀个mickey表⽰⿏标移动的数量,表明⿏标已经移动。
dy:指定⿏标沿y轴的绝对位置或者从上次⿏标事件产⽣以来移动的数量,依赖于MOOSEEVENTF_ABSOLVTE的设置。给出的绝对数据作为⿏标的实际y 坐标,给出的相对数据作为移动的mickeys数。
dwData:如果dwFlags为MOOSEEVENTF_WHEEL,则dwData指定⿏标轮移动的数量。正值表明⿏标轮向前转动,即远离⽤户的⽅向;负值表明⿏标轮向后转动,即朝向⽤户。⼀个轮击定义为WHEEL_DELTA,即120。
如果dwFlagsS不是MOOSEEVENTF_WHEEL,则dWData应为零。
dwExtralnfo:指定与⿏标事件相关的附加32位值。应⽤程序调⽤函数GetMessgeExtrajnfo来获得此附加信息。
返回值:⽆。
备注:如果⿏标被移动,⽤设置MOUSEEVENTF_MOVE来表明,dX和dy保留移动的信息。给出的信息是绝对或相对整数值。
如果指定了MOWSEEVENTF_ABSOLOTE值,则dX和dy含有标准化的绝对坐标,其值在0到65535之间。事件程序将此坐标映射到显⽰表⾯。坐标
(0,0)映射到显⽰表⾯的左上⾓,(6553,65535)映射到右下⾓。
如果没指定MOWSEEVENTF_ABSOLOTE,dX和dy表⽰相对于上次⿏标事件产⽣的位置(即上次报告的位置)的移动。正值表⽰⿏标向右(或下)移动;负值表⽰⿏标向左(或上)移动。
⿏标的相对移动服从⿏标速度和加速度等级的设置,⼀个最终⽤户⽤⿏标控制⾯板应⽤程序来设置这些值,应⽤程序⽤函数SystemParameterslnfo来取得和设置这些值。
在应⽤加速时系统对指定相对⿏标移动提供了两个测试。如果指定的沿X轴y轴的距离⽐第⼀个⿏标阈值⼤,并且⿏标的加速等级⾮零,则操作系统将距离加倍。如果指定的沿X轴或y轴的距离⽐第⼆个⿏标阈值⼤,并且⿏标的加速等级为2,则操作系统将从第⼀个阈测试得来的距离加倍。这样就允许操作系统将指定⿏标沿 X轴或y轴的相对位移加到4倍。
⼀旦应⽤了加速,系统⽤期望的⿏标速度换算合成的值。⿏标速度的范围是从1(最慢)到20(最快),并代表基于⿏标移动的距离指⽰符移动的数量。缺省值是10,表⽰对⿏标的移动设有附加的修改。
函数mouse_event需要⽤的应⽤程序⽤来合成⿏标事件。也被应⽤程序⽤来取得⿏标位置和⿏标按键状态之外的⿏标信息。例如,如果输⼊板制造商想将基于画笔的信息传给⾃⼰的应⽤程序,可以写⼀个直接与输⼊板硬件通信的动态键接库(DLL),获得附加的信息,并保存到⼀个队列中。DLL然后调
⽤ mouse_event,⽤标准按键和x/y位置数据,并在参数dwExtralnfo设置排列的附加信息的指针或索引。当应⽤程序需要附加信息时,调⽤ DLL(连同存贮在dwEXtralnfo中的指针或索引),则DLL返回附加信息。
Windows  CE:Windows  CE不⽀持参数  dwFlags取MOOSE  EVENTF  WHEEL常数。
速查:  Windows  NT:  3.1及以上版本;  Windows:95及以上版本;Windows  CE:不⽀持;头⽂件:winuser.h;输⼊库:user32.lib。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。