日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

远程控制(3)

發布時間:2025/7/14 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 远程控制(3) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本來想把這些都寫在(2)里面的,想想還是寫到(3)吧,這樣比較容易看點

完成圖片傳送和顯示,那么就開始控制,有了前面的基礎,對于網絡傳輸都有一定的了解了,那么我們再傳其他東西也差不多道理.還不懂就得找本書看了..老實說,看書才是硬道理.

先看下面兩個數據結構:


struct?MouseEvent
{
????
private?Byte[]?type;
????
private?Byte[]?x;
????
private?Byte[]?y;

????
public?MouseEvent(MouseEventType?Type,int?X,int?Y)
????
{
????????
this.type?=?BitConverter.GetBytes((int)Type);
????????
this.x?=?BitConverter.GetBytes(X);
????????
this.y?=?BitConverter.GetBytes(Y);
????}


????
public?MouseEvent(Byte[]?Type,?Byte[]?X,?Byte[]?Y)
????
{
????????
this.type?=?Type;
????????
this.x?=?X;
????????
this.y?=?Y;
????}


????
public?MouseEvent(Byte[]?Content)
????
{
????????type?
=?new?byte[4];
????????x?
=?new?byte[4];
????????y?
=?new?byte[4];
????????
for?(int?i?=?0;?i?<?Content.Length;?i++)
????????
{
????????????
if?(i?>=?0?&&?i?<?4)
????????????????type[i]?
=?Content[i];
????????????
if?(i?>=?4?&&?i?<?8)
????????????????x[i
-4]?=?Content[i];
????????????
if?(i?>=?8?&&?i?<?12)
????????????????y[i
-8]?=?Content[i];
????????}

????}


????
public?MouseEventType?Type
????
{
????????
get?{?return?(MouseEventType)BitConverter.ToInt32(type,?0);?}
????}


????
public?int?X
????
{
????????
get?{?return?BitConverter.ToInt32(x,?0);?}
????}


????
public?int?Y
????
{
????????
get?{?return?BitConverter.ToInt32(y,?0);?}
????}


????
public?Byte[]?ToBytes()
????
{
????????Byte[]?Bytes?
=?new?Byte[12];
????????type.CopyTo(Bytes,?
0);
????????x.CopyTo(Bytes,?
4);
????????y.CopyTo(Bytes,?
8);
????????
return?Bytes;
????}

}


enum?MouseEventType?:?int
{
????MouseMove
=0,
????MouseLeftDown,
????MouseLeftUp,
????MouseRightDown,
????MouseRightUp,
????MouseClick,
????MouseDoubleClick
}

一個是鼠標事件的結構體,一個鼠標事件類型枚舉
我們這次發送和接收的包,當然,還可以有鍵盤事件的包,我偷懶,沒做網絡傳輸就不說了,和(1)(2)差不多,上面的結構體也定義得可以用了.
說說流程吧
鼠標的事件都是在panel上的事件,move,click,doubleclick,左鍵右鍵就自己判斷了,由于panel大小是和受控方屏幕大小一樣,所以獲得坐標就等同于受控方屏幕的坐標,這樣,一個MouseEvent的包就可以組成了,發送.
受控放接收,直接構造函數構造一個新的MouseEvent(Byte[] Content).就可以通過結構體的屬性獲得相應的內容,說明一下,圖片和事件的偵聽和發送端口不能一樣.這樣就可以進行控制了.

怎么控制呢?這里就要調用win32 API了,還有用到委托,因為委托是線程安全的.
首先看一下聲明吧,我們要用到的API

????????[DllImport("user32")]
????????
public?static?extern?void?mouse_event(MouseEventFlag?flags,?int?dx,?int?dy,?int?dwData,?int?dwExtraInfo);
????????[DllImport(
"user32")]
????????
public?static?extern?bool?SetCursorPos(int?X,?int?Y);
???然后鼠標事件類型的枚舉:

public?enum?MouseEventFlag
{
????Move?
=?0x0001,
????LeftDown?
=?0x0002,
????LeftUp?
=?0x0004,
????RightDown?
=?0x0008,
????RightUp?
=?0x0010,
????MiddleDown?
=?0x0020,
????MiddleUp?
=?0x0040,
????XDown?
=?0x0080,
????XUp?
=?0x0100,
????Wheel?
=?0x0800,
????VirtualDesk?
=?0x4000,
????Absolute?
=?0x8000
}

聲明委托與事件
????????public?delegate?void?DoMouseButtons(MouseEventFlag?flags,?int?dx,?int?dy,?int?dwData,?int?dwExtraInfo);
????????
public?delegate?bool?DoMouseMove(int?X,?int?Y);

????????
private?event?DoMouseMove?MouseMove;
????????
private?event?DoMouseButtons?MouseButton;
添加事件
????????????MouseButton?+=?new?DoMouseButtons(mouse_event);
????????????MouseMove?
+=?new?DoMouseMove(SetCursorPos);
到這里,我們就可以模擬鼠標的事件了 switch?(MEvent.Type)
{
????
case?MouseEventType.MouseMove:
????????MouseMove(MEvent.X,?MEvent.Y);
????????
break;
????
case?MouseEventType.MouseLeftDown:
????????MouseButton(MouseEventFlag.LeftDown,?MEvent.X,?MEvent.Y,?
0,?0);
????????
break;
????
case?MouseEventType.MouseLeftUp:
????????MouseButton(MouseEventFlag.LeftUp,?MEvent.X,?MEvent.Y,?
0,?0);
????????
break;
????
case?MouseEventType.MouseRightDown:
????????MouseButton(MouseEventFlag.RightDown,?MEvent.X,?MEvent.Y,?
0,?0);
????????
break;
????
case?MouseEventType.MouseRightUp:
????????MouseButton(MouseEventFlag.RightUp,?MEvent.X,?MEvent.Y,?
0,?0);
????????
break;
????
case?MouseEventType.MouseClick:
????????MouseButton(MouseEventFlag.LeftDown,?MEvent.X,?MEvent.Y,?0,?0);
????????MouseButton(MouseEventFlag.LeftUp,?MEvent.X,?MEvent.Y,?
0,?0);
????????
break;
????
case?MouseEventType.MouseDoubleClick:
????????MouseButton(MouseEventFlag.LeftDown,?MEvent.X,?MEvent.Y,?0,?0);
????????MouseButton(MouseEventFlag.LeftDown,?MEvent.X,?MEvent.Y,?
0,?0);
??????????? MouseButton(MouseEventFlag.LeftUp,?MEvent.X,?MEvent.Y,?
0,?0);
????????MouseButton(MouseEventFlag.LeftUp,?MEvent.X,?MEvent.Y,?
0,?0);
????????
break;
}


鼠標雙擊的這個事件有點問題,有時候不行...

恩,完了,就這樣,一個簡單的遠程控制就完成了,這個東西是我個人娛樂所作,雖然沒有什么技術含量,但是通過這樣,也可以學到很多東西,同時很多東西也加深了理解...

源碼下載地址

今天是元旦佳節哦~

?祝大家豬年快樂!? 年年進步!


友情提示:
如需轉載本文,請遵守"本站協議"并加入下面聲明 且注明原文鏈接。
作者:kevin wu
來源:kevin wu's corner


轉載于:https://www.cnblogs.com/kevin-wu/archive/2007/01/01/609430.html

總結

以上是生活随笔為你收集整理的远程控制(3)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。