c 區域網螢幕廣播二三事(1) 螢幕抓取

2021-07-25 06:25:33 字數 3240 閱讀 4251

最近專案中需要,使用c#做了乙個簡版的教學軟體,過程中碰到過一些坑,也終於爬出來,現在隨著專案的收尾,想要通過部落格的方式來梳理和記錄一下相關東西。

如下為對螢幕抓取封裝的capture,其中包含了滑鼠的繪製以及縮放功能。

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

using system.drawing;

using system.drawing.imaging;

using system.runtime.interopservices;

using system.windows.forms;

using system.io;

namespace screen_cast

public class timerhelper

~timerhelper()

public double interval set }

public bool enabled set }

public void delegatefunc(system.timers.elapsedeventhandler elapsedhandler)

private system.timers.timer timerhandler;

}class screencapture

[structlayout(layoutkind.sequential)]

struct cursorinfo

[dllimport("user32.dll")]

static extern bool getcursorinfo(out cursorinfo pci);

[dllimport("user32.dll")]

static extern bool drawicon(intptr hdc, int x, int y, intptr hicon);

const int32 cursor_showing = 0x00000001;

#endregion

#region variables

private imagecodecinfo jpegencoder = null;

private encoderparameters encoderparams = null;

private timerhelper screentimer = new timerhelper(100);

private int dstwidth, dstheight;

private boolean scaleenabled = false;

public eventhandleronscreendataeventhandler;

#endregion

public screencapture(long quality = 70l)

~screencapture()

#region native functions

private imagecodecinfo getencoder(imageformat format)

return null;

}private void ontimer(object sender, system.timers.elapsedeventargs e)

public bitmap capturescreenfun()

}g.dispose();

g = null;}}

catch

if (scaleenabled == true && result != null &&

(this.dstwidth != result.width || this.dstheight != result.height))

return result;

}private bitmap kiresizeimage(bitmap bmp, int neww, int newh)

catch

}private void docapture());}

#endregion

#region inte***ce

public void startcapture(double interval, int dstwidth = 0, int dstheight = 0, bool bscale = false)

public void updatequality(long quality)

public void updateinterval(double interval)

public void updatescale(bool benable)

public void stopcapture()

#endregion}}

主介面僅僅新增乙個panel,乙個picturebox,乙個button,兩個textedit,如下圖:

其中對capture類的使用如下:

using system;

using system.collections.generic;

using system.componentmodel;

using system.data;

using system.drawing;

using system.linq;

using system.text;

using system.threading.tasks;

using system.windows.forms;

using system.io;

namespace screen_cast

private void btn_start_click(object sender, eventargs e)

else

}private void onscreendata(object obj,screencaptureeventargs evt)

catch}}

}

執行效果如下圖:

原始碼傳送門:

c#螢幕廣播原始碼v1.0

區域網螢幕共享 區域網電腦螢幕共享

電腦投屏 共享內網資訊 awind奇機無線投屏器,電腦投屏 共享內網資訊新功能正式上線,當我們將電腦通過投屏盒子投屏到大螢幕上的時候,區域網內的其他智慧型裝置 手機 平板 電腦 也能接受畫面了,真正實現電腦投屏 共享內網資訊。詳細情況如下 1 將投屏盒子通過hdmi線與大螢幕連線,這時候大螢幕上顯示...

socket的區域網廣播

很多區域網都定義了乙個特殊的保留位址,稱為廣播位址.當資訊頭中目的位址域的內容為廣播位址時,該幀被區域網上所有計算機接收.這個過程稱為廣播.合法的廣播位址就是主機的網路位址加上最大的主機號。網路位址通過機器的ip位址與子網掩碼按位與得出,我們 以ip位址為10.78.202.175 子網掩碼為255...

socket的區域網廣播

很多區域網都定義了乙個特殊的保留位址,稱為廣播位址.當資訊頭中目的位址域的內容為廣播位址時,該幀被區域網上所有計算機接收.這個過程稱為廣播.合法的廣播位址就是主機的網路位址加上最大的主機號。網路位址通過機器的ip位址與子網掩碼按位與得出,我們 以ip位址為10.78.202.175 子網掩碼為255...