服务核心 - 工具类

虽然类名称为CWHService,我理解更多的是工具函数。

主要接口功能有:

1)SetClipboardString设置字符串到windows剪贴板

2)GetMachineID获取机器标识,网卡地址MD5加密;

3)GetMachineIDEx获取机器标识,网卡地址和硬盘信息MD5加密;

4)RegisterHotKey与UnRegisterHotKey为注册热键和注销热键;

5)GetWorkDirectory获取进程所在路径;

6)GetModuleVersion获取软件版本信息;

7)CompressData与UnCompressData为压缩和解压数据,需要zlib库。

  1 //
  2 
  3 //压缩文件
  4 #include "Compress\ZLib.h"
  5 
  6 //链接文件
  7 #ifndef _DEBUG
  8     #pragma comment(lib,"Version")
  9     #pragma comment(lib,"Compress\\ZLib.lib")
 10 #else
 11     #pragma comment(lib,"Version")
 12     #pragma comment(lib,"Compress\\ZLibD.lib")
 13 #endif
 14 
 15 //
 16 
 17 //状态信息
 18 struct tagAstatInfo
 19 {
 20     ADAPTER_STATUS                    AdapterStatus;                        //网卡状态
 21     NAME_BUFFER                        NameBuff[16];                        //名字缓冲
 22 };
 23 
 24 //
 25 
 26 //构造函数
 27 CWHService::CWHService()
 28 {
 29 }
 30 
 31 //拷贝字符
 32 bool CWHService::SetClipboardString(LPCTSTR pszString)
 33 {
 34     //变量定义
 35     HANDLE hData=NULL;
 36     BOOL bOpenClopboard=FALSE;
 37 
 38     //执行逻辑
 39     __try
 40     {
 41         //打开拷贝
 42         bOpenClopboard=OpenClipboard(AfxGetMainWnd()->m_hWnd);
 43         if (bOpenClopboard==FALSE) __leave;
 44 
 45         //清空拷贝
 46         if (EmptyClipboard()==FALSE) __leave;
 47 
 48         //申请内存
 49         HANDLE hData=GlobalAlloc(GMEM_MOVEABLE|GMEM_ZEROINIT,CountStringBuffer(pszString));
 50         if (hData==NULL) __leave;
 51 
 52         //复制数据
 53         lstrcpy((LPTSTR)GlobalLock(hData),pszString);
 54         GlobalUnlock(hData);
 55 
 56         //设置数据
 57         #ifndef _UNICODE
 58             ::SetClipboardData(CF_TEXT,hData);
 59         #else
 60             ::SetClipboardData(CF_UNICODETEXT,hData);
 61         #endif
 62     }
 63 
 64     //终止程序
 65     __finally
 66     {
 67         //释放内存
 68         if (hData!=NULL) GlobalUnlock(hData);
 69 
 70         //关闭拷贝
 71         if (bOpenClopboard==TRUE) CloseClipboard();
 72 
 73         //错误判断
 74         if (AbnormalTermination()==TRUE)
 75         {
 76             ASSERT(FALSE);
 77         }
 78     }
 79 
 80     return true;
 81 }
 82 
 83 //机器标识
 84 bool CWHService::GetMachineID(TCHAR szMachineID[LEN_MACHINE_ID])
 85 {
 86     //变量定义
 87     TCHAR szMACAddress[LEN_NETWORK_ID]=TEXT("");
 88 
 89     //网卡标识
 90     GetMACAddress(szMACAddress);
 91 
 92     //转换信息
 93     ASSERT(LEN_MACHINE_ID>=LEN_MD5);
 94     CWHEncrypt::MD5Encrypt(szMACAddress,szMachineID);
 95 
 96     return true;
 97 }
 98 
 99 //机器标识
