⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 capturescreendlg.cpp

📁 在wince中定时捕获桌面图片信息
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// CaptureScreenDlg.cpp : implementation file
//

#include "stdafx.h"
#include "CaptureScreen.h"
#include "CaptureScreenDlg.h"
#include <ATLCONV.H>

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//USES_CONVERSION;
#define MAX_LEN 260 
/////////////////////////////////////////////////////////////////////////////
// CCaptureScreenDlg dialog

CCaptureScreenDlg::CCaptureScreenDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CCaptureScreenDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CCaptureScreenDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
	i=1;
}

void CCaptureScreenDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CCaptureScreenDlg)
	DDX_Control(pDX, IDC_LIST1, m_List);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CCaptureScreenDlg, CDialog)
	//{{AFX_MSG_MAP(CCaptureScreenDlg)
	ON_MESSAGE(WM_SHOWTASK,onShowTask)
	ON_BN_CLICKED(IDC_BUTTON_CAPTURE, OnButtonCapture)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCaptureScreenDlg message handlers

BOOL CCaptureScreenDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen
	
//	ERRCODE err;
	strcpy(szCnPack,GetAppPathW());
	strcat(szCnPack,"\\CNPackage.dat");
	strcpy(szEnPack,GetAppPathW());
	strcat(szEnPack,"\\ENPackage.dat");
	strcpy(szDmPack,GetAppPathW());
	strcat(szDmPack,"\\DMPackage.dat");

//	err = jceInit(szCnPack,szEnPack,szDmPack);
//	if (err != ERR_NONE)		MessageBox(_T("TTS初始化错误!"));

	SetTimer(1,30000,NULL);

	NOTIFYICONDATA nid;
    nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
    nid.hWnd=this->m_hWnd;
    nid.uID=IDR_MAINFRAME;
    nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
    nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称
    nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
    //strcpy(nid.szTip,TEXT("计划任务提醒"));    //信息提示条为“计划任务提醒”
    Shell_NotifyIcon(NIM_ADD,&nid);    //在托盘区添加图标
    ShowWindow(SW_HIDE);    //隐藏主窗口 

	CRect rcClient;
	m_List.GetClientRect(&rcClient);
	int nWidth = rcClient.Width();
	m_List.InsertColumn(0, _T("id"), LVCFMT_LEFT, 40, 0);
	m_List.InsertColumn(1, _T("Address"), LVCFMT_LEFT, 60, 1);
	m_List.InsertColumn(2, _T("CustomCode"), LVCFMT_LEFT, 60, 2);
	m_List.InsertColumn(3, _T("CustomName"), LVCFMT_LEFT, 60, 2);
	m_List.InsertColumn(4, _T("CustomPhone"), LVCFMT_LEFT, 60, 2);
	m_List.InsertColumn(5, _T("Longitude"), LVCFMT_LEFT, 60, 2);
	m_List.InsertColumn(6, _T("Latitude"), LVCFMT_LEFT, 60, 2);


	return TRUE;  // return TRUE  unless you set the focus to a control
}



