1.为程序添加快捷方式
void CSysToolSampleDlg::OnButtonCreatelink() // 为程序添加快捷方式
{
if (!SUCCEEDED(CoInitialize(NULL))) // 初始化COM组件
{
WriteLog("初始化Shell失败"); // 初始化失败显示信息
return; // 返回
}
IShellLink *pisl; // 定义快捷方式接口变量
if (SUCCEEDED(CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkA, (void**)&pisl)))
{ // 创建快捷方式实例
IPersistFile* pIPF; // 定义文件接口变量
CString szPath; // 定义文件名变量
GetModuleFileName(GetModuleHandle(NULL), szPath.GetBuffer(MAX_PATH), MAX_PATH); // 获取运行路径
pisl->SetPath(szPath); // 设置文件接口的路径为当前运行路径
szPath.ReleaseBuffer(); // 释放路径变量
if (SUCCEEDED(pisl->QueryInterface(IID_IPersistFile, (void**)&pIPF)))
{ // 创建文件实例
CString szLinkPath; // 定义创建的快捷方式的路径
SHGetSpecialFolderPath(0, szLinkPath.GetBuffer(MAX_PATH), CSIDL_DESKTOPDIRECTORY, 0);// 获取桌面对应的路径
szLinkPath.ReleaseBuffer(); // 释放快捷方式路径变量
szLinkPath += szPath.Mid(szPath.ReverseFind('\\')); // 设置快捷方式的文件名
szLinkPath += ".lnk"; // 设置快捷方式的扩展名
WCHAR wpath[MAX_PATH] = { 0 }; // 定义Unicode字符串
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szLinkPath, -1, wpath, MAX_PATH); // 将快捷方式的完整文件名转换为Unicode
pIPF->Save(wpath, FALSE); // 设置快捷方式对应的文件名
pIPF->Release(); // 释放文件接口
WriteLog("创建快捷方式成功,快捷方式路径=%s", szLinkPath); // 显示创建的快捷方式信息
}
else
WriteLog("创建文件接口IID_IPersistFile失败"); // 显示错误信息
pisl->Release(); // 释放文件接口
}
else WriteLog("创建CLSID_ShellLink实例失败"); // 显示错误信息
CoUninitialize(); // 释放COM组件工作环境
}
2.显示系统正在运行的程序
void CSysToolSampleDlg::OnButtonGetproclist() // 显示系统正在运行的程序
{
HANDLE hPS=NULL; // 定义进程快照句柄
PROCESSENTRY32 pe32={0}; // 定义进程结构变量
hPS = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // 创建进程快照
if (hPS == (HANDLE)-1)
{
WriteLog("调用CreateToolhelp32Snapshot函数创建进程快照失败"); // 显示错误信息
return; // 返回
}
pe32.dwSize = sizeof(PROCESSENTRY32); // 为进程结构的大小分量赋值
if (Process32First(hPS, &pe32)) // 检索快照中的第一个进程
{
do
{ // 显示检索到得进程信息
WriteLog("\n优先级=%d\t进程ID=%d\t线程数目=%d\t模块名称=%s",pe32.pcPriClassBase, pe32.th32ProcessID, pe32.cntThreads, pe32.szExeFile);
}
while (Process32Next(hPS, &pe32)); // 检索快照中的下一个进程
}
else
WriteLog("调用Process32First函数枚举运行程序失败"); // 显示错误信息
CloseHandle (hPS); // 关闭进程快照句柄
}
3.如何获取毫秒级时间
void CSysToolSampleDlg::OnButtonGetmillsecond() // 如何获得毫秒级时间
{
DWORD t1 = timeGetTime(); // 获取自系统启动到现在经过的毫秒数
Sleep(10); // 程序休眠10毫秒
DWORD t2 = timeGetTime(); // 获取自系统启动到现在经过的毫秒数
WriteLog("开始时间=%u", t1); // 输出开始时间
WriteLog("结束时间=%u", t2); // 输出结束时间
WriteLog("计时器10毫秒持续的时间=%u", (t2- t1));// 输出10毫秒经过的时间间隔
}
4.注册和卸载组件
void CSysToolSampleDlg::OnButtonRegistcom() // 注册组件
{
CString szPath= "COMSample.dll"; // 定义组件路径名称
HINSTANCE hLib=LoadLibrary(szPath); // 装载组件
if (hLib == NULL) // 如果装载失败,
{
WriteLog("装载%s组件文件失败!", szPath); // 输出错误信息
return; // 并返回
}
FARPROC lpEntryPoint = GetProcAddress(hLib,_T("DllRegisterServer")); // 获取DllRegisterServer函数指针
if (lpEntryPoint != NULL) // 如果入口函数不为NULL,则
{ // 调用函数注册组件
if(FAILED((*lpEntryPoint)())) WriteLog("调用组件%s的DllRegisterServer函数失败!", szPath);// 输出错误信息
else WriteLog("注册%s组件成功!", szPath); // 输出成功信息
}
else WriteLog("没有找到组件%s的入口函数DllRegisterServer,无法注册!", szPath); // 输出错误信息
FreeLibrary(hLib); // 释放对组件的引用
}
void CSysToolSampleDlg::OnButtonUnregistcom() // 卸载组件
{
CString szPath= "COMSample.dll"; // 定义组件路径名称
HINSTANCE hLib=LoadLibrary(szPath); // 装载组件
if (hLib == NULL) // 如果装载失败,
{
WriteLog("装载%s组件文件失败!", szPath); // 输出错误信息
return; // 并返回
}
FARPROC lpEntryPoint = GetProcAddress(hLib,_T("DllUnregisterServer")); // 获取DllUnregisterServer函数指针
if (lpEntryPoint != NULL) // 如果入口函数不为NULL,则
{ // 调用函数卸载组件
if(FAILED((*lpEntryPoint)())) WriteLog("调用组件%s的DllUnregisterServer失败!", szPath); // 输出错误信息
else WriteLog("卸载%s组件成功!", szPath); // 输出成功信息
}
else WriteLog("没有找到组件%s的入口函数DllUnregisterServer,无法卸载!", szPath); // 输出错误信息
FreeLibrary(hLib); // 释放对组件的引用
}
5.清空回收站
void CSysToolSampleDlg::OnButtonClearbin() // 清空回收站
{
if( SHEmptyRecycleBin(this->m_hWnd, NULL, NULL) == S_OK) // 清空回收站
WriteLog("清空回收站完成"); // 输出成功信息
else WriteLog("清空回收站失败"); // 输出错误信息
}
6.如何在程序中显示文件属性对话框
void CSysToolSampleDlg::OnButtonShowprodig() // 在程序中显示文件属性对话框
{
CString szPath; // 定义路径
GetCurrentDirectory(MAX_PATH, szPath.GetBuffer(MAX_PATH)); // 获取当前运行路径
szPath.ReleaseBuffer(); // 释放路径变量
SHELLEXECUTEINFO seci; // 定义可执行信息
ZeroMemory(&seci,sizeof(seci)); // 初始化可行性信息变量
seci.cbSize = sizeof(SHELLEXECUTEINFO); // 赋值可执行变量的大小
seci.hwnd = this->m_hWnd; // 赋值窗体句柄
seci.lpParameters = NULL; // 赋值参数为NULL
seci.lpDirectory = szPath; // 赋值文件夹
seci.nShow = 0; // 不显示文件
seci.hInstApp = 0; // 赋值应用实例
szPath += "\\ReadMe.txt"; // 文件名
seci.lpFile = szPath; // 赋值文件名
seci.lpVerb = "properties"; // 赋值调用版本为属性
seci.fMask = SEE_MASK_NOCLOSEPROCESS|SEE_MASK_INVOKEIDLIST|SEE_MASK_FLAG_NO_UI; // 设置选项
ShellExecuteEx(&seci); // 调用文件属性对话框
}