QQ登录

只需一步,快速开始

上位机MFC检查动态库或程序是否被占用锁定源代码

[ 复制链接 ]

上位机MFC检查动态库或程序是否被占用锁定源代码

上位机MFC检查动态库或程序是否被占用锁定源代码

例程界面如上,
点击浏览按钮可以打开指定的程序或动态库来检查是否文件被占用。
被占用则显示相关信息,如图。
下面是关键代码。

  1. void CWhoSLockingDlg::OnBrowseDllName()
  2. {
  3.     CFileDialog oFileDialog(TRUE, // Open...
  4.                                                         NULL, // default filename extension
  5.                                                         GetDefaultFileName(), // initial filename
  6.                                                         OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST, // options
  7.                                                         "Executable Files (*.exe;*.dll;*.ocx)|*.exe; *.dll; *.ocx|All Files (*.*)|*.*||", // two filters for modules
  8.                                                         this);
  9.     if ( oFileDialog.DoModal() == IDOK ) {

  10.         CString szModuleName=oFileDialog.GetPathName();

  11.         SetDefaultFileName(szModuleName);

  12.         (GetDlgItem(IDC_EDIT_MODULE_NAME))->SetWindowText(m_szDefaultFileName);

  13.         // Force refresh list
  14.         OnRefresh();
  15.     }
  16. }

  17. void CWhoSLockingDlg::OnRefresh()
  18. {
  19.     // Store filename for next call
  20.     (GetDlgItem(IDC_EDIT_MODULE_NAME))->GetWindowText(m_szDefaultFileName);
  21.     CString szModuleName = m_szDefaultFileName;

  22.     // Find list of processes which loaded this module
  23.     DWORD dwFoundPID = 0;
  24.     int nRecords =0;
  25.     int nItemPosition = -1;
  26.     if (szModuleName.GetLength()) {

  27.             CMapStringToString PIDNameMap;

  28.         // Refresh GUI
  29.             m_oListOfProcesses.DeleteAllItems();

  30.         (GetDlgItem(IDC_MESSAGE_TEXT))->SetWindowText("Searching for process(es)...");
  31.         CWaitCursor oWaiting;
  32.                 if (m_oProcessAPI.BuildProcessList(PIDNameMap)) {

  33.                         // Find this module in all processes
  34.                         CMapStringToString oLoadingProcessMap;

  35.                         if (m_oProcessAPI.GetProcessesLockingModule(szModuleName, PIDNameMap, oLoadingProcessMap)) {

  36.                                 POSITION hProcessPosition = NULL;
  37.                                 CString ProcessName;
  38.                                 CString PIDString;
  39.                                 CString szExecutablePath;
  40.                                 CString szServiceName;

  41.                                 hProcessPosition = oLoadingProcessMap.GetStartPosition();

  42.                                 while ( hProcessPosition != NULL ) {

  43.                                         // Get key ( PIDString ) and value ( ProcessName )
  44.                                         oLoadingProcessMap.GetNextAssoc( hProcessPosition, PIDString, ProcessName );

  45.                                         // Get executable path
  46.                                         szExecutablePath = m_oProcessAPI.GetProcessExecutableName(atol(PIDString));

  47.                                         // Get service name (if applicable)
  48.                                         szServiceName = GetServiceName(szExecutablePath);

  49.                                         // Add process entry in the listbox
  50.                                         nItemPosition = m_oListOfProcesses.AddItem(nRecords,0,ProcessName);
  51.                                         if (nItemPosition != -1) {
  52.                                                 m_oListOfProcesses.AddItem(nItemPosition,1,PIDString);
  53.                                                 m_oListOfProcesses.AddItem(nItemPosition,2,szExecutablePath);
  54.                                                 m_oListOfProcesses.AddItem(nItemPosition,3,szServiceName);
  55.                                         }

  56.                                         nRecords++;
  57.                                 }

  58.                         }

  59.                 } else {

  60.                                 AfxMessageBox("Fatal error: cannot build list of processes",
  61.                                                           MB_OK|MB_ICONERROR);

  62.                 }

  63.         CString szMessageText;
  64.         if (nRecords == 0) {
  65.             szMessageText = "No process found: This DLL is not locked.";
  66.         } else {
  67.             szMessageText.Format("%d process%s found.", nRecords, (nRecords<2?"":"es"));
  68.         }
  69.         (GetDlgItem(IDC_MESSAGE_TEXT))->SetWindowText(szMessageText);

  70.     }
  71. }
复制代码
源代码下载地址:
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:上位机MFC检查动态库或程序是否被占用锁定源代码.rar 
文件大小:58.86 KB  售价:1金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我


  

上位机VC MFC程序开发精典实例大全源码与视频讲解配套下载408例

  

经历1年的编程与录制点击进入查看


  

halcon从自学到接项目视频教程,另外再赠送全网最全资源  

  

欢迎围观我录制的一套halcon自学视频教程(进入)


  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索