📄 cescreengrabview.h
字号:
// CeScreenGrabView.h : interface of the CCeScreenGrabView class
//
/////////////////////////////////////////////////////////////////////////////
#pragma once
#include "dibsection.h"
#include <atlcrack.h>
#include <atlmisc.h>
#include "RemoteAPI.h"
typedef struct _MOUSEMSG
{
UINT nMsg;
WPARAM wParam;
LPARAM lParam;
} MOUSEMSG;
class CCeScreenGrabView : public CScrollWindowImpl<CCeScreenGrabView>
{
public:
DECLARE_WND_CLASS(NULL)
CCeScreenGrabView()
: m_bConnect(false)
{
}
void CopyToClipboard()
{
if(m_dib.GetSafeHandle() == NULL)
return;
if(OpenClipboard())
{
CDC dcMemSrc,
dcMemTgt;
HDC hDC = GetDC();
HBITMAP hBmp;
dcMemSrc.CreateCompatibleDC(hDC);
dcMemTgt.CreateCompatibleDC(hDC);
hBmp = CreateCompatibleBitmap(hDC, m_dib.GetWidth(), m_dib.GetHeight());
dcMemSrc.SelectBitmap(m_dib.GetSafeHandle());
dcMemTgt.SelectBitmap(hBmp);
dcMemTgt.BitBlt(0, 0, m_dib.GetWidth(), m_dib.GetHeight(), dcMemSrc, 0, 0, SRCCOPY);
EmptyClipboard();
SetClipboardData(CF_BITMAP, hBmp);
CloseClipboard();
}
}
void GrabCeScreen()
{
if(m_bConnect)
{
DWORD dwOutput;
BYTE* pBuffer;
HRESULT hr;
hr = m_rapi.Invoke(_T("CeScreenCapture.dll"), _T("CeScreenCapture"), 0, NULL, &dwOutput, &pBuffer, NULL, 0);
if(SUCCEEDED(hr))
{
if(dwOutput > sizeof(DIBINFO))
{
BITMAPINFO* pBitmap = (DIBINFO*)pBuffer;
BYTE* pBits = pBuffer + sizeof(DIBINFO);
SetScrollSize(pBitmap->bmiHeader.biWidth, pBitmap->bmiHeader.biHeight);
m_dib.SetBitmap(pBitmap, pBits);
Invalidate();
UpdateWindow();
}
m_rapi.FreeBuffer(pBuffer);
}
}
}
BOOL PreTranslateMessage(MSG* pMsg)
{
pMsg;
return FALSE;
}
void DoPaint(CDCHandle dc)
{
HBITMAP hBmp = m_dib;
if(hBmp)
{
CDC dcMem;
dcMem.CreateCompatibleDC(dc);
dcMem.SelectBitmap(hBmp);
dc.BitBlt(0, 0, m_dib.GetWidth(), m_dib.GetHeight(), dcMem, 0, 0, SRCCOPY);
}
}
BEGIN_MSG_MAP(CCeScreenGrabView)
CHAIN_MSG_MAP(CScrollWindowImpl<CCeScreenGrabView>)
END_MSG_MAP()
// Handler prototypes (uncomment arguments if needed):
// LRESULT MessageHandler(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
// LRESULT CommandHandler(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
// LRESULT NotifyHandler(int /*idCtrl*/, LPNMHDR /*pnmh*/, BOOL& /*bHandled*/)
private:
CDIBSection m_dib;
CRemoteAPI m_rapi;
bool m_bConnect;
public:
bool Connect()
{
RAPIINIT ri;
HRESULT hr;
if(m_bConnect)
return 0;
ri.cbSize = sizeof(ri);
ri.heRapiInit = NULL;
ri.hrRapiInit = S_OK;
hr = m_rapi.InitEx(&ri);
if(SUCCEEDED(hr))
{
if(WaitForSingleObject(ri.heRapiInit, 5000) == WAIT_OBJECT_0)
{
m_bConnect = true;
GrabCeScreen();
}
}
return m_bConnect;
}
void Disconnect()
{
if(!m_bConnect)
return;
m_rapi.Uninit();
m_bConnect = false;
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -