QQ登录

只需一步,快速开始

391上位机VC MFC编写桌面截图工具

[ 复制链接 ]

391上位机VC MFC编写桌面截图工具

391上位机VC MFC编写桌面截图工具

编写桌面截图工具
功能展示
操作电脑时常要进行桌面截屏,我们当前例程也自己编写代码实现桌面截屏功能,效果如图,截屏可以通过点击按钮完成,也可以通过事先设置的快捷键完成,还可以选择是否抓取鼠标,截屏的图片会保存到指定的路径中,路径可以通过<选择路径>实现设置,快捷键可以通过<生效>按钮设置

要点提示
例程关键一点是热键的使用,其注册与注销是通过函数RegisterHotKey()与UnregisterHotKey()实现。
RegisterHotKey函数的功能是该函数定义一个系统范围的热键。函数原型:BOOL RegisterHotKey(HWND hWnd,int id,UINT fsModifiers,UINT vk);hWnd:接收热键产生WM_HOTKEY消息的窗口句柄。若该参数NULL,传递给调用线程的WM_HOTKEY消息必须在消息循环中进行处理。id:定义热键的标识符。调用线程中的其他热键,不能使用同样的标识符。应用程序必须定义一个0X0000-0xBFFF范围的值。fsModifoers:
定义为了产生WM_HOTKEY消息而必须与由nVirtKey参数定义的键一起按下的键。vk:定义热键的虚拟键码。

BOOL UnregisterHotKey( HWND hWnd, int id ); hWnd 与被释放的热键相关的窗口句柄。若热键不与窗口相关,则该参数为NULL。Id 定义被释放的热键的标识符。

实现过程大致为
1.先定义一消息#define HOTKEY_GRASP WM_USER+1; 程序初始化时再注册此消息RegisterHotKey(this->GetSafeHwnd(),HOTKEY_GRASP,wmod,wvk);这样只要用户按下热键,系统就会向函数注册的窗口发送WM_HOTKEY消息并传递我们注册的自定义消息HOTKEY_GRASP;
2.手动添加系统消息WM_HOTKEY的响应函数,如例程函数定义afx_msg void OnHotKey(WPARAM wParam,LPARAM lParam);函数申明void CGkbc8Dlg::OnHotKey(WPARAM wParam,LPARAM lParam){} 。消息映射
ON_MESSAGE(WM_HOTKEY,OnHotKey)

实现功能
1.新建基于对话框的应用程序
2.在主对话框头文件添加#include <windowsx.h> #include <math.h>#define HOTKEY_GRASP WM_USER+1 ,并复制根目录文件 System.ini到自己的工程根目录;
3.依照例程界面添加编辑框IDC_EDIT2用于路径的输入,添加热键控件IDC_HOTKEY1用于热键的输入,添加选择框IDC_CHECK1用于设置是否抓取鼠标,添加按钮控件<生效><选择路径><执行屏截图>关联点击函数,顾名思义实现其对应功能

void CGkbc8Dlg::OnActive()
{
::UnregisterHotKey(this->GetSafeHwnd(),HOTKEY_GRASP);
DWORD wHotKey,wModify;
UINT fsModifiers,vk;
wHotKey = ((CHotKeyCtrl*)GetDlgItem(IDC_HOTKEY1))->GetHotKey();
wModify = (WORD)(wHotKey >> 8);
fsModifiers = 0;
if( wModify & HOTKEYF_SHIFT )
fsModifiers |= MOD_SHIFT ;
if( wModify & HOTKEYF_CONTROL )
fsModifiers |= MOD_CONTROL;
if( wModify & HOTKEYF_ALT )
fsModifiers |= MOD_ALT;
vk = (UINT)LOBYTE(wHotKey);
//<>
BOOL result=RegisterHotKey(this->GetSafeHwnd(),HOTKEY_GRASP,fsModifiers,vk);
if(!result)
{
MessageBox("注册热键失败");
return;
}
CString path,strwvk,strwmod,strmouse;
GetDlgItemText(IDC_EDIT2,path);
WritePrivateProfileString("Set","path",path,"./System.ini");

strwvk.Format("%d",vk);
WritePrivateProfileString("Set","wvk",strwvk,"./System.ini");
strwmod.Format("%d",fsModifiers);
WritePrivateProfileString("Set","wmod",strwmod,"./System.ini");

CButton* pCheck=(CButton*)GetDlgItem(IDC_CHECK1);
strmouse.Format("%d",pCheck->GetCheck());
WritePrivateProfileString("Set","capmouse",strmouse,"./System.ini");
}

void CGkbc8Dlg::OnSelectpath()
{
CString ReturnPach; //字符串变量
TCHAR szPath[_MAX_PATH]; //保存路径变量
BROWSEINFO bi; // BROWSEINFO结构变量
bi.hwndOwner = NULL; //HWND句柄
bi.pidlRoot = NULL; //默认值为NULL
bi.lpszTitle = _T("文件浏览对话框"); //对话框标题
bi.pszDisplayName = szPath; //选择文件夹路径
bi.ulFlags = BIF_RETURNONLYFSDIRS; //标记
bi.lpfn = NULL; //默认值为NULL
bi.lParam = NULL; //回调消息
LPITEMIDLIST pItemIDList = SHBrowseForFolder(&bi);//显示文件浏览对话框
if(pItemIDList)
{
if(SHGetPathFromIDList(pItemIDList,szPath)) //判断是否获得文件夹路径
ReturnPach = szPath; //获得文件夹路径
}
else
{
ReturnPach = ""; //文件夹路径为空
}
SetDlgItemText(IDC_EDIT2,ReturnPach);
}
4.程序初始化函数OnInitDialog()中实现控件的初始化及热键的注册,在程序退出时注销热键
WORD wvk,wmod;
char bufwvk[8],bufwmod[8],bufpath[256],bufmouse[2];
GetPrivateProfileString("Set","path","",bufpath,256,"./System.ini");
SetDlgItemText(IDC_EDIT2,bufpath);

GetPrivateProfileString("Set","capmouse","",bufmouse,2,"./System.ini");
((CButton*)GetDlgItem(IDC_CHECK1))->SetCheck(atoi(bufmouse));

GetPrivateProfileString("Set","wvk","",bufwvk,8,"./System.ini");
wvk = atoi(bufwvk);
GetPrivateProfileString("Set","wmod","",bufwmod,8,"./System.ini");
wmod = atoi(bufwmod);

((CHotKeyCtrl*)GetDlgItem(IDC_HOTKEY1))->SetHotKey(wvk,wmod);
BOOL result = RegisterHotKey(this->GetSafeHwnd(),HOTKEY_GRASP,wmod,wvk);

if(!result)
MessageBox("注册热键失败");

::UnregisterHotKey(this->GetSafeHwnd(),HOTKEY_GRASP);
5.实现系统热键消息WM_HOTKEY的函数关联,例程关联函数为OnHotKey(WPARAM wParam,LPARAM lParam),在此函数中调用截屏的按钮函数

我们来演示下功能实现的整个过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:391.上位机VC MFC编写桌面截图工具.zip 
文件大小:142.73 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!




回复

使用道具 举报

快速回复 返回列表 客服中心 搜索