新人求助:mouse_event失效的问题

JackHarbor 2016-04-11 08:21:17
我在做一个远程控制,接收端一个form里,引入了mouse_event,还有一个udpclient不断的接收控制端发送的鼠标坐标。我发现当这个form显示时,接收端可以被控制,如果form最小化或者visible=false后,还能继续接收数据,但是鼠标就是不能被控制。如果form重新显示出来,又能继续控制。求助,这是什么原因啊?

这是源码

public partial class Form1 : Form
{
[DllImport("user32.dll")]
public static extern int SetCursorPos(int x, int y);
[DllImport("user32.dll")]
public static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
[DllImport("user32.dll", EntryPoint = "keybd_event")]
public static extern void keybd_event(int bVk, byte bScan, int dwFlags, int dwExtraInfo);

const int MOUSEEVENTF_LEFTDOWN = 0x0002;
const int MOUSEEVENTF_LEFTUP = 0x0004;
const int MOUSEEVENTF_MIDDLEDOWN = 0x0020;
const int MOUSEEVENTF_MIDDLEUP = 0x0040;
const int MOUSEEVENTF_WHEEL = 0x800;
const int MOUSEEVENTF_MOVE = 0x0001;
const int MOUSEEVENTF_ABSOLUTE = 0x8000;
const int MOUSEEVENTF_RIGHTDOWN = 0x0008;
const int MOUSEEVENTF_RIGHTUP = 0x0010;


private UdpClient client;
int wParam;
float sWidth = Screen.PrimaryScreen.Bounds.Width;
float sHeight = Screen.PrimaryScreen.Bounds.Height;

public Form1()
{
InitializeComponent();
client = new UdpClient(new IPEndPoint(IPAddress.Any, 12345));
Thread myThread = new Thread(DealMouse);
myThread.IsBackground = true;
myThread.Start(client);
}


private void DealMouse(object obj)
{
IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 0);
UdpClient client = (UdpClient)obj;
while (true)
{
byte[] buffer = client.Receive(ref endpoint);
string msg = Encoding.Default.GetString(buffer);
string[] a = msg.Split(':');
wParam = Int32.Parse(a[1]);
if (a[0].CompareTo("mouse") == 0)
{
float x = float.Parse(a[2]) * sWidth;
float y = float.Parse(a[3]) * sHeight;
SetCursorPos((int)x, (int)y);
int oper = MOUSEEVENTF_MOVE;
switch (wParam)
{
case 513:
oper = MOUSEEVENTF_LEFTDOWN;
break;
case 514:
oper = MOUSEEVENTF_LEFTUP;
break;
case 519:
oper = MOUSEEVENTF_MIDDLEDOWN;
break;
case 520:
oper = MOUSEEVENTF_MIDDLEUP;
break;
case 522:
oper = MOUSEEVENTF_WHEEL;
break;
case 516:
oper = MOUSEEVENTF_RIGHTDOWN;
break;
case 517:
oper = MOUSEEVENTF_RIGHTUP;
break;
case 512:
oper = MOUSEEVENTF_MOVE;
break;
}
mouse_event(oper, 0, 0, 0, 0);
}
}
}
}
...全文
399 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
JackHarbor 2016-04-12
  • 打赏
  • 举报
回复
引用 1 楼 guonan198811的回复:
你的鼠标坐标是在form上的,操作的窗体最小化了之后,鼠标在form上出不来,当然操作不了。
不是不是,我的如果form显示出来,鼠标可以全屏任意位置操作的,并不只局限在form里边。
南天空 2016-04-11
  • 打赏
  • 举报
回复
你的鼠标坐标是在form上的,操作的窗体最小化了之后,鼠标在form上出不来,当然操作不了。

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