windows进程管理工具设计与实现(有源程序代码内容摘要:

程序是基于对话框的程序。 首先创建一个基于对话框的应用程序, 在主对话框类 PcsMgrDlg 中添加一个标签控件用于放置任务、进程和系统信息等三个页面 ,如图 3。 图 3 标签控件 子对话框的显示 子对话框的显示与切换 ,是通过标签控件完成的。 当用户点击标签控件上的每一项时 ,分别显示对应页面的相关信息。 要显示三个子对话框 ,需要添加三个对话框到工程中 ,并将 Style 属性设为 Child,Board 设为 None,取 消标题栏。 再分别创建三个对话框的类CTask ,CProcess,CChart,并定义这三个类的变量 : CTask m_Task。 //任务 CProcess m_Process。 //进程 CChart m_Chart。 //图表 并定义一个图像列表变量用于存放标签图标 :CImageList m_ImageList。 接下来就创建子窗口 : ,。 ,。 ,。 当用户选择标签中的一项是 ,为了将对应的对话框在标签控件中显示出来 ,需要在 OnShowWindowBOOL bShow,UINT nStatus 中添加代码相关代码。 这样便可将在个对话框分别显示于标签控件的每个页面中 ,但要实现选择标签的不同项显示不同页面还需在 OnSelchangeMaintabNMHDR* pNMHDR,LRESULT* pResult和 OnSelchangingMaintabNMHDR* pNMHDR,LRESULT* pResult 两函数中添加显示代码。 void CPcsMgrDlg::OnSelchangeMaintabNMHDR* pNMHDR, LRESULT* pResult case 0:。 //任务页面被选中 ,则显示任务页面。 break。 case 1:。 //任务页面被选中 ,则显示进程页面。 break。 case 2:。 //任务页面被选中 ,则显示系统信息页面。 break。 实现菜单 关机、注销、重起菜单命令是通过调用一个 Windows API 函数ExitWindowsEx 完成的。 但在 Windows 98 和 Windows 2020 实现稍有不同。 ExitWindowsEx 函数定义格式 : BOOL ExitWindowsEx UINT uFlags //操作 DWORD dwReason //原因。 在 Windows 98 实现“注销 /重启 /关机”功能将直接调用 ExitWindiwsEx函数 : ExitWindowsExEWX_LOGOFF,0。 // 注销 ExitWindowsExEWX_REBOOT,0。 // 重启 ExitWindowsExEWX_SHUTDOWN,0。 // 关机 在 Windows 2020 实现“注销 /重启 /关机”功能须取得高级权限 : LookupPrivilegeValueNULL,SE_SHUTDOWN_NAME,amp。 [0].Luid。 1。 [0].Attributes SE_PRIVILEGE_ENABLED。 AdjustTokenPrivilegeshToken,FALSE,amp。 tkp,0,PTOKEN_PRIVILEGESNULL,0。 ExitWindowsExFFlag,0。 新建菜单直接调用系统运行对话框 : RUN RunFileDlg。 RunFileDlg RUNGetProcAddresshShell32, MAKEINTRESOURCE61。 开机自动运行可在注册表的主键” HKEY_LOCAL_MACHINE”下的运行子键”Software\Microsoft\Windows\CurrentVersion\Run”下写入和删除一个键 值的方法实现。 提升本程序权限 为了能够终止所有进程 ,需要提升本进程的权限 : 先调用 GetCurrentProcess 函数取得当前进程的句柄。 然后调用 OpenProcessToken 打开当前进程的访问令牌。 接着调用 LookupPrivilegeValue 函数取得你想提升的权限的值。 最后调用 AdjustTokenPrivileges 函数给当前进程的访问令牌增加权限。 相关代码是在 CPcsMgrApp 类的 InitInstance 函数中添加。 任 务列表页面设计 该类实现当前系统运行任务 (有可见窗口的程序 )的管理 ,如查看当前任务 ,添加新任务 ,结束任务 ,切换任务等。 显示任务信息 任务信息包括桌面窗口中可见程序的程序名、路径、运行状态等信息。 在这里我们将在任务列表页面中添加一个列表控件 ,用于将任务信息显示出来 ,如图 4。 图 4 任务列表 要显示桌面窗口中的任务信息 ,首先要一个结构体类型用于存放任务的相关信息 : typedef struct CString strTaskName。 //窗口标题 DWORD dwProcessID。 //进程 ID DWORD dwThreadID。 //线程 ID CString strRunState。 //运行状态 DWORD dwWndHandle。 //窗口句柄 TASK_IFNO,*PTASK_INFO。 获取窗口标题 ,使用 API 标准函数 GetWindowText : char temp[_PATH]。 GetWindowTexthwnd,temp,sizeoftemp 获取进程及线程 ID: TIDGetWindowThreadProcessIdhwnd,amp。 PID。 确定运行状态 : ifSendMessageTimeouthwnd,WM_SYSCOMMAND,NULL,NULL,SMTO_ABORTIFHUNG,1000,NULL strRunState 正在运行。 else strRunState 没有响应。 添加任务信息到数组 : TASK_IFNO ti。 temp。 PID。 TID。 DWORDhwnd。 strRunState。 在任务列表显示每一行信息 : forint i0。 inewCount。 i++ TASK_IFNO ti。 ti。 ,0 !。 ,i。 %d,。 ,1,str。 %d,。 ,2,str。 ,3,。 结束任务 结束任务操作将调用 SendMessageTimeout 函数向要关闭的窗口发送关闭消息 ,如果没有响应则用 TerminateProcess 函数强行终止该窗口进程。 if!SendMessageTimeouthwnd,WM_SYSCOMMAND,SC_CLOSE,NULL,SMTO_BLOCK|SMTO_ABORTIFHUNG,1000,NULL HANDLE hProcess OpenProcess PROCESS_ALL_ACCESS, FALSE,。 //打开进程 TerminateProcesshProcess,1。 //强制终止该窗口进程 CloseHandlehProcess。 切换任务 我们知道 ,Windows 9x/2020 中 SetForegroundWindow 函数当用户正在操作其他。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。