问题描述
我在做一个远程控制,接收端一个form里,引入了mouse_event,还有一个udpclient不断的接收控制端发送的鼠标坐标。我发现当这个form显示时,接收端可以被控制,如果form最小化或者visible=false后,还能继续接收数据,但是鼠标就是不能被控制。如果form重新显示出来,又能继续控制。求助,这是什么原因啊?这是源码publicpartialclassForm1:Form{[DllImport("user32.dll")]publicstaticexternintSetCursorPos(intx,inty);[DllImport("user32.dll")]publicstaticexternintmouse_event(intdwFlags,intdx,intdy,intcButtons,intdwExtraInfo);[DllImport("user32.dll",EntryPoint="keybd_event")]publicstaticexternvoidkeybd_event(intbVk,bytebScan,intdwFlags,intdwExtraInfo);constintMOUSEEVENTF_LEFTDOWN=0x0002;constintMOUSEEVENTF_LEFTUP=0x0004;constintMOUSEEVENTF_MIDDLEDOWN=0x0020;constintMOUSEEVENTF_MIDDLEUP=0x0040;constintMOUSEEVENTF_WHEEL=0x800;constintMOUSEEVENTF_MOVE=0x0001;constintMOUSEEVENTF_ABSOLUTE=0x8000;constintMOUSEEVENTF_RIGHTDOWN=0x0008;constintMOUSEEVENTF_RIGHTUP=0x0010;privateUdpClientclient;intwParam;floatsWidth=Screen.PrimaryScreen.Bounds.Width;floatsHeight=Screen.PrimaryScreen.Bounds.Height;publicForm1(){InitializeComponent();client=newUdpClient(newIPEndPoint(IPAddress.Any,12345));ThreadmyThread=newThread(DealMouse);myThread.IsBackground=true;myThread.Start(client);}privatevoidDealMouse(objectobj){IPEndPointendpoint=newIPEndPoint(IPAddress.Any,0);UdpClientclient=(UdpClient)obj;while(true){byte[]buffer=client.Receive(ref endpoint);stringmsg=Encoding.Default.GetString(buffer);string[]a=msg.Split(':');wParam=Int32.Parse(a[1]);if(a[0].CompareTo("mouse")==0){floatx=float.Parse(a[2])*sWidth;floaty=float.Parse(a[3])*sHeight;SetCursorPos((int)x,(int)y);intoper=MOUSEEVENTF_MOVE;switch(wParam){case513:oper=MOUSEEVENTF_LEFTDOWN;break;case514:oper=MOUSEEVENTF_LEFTUP;break;case519:oper=MOUSEEVENTF_MIDDLEDOWN;break;case520:oper=MOUSEEVENTF_MIDDLEUP;break;case522:oper=MOUSEEVENTF_WHEEL;break;case516:oper=MOUSEEVENTF_RIGHTDOWN;break;case517:oper=MOUSEEVENTF_RIGHTUP;break;case512:oper=MOUSEEVENTF_MOVE;break;}mouse_event(oper,0,0,0,0);}}}}
解决方案
解决方案二:
你的鼠标坐标是在form上的,操作的窗体最小化了之后,鼠标在form上出不来,当然操作不了。
解决方案三:
引用1楼guonan198811的回复:
你的鼠标坐标是在form上的,操作的窗体最小化了之后,鼠标在form上出不来,当然操作不了。
不是不是,我的如果form显示出来,鼠标可以全屏任意位置操作的,并不只局限在form里边。