系统相关功能开发(五)-系统工具

来源:互联网 发布:js继承面试题 编辑:程序博客网 时间:2024/06/01 09:19

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);// 将快捷方式的完整文件名转换为UnicodepIPF->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;// 赋值参数为NULLseci.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);// 调用文件属性对话框}