最近專案中需要,使用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...