最近帮客户做了一个MFC小工具,发给客户使用之后,我就思考商业软件在运行前检测电脑是否可以运行该软件,有用加密狗的也有用注册表的方式.如果要我做这样的一个软件,我该怎么实现软件运行前检测呢,于是我想到可以用电脑全名检测的方法,于是查找资料找到了MSDN上获取电脑名的两个函数:GetComputerNameEx与GetComputerName.函数理解的并不是很好,具体使用不在此处介绍,此处仅介绍与我想法相关的功能,如里了解函数功能,可详细参考MSDN文档与文档中相关的例程.
用VS2008新建一个命名为TEST的工程,查阅相关资料需要找到启动对话框函数BOOL CTESTApp::InitInstance(),MFC的对话框程序就是在此处启动的.找到如下代码:
CDemoDlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
在INT_PTR nResponse = dlg.DoModal();之前添加判断条件,如果获取的计算机名与给定的字符一致则启动对话框,如果不一致则退出,如此可解决此问题.尝试添加以下代码:
TCHAR buffer[256]=TEXT("");
int cnf=0,result;
DWORD dwSize=sizeof(buffer);
CString szMsg;
if(!GetComputerNameEx((COMPUTER_NAME_FORMAT)ComputerNameNetBIOS,buffer,&dwSize))
{
szMsg.Format(TEXT("GetComputerNameEx failed(%d)\r\n"),GetLastError);
AfxMessageBox(szMsg);
return FALSE;
}
result = wcscmp(buffer,TEXT("QCWY-PC"));
if(result == 0)
{
AfxMessageBox(TEXT("软件登录中,请稍侯......"));
}
else
{
AfxMessageBox(TEXT("非法计算机,不能登录软件"));
return FALSE;
}
测试可以实现所预期的效果.同样的,此处使用加密狗的思路应与此相同.发现MSDN真有用,不懂的问题还是多参照MSDN,上面讲的足够详细.
由此可以实现自想要的功能了,真开心!!!!!