100 bool CWHService::GetMachineIDEx(TCHAR szMachineID[LEN_MACHINE_ID])
101 {
102     //变量定义
103     TCHAR szMACAddress[LEN_NETWORK_ID]=TEXT("");
104 
105     //网卡标识
106     WORD wMacSize=GetMACAddress(szMACAddress);
107 
108     //硬盘标识
109     DWORD *pbuf=(DWORD*)szMACAddress;
110     WORD wIndex=(wMacSize+sizeof(DWORD)-1)/sizeof(DWORD);
111     LPCTSTR pszHardDisk[]={TEXT("C:\\"),TEXT("D:\\"),TEXT("E:\\")};
112     for (WORD i=wIndex;i<CountArray(pszHardDisk);i++)
113     {
114         ASSERT(CountArray(pszHardDisk)>(i-wIndex));
115         GetVolumeInformation(pszHardDisk[i-wIndex],NULL,0,pbuf+i,NULL,NULL,0,NULL);
116     }
117 
118     //转换信息
119     ASSERT(LEN_MACHINE_ID>=LEN_MD5);
120     CWHEncrypt::MD5Encrypt(szMACAddress,szMachineID);
121 
122     return true;
123 }
124 
125 //网卡地址
126 bool CWHService::GetMACAddress(TCHAR szMACAddress[LEN_NETWORK_ID])
127 {
128     //变量定义
129     HINSTANCE hInstance=NULL;
130 
131     //执行逻辑
132     __try
133     {
134         //加载 DLL
135         hInstance=LoadLibrary(TEXT("NetApi32.dll"));
136         if (hInstance==NULL) __leave;
137 
138         //获取函数
139         typedef BYTE __stdcall NetBiosProc(NCB * Ncb);
140         NetBiosProc * pNetBiosProc=(NetBiosProc *)GetProcAddress(hInstance,"Netbios");
141         if (pNetBiosProc==NULL) __leave;
142 
143         //变量定义
144         NCB Ncb;
145         LANA_ENUM LanaEnum;
146         ZeroMemory(&Ncb,sizeof(Ncb));
147         ZeroMemory(&LanaEnum,sizeof(LanaEnum));
148 
149         //枚举网卡
150         Ncb.ncb_command=NCBENUM;
151         Ncb.ncb_length=sizeof(LanaEnum);
152         Ncb.ncb_buffer=(BYTE *)&LanaEnum;
153         if ((pNetBiosProc(&Ncb)!=NRC_GOODRET)||(LanaEnum.length==0)) __leave;
154 
155         //获取地址
156         if (LanaEnum.length>0)
157         {
158             //变量定义
159             tagAstatInfo Adapter;
160             ZeroMemory(&Adapter,sizeof(Adapter));
161 
162             //重置网卡
163             Ncb.ncb_command=NCBRESET;
164             Ncb.ncb_lana_num=LanaEnum.lana[0];
165             if (pNetBiosProc(&Ncb)!=NRC_GOODRET) __leave;
166 
167             //获取状态
168             Ncb.ncb_command=NCBASTAT;
169             Ncb.ncb_length=sizeof(Adapter);
170             Ncb.ncb_buffer=(BYTE *)&Adapter;
171             Ncb.ncb_lana_num=LanaEnum.lana[0];
172             strcpy((char *)Ncb.ncb_callname,"*");
173             if (pNetBiosProc(&Ncb)!=NRC_GOODRET) __leave;
174 
175             //获取地址
176             for (INT i=0;i<6;i++)
177             {
178                 ASSERT((i*2)<LEN_NETWORK_ID);
179                 _stprintf(&szMACAddress[i*2],TEXT("%02X"),Adapter.AdapterStatus.adapter_address[i]);
180             }
181         }
182     }
183 
184     //结束清理
185     __finally
186     {
187         //释放资源
188         if (hInstance!=NULL)
189         {
190             FreeLibrary(hInstance);
191             hInstance=NULL;
192         }
193 
194         //错误断言
195         if (AbnormalTermination()==TRUE)
196         {
197             ASSERT(FALSE);
198         }
199     }
200 
201     return true;
202 }
203 
204 //注销热键
205 bool CWHService::UnRegisterHotKey(HWND hWnd, UINT uKeyID)
206 {
207     //注销热键
208     BOOL bSuccess=::UnregisterHotKey(hWnd,uKeyID);
209 
210     return (bSuccess==TRUE)?true:false;
211 }
212 
213 //注册热键
214 bool CWHService::RegisterHotKey(HWND hWnd, UINT uKeyID, WORD wHotKey)
215 {
216     //变量定义
217     BYTE cbModifiers=0;
218     if (HIBYTE(wHotKey)&HOTKEYF_ALT) cbModifiers|=MOD_ALT;
219     if (HIBYTE(wHotKey)&HOTKEYF_SHIFT) cbModifiers|=MOD_SHIFT;
220     if (HIBYTE(wHotKey)&HOTKEYF_CONTROL) cbModifiers|=MOD_CONTROL;
221 
222     //注册热键
223     BOOL bSuccess=::RegisterHotKey(hWnd,uKeyID,cbModifiers,LOBYTE(wHotKey));
224 
225     return (bSuccess==TRUE)?true:false;
226 }
227 
228 //进程目录
229 bool CWHService::GetWorkDirectory(TCHAR szWorkDirectory[], WORD wBufferCount)
230 {
231     //模块路径
232     TCHAR szModulePath[MAX_PATH]=TEXT("");
233     GetModuleFileName(AfxGetInstanceHandle(),szModulePath,CountArray(szModulePath));
234 
235     //分析文件
236     for (INT i=lstrlen(szModulePath);i>=0;i--)
237     {
238         if (szModulePath[i]==TEXT('\\'))
239         {
240             szModulePath[i]=0;
241             break;
242         }
243     }
244 
245     //设置结果
246     ASSERT(szModulePath[0]!=0);
247     lstrcpyn(szWorkDirectory,szModulePath,wBufferCount);
248 
249     return true;
250 }
251 
252 //文件版本
253 bool CWHService::GetModuleVersion(LPCTSTR pszModuleName, DWORD & dwVersionInfo)
254 {
255     //设置结果
256     dwVersionInfo=0L;
257 
258     //接收缓冲
259     BYTE cbInfoBuffer[1024];
260     ZeroMemory(cbInfoBuffer,sizeof(cbInfoBuffer));
261 
262     //模块信息
263     DWORD dwFileHandle=NULL;
264     if (GetFileVersionInfo(pszModuleName,dwFileHandle,sizeof(cbInfoBuffer),cbInfoBuffer)==FALSE) return false;
265 
266     //获取信息
267     UINT uQuerySize=0;
268     VS_FIXEDFILEINFO * pFixedFileInfo=NULL;
269     if (VerQueryValue(cbInfoBuffer,TEXT("\\"),(VOID * *)&pFixedFileInfo,&uQuerySize)==FALSE) return false;
270 
271     //设置结果
272     if ((pFixedFileInfo!=NULL)&&(uQuerySize==sizeof(VS_FIXEDFILEINFO)))
273     {
274         //设置版本
275         WORD wVersion1=HIWORD(pFixedFileInfo->dwFileVersionMS);
276         WORD wVersion2=LOWORD(pFixedFileInfo->dwFileVersionMS);
277         WORD wVersion3=HIWORD(pFixedFileInfo->dwFileVersionLS);
278         WORD wVersion4=LOWORD(pFixedFileInfo->dwFileVersionLS);
279         dwVersionInfo=MAKELONG(MAKEWORD(wVersion4,wVersion3),MAKEWORD(wVersion2,wVersion1));
280 
281         return true;
282     }
283 
284     return false;
285 }
286 
287 //压缩数据
288 ULONG CWHService::CompressData(LPBYTE pcbSourceData, ULONG lSourceSize, BYTE cbResultData[], ULONG lResultSize)
289 {
290     //压缩数据
291     if (compress(cbResultData,&lResultSize,pcbSourceData,lSourceSize)==0L)
292     {
293         return lResultSize;
294     }
295 
296     return 0L;
297 }
298 
299 //解压数据
300 ULONG CWHService::UnCompressData(LPBYTE pcbSourceData, ULONG lSourceSize, BYTE cbResultData[], ULONG lResultSize)
301 {
302     //解压数据
303     if (uncompress(cbResultData,&lResultSize,pcbSourceData,lSourceSize)==0L)
304     {
305         return lResultSize;
306     }
307 
308     return 0L;
309 }
310 
311 //

 

