阿里妈妈,帮你实现网络赚钱梦,流量变成现金!
在上两篇中完成了查看客户端屏幕和鼠标控制功能,后来就一直没时间做剩下的键盘控制功能,今天终于是把它完成了,拖了差不多一个月。用C#做远程监控程序(一)
用C#做远程监控程序(二)
前面也说过,要实现键盘控制就是要在服务器端响应键盘事件,传送到客户端,客户端再模拟出来。
为了避免鼠标和键盘的事件传送的时候发生冲突,需要在客户端再连接一个不同的端口,服务端启动的时候监听这两个端口。具
体的代码可以参考第一篇里所写的。
定义一个键盘事件类型的枚举,主要就是按键按下和释放。
复制内容到剪贴板
程序代码
程序代码public enum KeyBoardType
{
Key_Down,
Key_Up,
Key_Press,
}
public enum KeyBoard
{
KEYEVENTF_KEYDOWN = 0x0001,
KEYEVENTF_KEYUP = 0x0002
}
{
Key_Down,
Key_Up,
Key_Press,
}
public enum KeyBoard
{
KEYEVENTF_KEYDOWN = 0x0001,
KEYEVENTF_KEYUP = 0x0002
}
为了发送键代码,需要一个转换键盘事件的类,将键盘事件类型和键代码转为二进制以方便网络传输,形式和鼠标事件是类似的
,部分代码如下:
复制内容到剪贴板
程序代码
程序代码public class KeyBoardHook
{
private Byte[] keyType;
private Byte[] code;
public KeyBoardHook(KeyBoardType type, Keys keyCode)
{
keyType = BitConverter.GetBytes((int)type);
code = BitConverter.GetBytes((int)keyCode);
}
public KeyBoardHook(Byte[] Content)
{
keyType = new byte[4];
code = new byte[4];
for (int i = 0; i < Content.Length; i++)
{
if (i >= 0 && i < 4)
keyType[i] = Content[i];
if (i >= 4 && i < 8)
code[i - 4] = Content[i];
if (i >= 8)
break;
}
}
}
写好了键盘事件的类,然后就要将键盘代码发送出去,要在KeyDown事件中处理。因为我用的是Picturebox显示客户端屏幕,就得触发Picturebox的KeyDown事件。在Picturebox的属性里是没有这个事件的,需要自己添加。在KeyDown事件里发送键盘代码。
复制内容到剪贴板
程序代码
程序代码this.picScreen.KeyDown += new System.Windows.Forms.KeyEventHandler(picScreen_KeyDown);
private void picScreen_KeyDown(object sender, KeyEventArgs e)
{
KeyBoardHook keyboard = new KeyBoardHook(KeyBoardType.Key_Down, e.KeyCode);
e.SuppressKeyPress = true;
nskb.Write(keyboard.ToBytes(), 0, 8);
}
然后再用同样的方法添加Picturebox的KeyUp事件,里面写上类似的代码,不同的是KeyBoardType为Key_Up。
接下来就在客户端写接收的方法了,新开一个进程处理
复制内容到剪贴板
程序代码
程序代码receive2 = new Thread(new ThreadStart(ReceiveKey));
receive2.Start();
要模拟键盘事件,先引入DLL
复制内容到剪贴板
程序代码
程序代码[DllImport("user32.dll", CharSet = CharSet.Auto, EntryPoint = "keybd_event")]
public static extern void keybd_event(
byte bVk,
byte bScan,
int dwFlags,
int dwExtraInfo
);
模拟键盘按下按键
复制内容到剪贴板
程序代码
程序代码 public static void KeyDown(System.Windows.Forms.Keys keyCode)
{
keybd_event((byte)keyCode, 0, (int)KeyBoard.KEYEVENTF_KEYDOWN, 0);
}
{
keybd_event((byte)keyCode, 0, (int)KeyBoard.KEYEVENTF_KEYDOWN, 0);
}
然后在函数里处理模拟键盘的事件
复制内容到剪贴板
程序代码
程序代码public void ReceiveKey()
{
bool keepalive = true;
while (keepalive)
{
byte[] recKeyboard = new byte[1024];
nskb.Read(recKeyboard, 0, recKeyboard.Length);
KeyBoardHook key = new KeyBoardHook(recKeyboard);
switch (key.KeyType)
{
case KeyBoardType.Key_Down:
KeyDown(key.Code);
break;
case KeyBoardType.Key_Up:
KeyUp(key.Code);
break;
}
}
}
到这里这个程序就已经基本上做完了,测试了一下,键盘模拟成功。整体的来看就是截图的发送的太慢,监控屏幕的时候有点卡
。写这些东西只是记录一下我学习C#网络编程的一些心得,写得有点乱。我的.NET交流群号:30954402。有兴趣的来交流一下学习C#.NET的一些心得。
发表评论
上一篇:
下一篇: 
文章来自:
文章标签:
网摘收录: