服务核心 - 工具类

虽然类名称为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 //////////////////////////////////////////////////////////////////////////////////

 

posted @ 2016-08-18 13:43  jeffrey.chu  阅读(583)  评论(0编辑  收藏  举报

99code棋牌网