转载于:https://www.cnblogs.com/99code/p/5783629.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256573.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

现代制造工程课堂笔记07——应力应变分析(考点应力莫尔圆)

目录 选择判断题&#xff0c;简单计算在莫尔圆那里出 一、单向拉伸中的应力应变 手写笔记 选择判断题&#xff0c;简单计算在莫尔圆那里出 一、单向拉伸中的应力应变 、 手写笔记

win10+tensorflow CPU 部署CTPN环境

刚弄明白CTPN部署的时候&#xff0c;CTPN作者刚更新了简易代码版本&#xff0c;看介绍是把代码优化了不需要多的配置。。。感觉好忧伤&#xff01; 源码地址&#xff1a;https://github.com/eragonruan/text-detection-ctpn/tree/master 新版本地址&#xff1a;https://githu…

css如何实现背景透明,文字不透明?

之前做了个半透明弹层&#xff0c;但设置背景半透明时&#xff0c;子元素包含的字体及其它元素也都变成了半透明。对opacity这个属性认识的不透彻&#xff0c;在这里做一些总结&#xff0c;方便以后使用。 背景透明&#xff0c;文字不透明的解决方法&#xff1a;为元素添加一个…

SQL Server 使用OPENROWSET访问ORACLE遇到的各种坑总结

在SQL Server中使用OPENROWSET访问ORACLE数据库时&#xff0c;你可能会遇到各种坑&#xff0c;下面一一梳理一下你会遇到的一些坑。 1&#xff1a;数据库没有开启"Ad Hoc Distributed Queries"选项&#xff0c;那么你就会遇到下面坑。 SELECT TOP 10 * FROM OPENROWS…

matlab——FFT傅里叶快速变换

目录 一、自身的理解与补充 二、其他参考链接 一、转载:https://blog.csdn.net/u013215903/article/details/48091359 FFT是Fast Fourier Transform(快速傅里叶变换)的简称,这种算法可以减少计算DFT(离散傅里叶变换,关于此更详细的说明见后文)的时间,大大提高了运算效…

