C\#ActiveX 웹 페이지 캡 처 컨트롤 작성
기능 캡 처 는 다음 과 같 습 니 다.
코드 는 두 가지 핵심 부분 으로 나 뉜 다.1.C\#화면 캡 처;2.C\#ActivX 컨트롤 을 개발 합 니 다.
1.화면 캡 처,이것 은 인터넷 에서 5 줄 코드 만 필요 한 실현(슈퍼 간소화)을 찾 았 습 니 다.물론 자유 구역 에서 그림 을 캡 처 하고 캡 처 한 후에 로 컬 에 저장 한 다음 에 바 이 너 리 로 jpg 파일 을 읽 고 base 64 로 인 코딩 하여 웹 페이지 로 돌아 갈 수 있 습 니 다.
public string PrintScreen()
{
Image baseImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
Graphics g = Graphics.FromImage(baseImage);
g.CopyFromScreen(new Point(0, 0), new Point(0, 0), Screen.AllScreens[0].Bounds.Size);
g.Dispose();
baseImage.Save("D:\\screen.jpg", ImageFormat.Jpeg);
Stream file = new FileStream("D:\\screen.jpg", FileMode.Open);
BinaryReader bw = new BinaryReader(file);
var buffer = new byte[file.Length];
bw.Read(buffer, 0, buffer.Length);
bw.Close();
string b64 = Convert.ToBase64String(buffer);
return b64;
}
2.c\#ActiveX 컨트롤 을 개발 하고 인터넷 예제 가 비교적 많다.클래스 라 이브 러 리 를 새로 만 들 고 항목 속성 을 설정 합 니 다.COM 에서 볼 수 있 습 니 다.
그리고 COM 에 서로 등록 합 니 다.이렇게 컴 파일 하면 COM 컨트롤 이 자동 으로 등 록 됩 니 다.
설정 이 완료 되면 코드 를 작성 합 니 다.다음 과 같 습 니 다.
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
namespace PrintScreenLib
{
// ActiveX , “IObjectSafety” 。 ( , GUID )
[ComImport, Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface IObjectSafety
{
[PreserveSig]
int GetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions, [MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions);
[PreserveSig()]
int SetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] int dwOptionSetMask, [MarshalAs(UnmanagedType.U4)] int dwEnabledOptions);
}
}
새 사용자 컨트롤 을 만 들 고 IObject Safe 인 터 페 이 스 를 파생 합 니 다.인 터 페 이 스 는 고정 내용 입 니 다.
[Guid("61D7F413-A1B2-48A9-B851-5BFBCF50280C")] // VS GUID
public partial class PSLib : UserControl, IObjectSafety
{
#region IObjectSafety
private const string _IID_IDispatch = "{00020400-0000-0000-C000-000000000046}";
private const string _IID_IDispatchEx = "{a6ef9860-c720-11d0-9337-00a0c90dcaa9}";
private const string _IID_IPersistStorage = "{0000010A-0000-0000-C000-000000000046}";
private const string _IID_IPersistStream = "{00000109-0000-0000-C000-000000000046}";
private const string _IID_IPersistPropertyBag = "{37D84F60-42CB-11CE-8135-00AA004BB851}";
private const int INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001;
private const int INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002;
private const int S_OK = 0;
private const int E_FAIL = unchecked((int)0x80004005);
private const int E_NOINTERFACE = unchecked((int)0x80004002);
private bool _fSafeForScripting = true;
private bool _fSafeForInitializing = true;
public int GetInterfaceSafetyOptions(ref Guid riid, ref int pdwSupportedOptions, ref int pdwEnabledOptions)
{
int Rslt = E_FAIL;
string strGUID = riid.ToString("B");
pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA;
switch (strGUID)
{
case _IID_IDispatch:
case _IID_IDispatchEx:
Rslt = S_OK;
pdwEnabledOptions = 0;
if (_fSafeForScripting == true)
pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER;
break;
case _IID_IPersistStorage:
case _IID_IPersistStream:
case _IID_IPersistPropertyBag:
Rslt = S_OK;
pdwEnabledOptions = 0;
if (_fSafeForInitializing == true)
pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA;
break;
default:
Rslt = E_NOINTERFACE;
break;
}
return Rslt;
}
public int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions)
{
int Rslt = E_FAIL;
string strGUID = riid.ToString("B");
switch (strGUID)
{
case _IID_IDispatch:
case _IID_IDispatchEx:
if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_CALLER) &&
(_fSafeForScripting == true))
Rslt = S_OK;
break;
case _IID_IPersistStorage:
case _IID_IPersistStream:
case _IID_IPersistPropertyBag:
if (((dwEnabledOptions & dwOptionSetMask) == INTERFACESAFE_FOR_UNTRUSTED_DATA) &&
(_fSafeForInitializing == true))
Rslt = S_OK;
break;
default:
Rslt = E_NOINTERFACE;
break;
}
return Rslt;
}
#endregion
IE 호출 ActiveX 컨트롤:
<!DOCTYPE html>
<html>
<head>
<title> </title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<script>
function jt(){
var str="";
try
{
var obj = document.getElementById("MyActiveX");
str=obj.PrintScreen();
}
catch(e)
{
alert(e);
return;
}
var img=document.getElementById("img");
img.src="data:image/jpeg;base64,"+str;// base64
}
</script>
</head>
<body>
<OBJECT ID="MyActiveX" WIDTH="120" HEIGHT=20" CLASSID="CLSID:61D7F413-A1B2-48A9-B851-5BFBCF50280C"></OBJECT>
<input type="button" value=" " onclick="jt();">
<Image id ="img" />
</body>
</html>
완전한 ActvieX 컨트롤 이 완성 되 었 습 니 다.이벤트 에 사용 되 지 않 았 습 니 다.이 벤트 를 사용 하면 더욱 번 거 로 울 수 있 습 니 다.다운로드:화면 캡 처 ActivX 컨트롤
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.