两道高难度题,悬奖300分。急啊!
JJONY 2000-03-27 04:04:00 这一道问题,我会给300分的分两次给
两个问题是有牵连的。
1、大家也许用过mouse_event这个函数,用来激发鼠标事件的。它有两种激发方式:
一是用0~65535的屏幕映射值,二是用偏移值,可是无论用哪一种方式都好像不能完全模 拟手工移动鼠标的那种可以看得见移动轨迹。例如:从(100,100)移动到(24,400)的 这个过程中用mouse_event就会一下跳到(24,400)这个坐标里了,但是用手工的话无论移动多快都可以看到一个鼠标的轨迹。
那我要完全模仿手工鼠标移动该如果实现呢?就是具有加速度的鼠标移动。
2、网络的数据传问题:
就是说第一题mouse_event的移动数据是从网络的另一台机器上传过来的。执行mouse_event函数的这一方是客户端,发送方是服务器端。双方是采用有连接(STREAM)方式连接的,客户方是采用Winsock 2.0版,网络事件是用WSAEventSelect产生的。没有FD_READ事件,接收数据是用重叠I/O方式和完成例程中嵌套WSARecv函数来完成的。我这样做是为了实时地完成数据接收的任务(书上说的),但是我用了以后好像没有感觉到速度快了。如果速度不够快的话,鼠标的移动就会一跳一跳的不平滑。
那么我应该怎么样才可以实现网络实时传送数据呢?
上面所完成的功能在一个软件上就已经实现了,而且实现得很好。在一台机器上操纵另一个机器的鼠标几乎是本机操纵似的。
这个软件(客户方和服务方)我给dumpbin了。网络上用了以下的函数:
WSAEventSelect
WSACloseEvent
WSACreateEvent
WSASocketA
WSAWaitForMultipleEvents
WSAEnumNetworkEvents
WSAResetEvent
WSASetEvent
WSAIoctl
奇怪的是这个软件居然没有用WSARecv(recv)和WSASend(send),那它是怎么发送的呢?
但是它有用ReadFile和WriteFile两个函数。
请高手们为我解决吧,起码给我说说个原理啦。拜托,拜托。