得到95和NT中正在運行的進程

發表于:2007-07-14來源:作者:點擊數: 標簽:
賈旭濱(譯) 有些時候,我們在運行一些程序的時候,需要得到當前系統中所有的進程的列表。當然,這對于一個比較熟悉計算機的人來說,很簡單,在WINNT中我們可以使用任務管理器來知道,在WIN95/98/ME中我們可以使用一些工具來知道就可以了。不過我們現在要寫一
賈旭濱(譯)

  有些時候,我們在運行一些程序的時候,需要得到當前系統中所有的進程的列表。當然,這對于一個比較熟悉計算機的人來說,很簡單,在WINNT中我們可以使用任務管理器來知道,在WIN95/98/ME中我們可以使用一些工具來知道就可以了。不過我們現在要寫一個既能在NT中運行,又能在95/98/ME中運行的程序,它能得到進程的列表,而又不必要一些麻煩的操作。因此,我寫了一個C++類,它使用Win32Process來得到當前系統中所有運行的進程,當然肯定是用MFC寫的,而且這個程序在NT和95/98/ME中都能運行,這就是我在這兒提出來的原因。這個程序能得知系統的類型,并且選擇要運行程序的哪部分,進行什么操作。

  該類的代碼是這樣寫的(代碼可到“程序代碼”下載),它使用了DLL,函數都是動態加載的,所以你不必要去連接一個LIB文件,而使得你的代碼(或者是你的工程設置)在NT和98/95/ME中需要不同的的寫法(需要不同的設置)。比如,我們在NT上編譯,但是我們需要使用WIN95中的TOOLHELP函數Process32Next(),即使這樣,編譯、連接和運行卻都能進行。因此,我們要做的就是把代碼加到你工程中去,然后你就能高枕無憂的運行就行了,因為類回自動選擇該用什么。

  使用步驟:

  1.要使用這個類,首先得把它的頭文件加到我們要用的地方。

  2.然后聲明變量,比如:Win32Process m_win32proc。

  3.在使用之前還應該初始化它,代碼如下:

  if(!m_win32proc.Init())

   AfxMessageBox(m_win32proc.GetLastError());

  如果你是在95上初始的,就能得到需要的函數的指針。如果是在NT上的,該函數什么事都不干,但是它還是會被調用的。運行成功的話就返回TRUE值,失敗則是FALSE,如果要想得到是什么錯誤的話,可以調用GetLastError(),它能返回一個關于錯誤屬性的字符串。如下,就可以得到進程的列表了:

if (!m_win32proc.EnumAllProcesses())
{
  AfxMessageBox(m_win32proc.GetLastError());
  return;
}


  好了!在Win32Process.cpp中有一個CStringArray數組,它列出了所有當前運行的進程的名字。要想顯示進程的名字的話,還要做一些事情,我們可以用列表框來顯示,如下:

int size=m_win32proc.GetAllProcessesNames()->GetSize();
for (int i=0;i  m_ctrlProcLB.AddString(m_win32proc.GetAllProcessesNames()->GetAt(i));


  這兒m_ctrlProcLB是一個LIST BOX控件。很簡單吧?如果你還想知道具體的哪個進程是不是在運行的時候,你可以用GetProcessStatus()函數,如下:

if (!m_win32proc.GetProcessStatus(&m_strProcessToCheck,&bStatus))
{
AfxMessageBox(m_win32proc.GetLastError());
return;
}
if (bStatus)
AfxMessageBox(m_strProcessToCheck+" is running!");
else
AfxMessageBox(m_strProcessToCheck+" is NOT running!");


  不過很可惜,GetProcessStatus()不會返回一個BOOL值來顯示那個進程是不是在運行,不過這也沒有事,我們可以定義一個變量來表示就行了。這兒是已經封裝的類,可供下載(還是有DEMO程序的)。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97