win10+tensorflow import cv2 bug解决

https://blog.csdn.net/sinat_21591675/article/details/82595812

设计理念 : popup login 在前后台

popup 意思是一个遮罩层顶在整个网页最前方&#xff0c;在前台设计是这样的&#xff0c;当用户想在那个界面登入时&#xff0c;就可以有一个遮罩层出现。 在employer或admin&#xff08;后台&#xff09;操作界面是同个理念&#xff0c;在所有的界面都是有control panel为根节点…

input和raw_input

12345678910python 2#!/usr/bin/env python#coding:utf-8nameraw_input("plese input you name") print namepython3#!/usr/bin/env python#coding:utf-8nameinput("plese input you name") print name本文转自 小小三郎1 51CTO博客&#xff0c;原文链接…

MAATLAB GUI——回调函数的设置(Callbacks)

目录 1.回调函数创建步骤 1)命令窗口中输入guide,创建一个新的GUI界面窗口

是什么时候开始学习gulp了

转自&#xff1a;http://www.ydcss.com/archives/18 简介&#xff1a; gulp是前端开发过程中对代码进行构建的工具&#xff0c;是自动化项目的构建利器&#xff1b;她不仅能对网站资源进行优化&#xff0c;而且在开发过程中很多重复的任务能够使用正确的工具自动完成&#xff1…

011——数组(十一)array_merge array_merge_recursive array_change_key_case

<?php /***/ //array_merge() 将多个数组合并&#xff0c;生成新数组。当键名相同时&#xff0c;后者覆盖前者 /*$array1array(weburl>"bbs.blog.com",webname>"博客"); $array2array(db_hot>"localhost",db_user>"root&qu…

matlab GUI——按下按钮在指定的坐标下绘制函数图像

目录 1.组件布局 2.回调函数设置 3.编写回调函数 1.组件布局 2.回调函数设置 右键单击plot按钮——查看回调——call backs

【转】【UML】使用Visual Studio 2010 Team System中的架构师工具(设计与建模)

Lab 1: 应用程序建模 实验目标 这个实验的目的是展示如何在Visual Studio 2010旗舰版中进行应用程序建模。团队中的架构师会通过建模确定应用程序是否满足客户的需求。 你可以创建不同级别的详细模型&#xff0c;并将它们彼此结合、测试然后发布到你的开发计划里。 在这个实验中…

C语言:指针的几种形式二

一、const指针 1、const int* p和int const* p:两者意义是相同的。指向的内容是只读数据&#xff0c;不可以q改变&#xff1b;但是指向的地址可以改变。2、int* const p&#xff1a;必须先对指针初始化&#xff0c;而且指向的地址是只读的&#xff0c;不可以再被改变&#xff1…

深度学习基础(一)起源

目录 一、DP的前世 1.perceptron 2.NN 3.DP 二、DP的基础知识 1.convolution 2.padding 3.pooling 4.Flatten 5.fully connected 6.dropout 一、DP的前世 深度学习发展至今经历颇为曲折&#xff0c;上世纪起源&#xff0c;火热起来也是20世纪初的时候&#xff0c;具体时…

ANSYS经典界面中梁单元实例全解析

转载链接&#xff1a;http://www.jishulink.com/content/post/361389 文中红色部分为自己添加&#xff01;&#xff01;&#xff01; 转载的文章中提到的梁单元截面是常用的工字形&#xff0c;那么要是不规则的截面形状的话需要自己进行截面形状绘制&#xff0c;具体可以参考…

ant的安装和使用

1.ant的安装 1.1 添加环境变量&#xff1a;ANT_HOMED:\software\ant\apache-ant-1.10.1 在path中添加&#xff1a;%ANT_HOME%\bin 1.2 测试是否安装成功 在cmd中输入ant&#xff0c;如果出现如下提示表示安装成功 2.定义简单的build.xml 2.1 创建HelloWord.java package test; …

深度学习之tensorflow (一) XORerr1 -修改

博客背景是学习《深度学习之TensorFlow》这本书籍中的作业&#xff0c;修改第七章的作业&#xff0c;把XOR-异或的错误代码修改为正确的。 主要修改有三个地方&#xff1a; 隐藏层一的运算从sigmoid修改为add运算&#xff1b;输出层的运算修改为sigmoid&#xff08;原来是什么…

可调用对象

# -*- coding: utf-8 -*- #python 27 #xiaodeng #可调用对象 #http://www.cnpythoner.com/post/306.html#定义&#xff1a; #许多python对象都是可调用的&#xff0c;即&#xff1a;任何通过函数操作符()来调用的对象。 #callable()是一个布尔函数&#xff0c;确定一个对象是否…