[DllImport("USER32.DLL",CallingConvention=CallingConvention.StdCall)]
private static extern int GetCursorPos (ref Point lpPoint);
[DllImport("USER32.DLL",CallingConvention=CallingConvention.StdCall)]
private static extern int GetKeyboardState(ref byte lpKeyState);
private Point ptOld=new Point(0,0);
private void Form1_Load(object sender, System.EventArgs e)
{
GetCursorPos(ref ptOld); //启动时鼠标所处的位置
}
private void timer1_Tick(object sender, System.EventArgs e)
{
byte[] bytCurKeyState=new byte[256];
GetKeyboardState(ref bytCurKeyState[0]);
for (int i=0;i<256;i++)
{
if (bytCurKeyState[i] > 1 ) //检查当前是否有个键盘被按下(包括鼠标)
{
Close();
}
}
Point pt=new Point(0,0);
GetCursorPos(ref pt);
if (!pt.Equals(ptOld)) //检查鼠标是否移动了
{
Close();
}
}
private static extern int GetCursorPos (ref Point lpPoint);
[DllImport("USER32.DLL",CallingConvention=CallingConvention.StdCall)]
private static extern int GetKeyboardState(ref byte lpKeyState);
private Point ptOld=new Point(0,0);
private void Form1_Load(object sender, System.EventArgs e)
{
GetCursorPos(ref ptOld); //启动时鼠标所处的位置
}
private void timer1_Tick(object sender, System.EventArgs e)
{
byte[] bytCurKeyState=new byte[256];
GetKeyboardState(ref bytCurKeyState[0]);
for (int i=0;i<256;i++)
{
if (bytCurKeyState[i] > 1 ) //检查当前是否有个键盘被按下(包括鼠标)
{
Close();
}
}
Point pt=new Point(0,0);
GetCursorPos(ref pt);
if (!pt.Equals(ptOld)) //检查鼠标是否移动了
{
Close();
}
}
C#检测鼠标键盘状态并关闭窗口
博客展示了一段C#代码,通过DllImport引入USER32.DLL中的GetCursorPos和GetKeyboardState函数。在窗口加载时记录鼠标初始位置,利用定时器循环检测键盘是否有按键被按下、鼠标是否移动,若满足条件则关闭窗口。
703

被折叠的 条评论
为什么被折叠?