void CCaptureScreenDlg::OnButtonCapture() 
{
	CString szFileName;
	szFileName.Format(_T("%d.bmp"),i);
	CFile f;
	CFileException e;
	while(f.Open( szFileName,CFile::modeRead, &e ) )
	{
		i++;
		szFileName.Format(_T("%d.bmp"),i);
	}
	char szIniPath[MAX_PATH] ;
	memset(szIniPath,0,128);
	strcpy(szIniPath,GetAppPathW());
	char buffer[20];
   _itoa( i, buffer, 10 );
	strcpy(szIniPath,buffer);
	strcat(szIniPath,".bmp"); 
	OnScreenSave(szIniPath);
}
const char * CCaptureScreenDlg::GetAppPathW()
{
	TCHAR szAppName[MAX_PATH];		// 父目录的路径, 最后不带"\"
	TCHAR *pLastSlash;
	char szFileName[_MAX_PATH];
	memset(szFileName,0,128);

	GetModuleFileName(NULL, szAppName, MAX_PATH);
	pLastSlash = _tcsrchr(szAppName, _T('\\'));	// 截掉文件名,只保留路径
	if(pLastSlash!=NULL)	*pLastSlash=_T('\0');
	WideCharToMultiByte(CP_ACP, 0, szAppName, -1, szFileName, sizeof(szFileName), NULL, NULL);
	return szFileName;
}
void CCaptureScreenDlg::OnScreenSave(const char *filename)
{ 
    HDC hScrDC, hMemDC;         
    int width, height;

	BYTE *lpBitmapBits = NULL; 
        
	//creates a device context for the screen device
	hScrDC = CreateDC(_T("DISPLAY"), NULL, NULL, NULL);

	//get the screen point size
	width = GetDeviceCaps(hScrDC, HORZRES);
	height = GetDeviceCaps(hScrDC, VERTRES);

		//creates a memory device context (DC) compatible with the screen device(hScrDC) 
	hMemDC = CreateCompatibleDC(hScrDC);

	//and no compressing(biCompression=0) 
	BITMAPINFO RGB24BitsBITMAPINFO; 
	ZeroMemory(&RGB24BitsBITMAPINFO, sizeof(BITMAPINFO));
	RGB24BitsBITMAPINFO.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
	RGB24BitsBITMAPINFO.bmiHeader.biWidth = width;
	RGB24BitsBITMAPINFO.bmiHeader.biHeight = height;
	RGB24BitsBITMAPINFO.bmiHeader.biPlanes = 1;
	RGB24BitsBITMAPINFO.bmiHeader.biBitCount = 24;

	//use the function CreateDIBSection and SelectObject 
	//in order to get the bimap pointer : lpBitmapBits 
	HBITMAP directBmp = CreateDIBSection(hMemDC, (BITMAPINFO*)&RGB24BitsBITMAPINFO, 
			DIB_RGB_COLORS, (void **)&lpBitmapBits, NULL, 0);
	HGDIOBJ previousObject = SelectObject(hMemDC, directBmp);

	// copy the screen dc to the memory dc
	BitBlt(hMemDC, 0, 0, width, height, hScrDC, 0, 0, SRCCOPY);

	//bimap file header in order to write bmp file 
	BITMAPFILEHEADER bmBITMAPFILEHEADER;
	ZeroMemory(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER));
	bmBITMAPFILEHEADER.bfType = 0x4d42; //bmp 
		bmBITMAPFILEHEADER.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
		bmBITMAPFILEHEADER.bfSize = bmBITMAPFILEHEADER.bfOffBits + ((width*height)*3); ///3=(24 / 8)

	FILE *mStream = NULL;
	if((mStream = fopen(filename,"wb")))
	{ 
	   fwrite(&bmBITMAPFILEHEADER, sizeof(BITMAPFILEHEADER), 1, mStream);
	   fwrite(&(RGB24BitsBITMAPINFO.bmiHeader), sizeof(BITMAPINFOHEADER), 1, mStream);
	   fwrite(lpBitmapBits, 3*width*height, 1, mStream);
	   fclose(mStream);
	}
	DeleteObject(hMemDC);
	DeleteObject(hScrDC);
	DeleteObject(directBmp);
	DeleteObject(previousObject);

	char cVoice[64];	
	memset(cVoice, 0, 64);
	sprintf(cVoice,"抓图成功");				
//	ERRCODE err = jcePlay(cVoice, NULL, NULL, (DWORD)this);	
}


void CCaptureScreenDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	OnButtonCapture();
	CDialog::OnTimer(nIDEvent);
}

BOOL CCaptureScreenDlg::DestroyWindow() 
{
	// TODO: Add your specialized code here and/or call the base class
//	jceStop();	
	KillTimer(1);
	return CDialog::DestroyWindow();
}
LRESULT CCaptureScreenDlg::onShowTask(WPARAM wParam,LPARAM lParam)//wParam接收的是图标的ID,而lParam接收的是鼠标的行为
{
    if(wParam!=IDR_MAINFRAME)
        return 1;
    switch(lParam)
    {   
        case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭”
        {

            LPPOINT lpoint=new tagPOINT;
            ::GetCursorPos(lpoint);//得到鼠标位置
            CMenu menu;
            menu.CreatePopupMenu();//声明一个弹出式菜单
            //增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已
            //隐藏),将程序结束。
            menu.AppendMenu(MF_STRING,WM_DESTROY,L"关闭");
            //确定弹出式菜单的位置
            menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);
           //资源回收
            HMENU hmenu=menu.Detach();
            menu.DestroyMenu();
            delete lpoint;
			break;
        }        
        case WM_LBUTTONUP://WM_LBUTTONDBLCLK://双击左键的处理
        {
            this->ShowWindow(SW_SHOW);//简单的显示主窗口完事儿
			NOTIFYICONDATA nid;
			nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
			nid.hWnd=this->m_hWnd;
			nid.uID=IDR_MAINFRAME;
			nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
			nid.uCallbackMessage=WM_SHOWTASK;//自定义的消息名称
			nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));
			//strcpy(nid.szTip,TEXT("计划任务提醒"));    //信息提示条为“计划任务提醒”
			Shell_NotifyIcon(NIM_DELETE,&nid);    //在托盘区删除图标
			ShowWindow(SW_HIDE);    //隐藏主窗口 
			break;
        }
       
    }
    return 0;
}
WCHAR * ANSI2Unicode(char *szProgID)
{ 
	USES_CONVERSION; 
	return A2W(szProgID);
}
char * Unicode2ANSI(WCHAR * cName)
{
// 	LPTSTR lptName = NULL;
// 	char szANSIString [MAX_PATH]; 
// 	WideCharToMultiByte ( CP_ACP, WC_COMPOSITECHECK, lptName, -1, 
// 					 szANSIString, sizeof(szANSIString), NULL, NULL ); 
	USES_CONVERSION;
	return W2A(cName); 	 
}

void CCaptureScreenDlg::OnButton1() 
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -