2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  進(jìn)程管理器課程設(shè)計(jì)</b></p><p><b>  題目:進(jìn)程管理器</b></p><p><b>  目錄</b></p><p>  一、需求與功能分析2</p><p>  二、系統(tǒng)總體框架4</p><p>

2、;  2.1 系統(tǒng)框架圖4</p><p>  2.2 各功能模塊的詳細(xì)說(shuō)明4</p><p>  三、模塊設(shè)計(jì)與分析5</p><p>  3.1 獲取進(jìn)程模塊5</p><p>  3.2 啟動(dòng)新進(jìn)程模塊6</p><p>  3.3 終止進(jìn)程模塊8</p><p>  3.4

3、退出模塊10</p><p>  四、類(lèi)的設(shè)計(jì)與分析11</p><p>  4.1、CShowAllProcessApp 類(lèi)11</p><p>  4.2 CaboutDlg 類(lèi)11</p><p>  4.3、CshowAllProcessDlg 類(lèi)12</p><p>  4.4、CSXButton

4、類(lèi)13</p><p><b>  六、功能測(cè)試15</b></p><p>  七、存在的不足與對(duì)策18</p><p>  八、程序源代碼19</p><p><b>  一、需求與功能分析</b></p><p>  我們的電腦需要我們?nèi)チ私馑倪\(yùn)行狀況,掌握和

5、管理它的進(jìn)程,并對(duì)其異常情況給予操作和控制,進(jìn)程管理器就像是我們了解和控制自己電腦運(yùn)作的一個(gè)窗口,通過(guò)這個(gè)窗口我們可以了解到電腦所有進(jìn)程運(yùn)行狀況,并對(duì)運(yùn)行的進(jìn)程加于管理和控制,正如在本實(shí)驗(yàn)中,啟動(dòng)進(jìn)程管理器后,可以通過(guò)”獲取進(jìn)程”功能來(lái)獲得本計(jì)算機(jī)啟動(dòng)的進(jìn)程,以及與該進(jìn)程相關(guān)的信息,其中包括的信息有:進(jìn)程映像名稱(chēng),進(jìn)程開(kāi)啟的線(xiàn)程數(shù),進(jìn)程的 PID 以及進(jìn)程的優(yōu)先數(shù),我們可以通過(guò)這些信息來(lái)了解計(jì)算機(jī)中每個(gè)進(jìn)程的使用狀況。同時(shí)我們可以在進(jìn)程

6、管理器上選中一個(gè)要終止的的進(jìn)程,點(diǎn)擊“終止進(jìn)程”功能按鈕,該進(jìn)程被終止執(zhí)行并退出進(jìn)程列表,其中還包括了自動(dòng)刷新的功能,此按鈕實(shí)現(xiàn)的功能正如我們電腦任務(wù)管理器的 “進(jìn)程”功能,當(dāng)電腦執(zhí)行程序不能通過(guò)關(guān)閉窗口進(jìn)行正常的關(guān)閉時(shí),可以借助此辦法來(lái)關(guān)閉進(jìn)程。我們還可以通過(guò)這個(gè)進(jìn)程管理器來(lái)啟動(dòng)新的進(jìn)程,當(dāng)我們要在進(jìn)程管理器里啟動(dòng)新的進(jìn)程時(shí),只要點(diǎn)擊“啟動(dòng)新進(jìn)程”按鍵,則會(huì)彈出“打開(kāi)進(jìn)程”對(duì)話(huà)框,我們可以通過(guò)對(duì)話(huà)框里的“瀏覽”窗口選擇要打開(kāi)的新進(jìn)程,

7、這是任務(wù)管理器里沒(méi)有實(shí)現(xiàn)的功能,通過(guò)這個(gè)功能我們?cè)诠芾碛?jì)算機(jī)時(shí)變得更加靈活方</p><p><b>  二、系統(tǒng)總體框架</b></p><p><b>  2.1 系統(tǒng)框架圖</b></p><p>  本系統(tǒng)設(shè)計(jì)比較簡(jiǎn)潔,用 MFC 來(lái)做界面,實(shí)現(xiàn)了四個(gè)功能,顯示四類(lèi)與進(jìn)程相關(guān)的信息,具體的總體框架圖如圖1 所示:&

8、lt;/p><p><b>  \</b></p><p><b>  圖1 總體框架圖</b></p><p>  2.2 各功能模塊的詳細(xì)說(shuō)明 </p><p>  本系統(tǒng)實(shí)現(xiàn)了四大功能,分別包括了:獲取進(jìn)程、啟動(dòng)新進(jìn)程、終止進(jìn)程和退出管理器,各功能模塊的詳細(xì)說(shuō)明如下: </p>&l

9、t;p> ?。?)獲取進(jìn)程。點(diǎn)擊獲取進(jìn)程后,它能自動(dòng)獲取計(jì)算機(jī)的所有進(jìn)程,并顯示進(jìn)程的相關(guān)信息,其中包括的信息有:進(jìn)程映像名稱(chēng),進(jìn)程開(kāi)啟的線(xiàn)程數(shù),進(jìn)程的 PID 以及進(jìn)程的優(yōu)先數(shù),通過(guò)這一功能,我們能了解進(jìn)程的相關(guān)情況。</p><p>  (2)啟動(dòng)新進(jìn)程。點(diǎn)擊“啟動(dòng)新進(jìn)程”按鈕,進(jìn)入“打開(kāi)進(jìn)程”對(duì)話(huà)框,在“瀏覽”窗口里選擇任意一個(gè)應(yīng)用程序,則能在管理器里直接啟動(dòng)我們所選的進(jìn)程。</p>&

10、lt;p> ?。?)終止進(jìn)程。當(dāng)我們遇到某些軟件在關(guān)閉窗口時(shí)不能直接關(guān)閉,這時(shí)可以在進(jìn)程管理器的 “終止進(jìn)程”里找到該進(jìn)程并將其終止,這一功能實(shí)現(xiàn)的是類(lèi)似于任務(wù)管理器的“進(jìn)程”選項(xiàng)所具有的功能。 </p><p> ?。?)退出管理器。當(dāng)對(duì)管理器操作做完畢時(shí),直接點(diǎn)擊“退出管理器“按鈕則可關(guān)閉管理器。 </p><p><b>  三、模塊設(shè)計(jì)與分析</b>&l

11、t;/p><p>  本軟件實(shí)現(xiàn)了進(jìn)程管理的三大功能,其中主要用到了三大函數(shù),包括獲取進(jìn)程函數(shù) “OnGetProcess”、啟動(dòng)新進(jìn)程函數(shù)“Ononrun”、終止進(jìn)程函數(shù)“OnStopProcess”以及退出管理器函數(shù)“OnBnClickedCancel”,以下是對(duì)每個(gè)程序的詳細(xì)設(shè)計(jì):</p><p>  3.1 獲取進(jìn)程模塊</p><p>  該模塊使用到的控件如

12、表1:</p><p>  在IDOK控件上建立事件OnGetProcess(),當(dāng)用戶(hù)點(diǎn)擊“獲取進(jìn)程”按扭時(shí)事件發(fā)生,進(jìn)程管理器可以獲取計(jì)算機(jī)的所有進(jìn)程。</p><p><b>  函數(shù)源代碼如下:</b></p><p>  void CShowAllProcessDlg::OnGetProcess() //獲取進(jìn)程的消息處理函數(shù) <

13、;/p><p>  { // TODO: Add your control notification handler code here HANDLE Snapshot; Snapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //獲得某一時(shí)刻系統(tǒng)的進(jìn)程、堆(heap)、模塊(module)或線(xiàn)程的快照信息</p><p>  PROC

14、ESSENTRY32 processListStr; //獲得進(jìn)程的信息 processListStr.dwSize=sizeof(PROCESSENTRY32); </p><p>  BOOL return_value; return_value=Process32First(Snapshot,&processListStr);</p><p>  //獲得系統(tǒng)進(jìn)程鏈表中第一

15、個(gè)進(jìn)程的信息</p><p>  m_showlist.DeleteAllItems();</p><p>  int i=0;//item index 5</p><p>  while(return_value)</p><p><b>  { </b></p><p>  m_showlis

16、t.InsertItem(i,processListStr.szExeFile,0); //插入第一項(xiàng),從零開(kāi)始插入</p><p>  CString s;</p><p>  s.Format("%d",processListStr.cntThreads); //輸出線(xiàn)程</p><p>  m_showlist.SetItemText(i,

17、1,s);</p><p>  s.Format("%d",processListStr.th32ParentProcessID); //輸出ID</p><p>  m_showlist.SetItemText(i,2,s); </p><p>  s.Format("%d",processListStr.pcPriClas

18、sBase); //輸出優(yōu)先數(shù)</p><p>  m_showlist.SetItemText(i,3,s); </p><p>  int memory=processListStr.cntThreads; //寫(xiě)入內(nèi)存 m_ProcessIndex[i]=processListStr.th32ProcessID;//save ID into array to teminate ret

19、urn_value=Process32Next(Snapshot,&processListStr); //獲得系統(tǒng)進(jìn)程鏈表中下一個(gè)進(jìn)程的信息</p><p><b>  i++; </b></p><p><b>  }</b></p><p><b>  } </b></p>

20、<p>  功能實(shí)現(xiàn)的流程圖如圖2所示:</p><p>  圖2 獲取進(jìn)程流程圖</p><p>  3.2 啟動(dòng)新進(jìn)程模塊 </p><p>  該模塊使用到的控件情況如表2:</p><p>  void CShowAllProcessDlg::Ononrun() //啟動(dòng)新進(jìn)程的消息處理函數(shù) </p><

21、p><b>  { </b></p><p>  // TODO: Add your control notification handler code here </p><p>  //加載動(dòng)態(tài)鏈接庫(kù) </p><p>  CString pszDllName="shell32.dll";</p>&

22、lt;p>  HINSTANCE hLib = ::LoadLibrary(pszDllName); // 定義一個(gè)句柄,獲取的dll文件,是相對(duì)路徑,和.exe文件在同一個(gè)目錄下</p><p>  typedef void (__stdcall *pRunFileDlg)(HWND, HICON, LPCTSTR, LPCTSTR, LPCTSTR, UINT); pRunFileDlg RunFile

23、Dlg;</p><p>  if (hLib==NULL) // 若hLib為空,加載失敗,hLib不為空,加載成功</p><p><b>  { </b></p><p><b>  return ;</b></p><p><b>  } </b></p>

24、<p>  RunFileDlg = (pRunFileDlg)GetProcAddress(hLib, (char *)61); </p><p>  CString name ="打開(kāi)進(jìn)程";</p><p>  CString sss = "請(qǐng)輸入程序,文件夾,文檔或其它東西。";</p><p>  LPW

25、STR wname=new WCHAR[100]; </p><p>  LPWSTR wsss=new WCHAR[100];</p><p>  memset(wname,0,sizeof(WCHAR)*100);</p><p>  memset(wsss,0,sizeof(WCHAR)*100);</p><p>  MultiByt

26、eToWideChar //多字節(jié)字符到寬字符轉(zhuǎn)換函數(shù) </p><p>  (CP_ACP, // ANSI轉(zhuǎn)換時(shí)所用的代碼頁(yè) </p><p>  MB_PRECOMPOSED, // character-type options </p><p>  name, // address of string to map</p><p> 

27、 name.GetLength(), // number of bytes in string</p><p>  wname, // address of wide-character buffer</p><p><b>  100</b></p><p><b>  ); </b></p><p&

28、gt;  MultiByteToWideChar //多字節(jié)字符到寬字符轉(zhuǎn)換函數(shù) </p><p>  (CP_ACP, // ANSI轉(zhuǎn)換時(shí)所用的代碼頁(yè) </p><p>  MB_PRECOMPOSED, // character-type options</p><p>  sss, // address of string to map</p>

29、<p>  sss.GetLength(), // number of bytes in string </p><p>  wsss, // address of wide-character buffer</p><p><b>  100 </b></p><p><b>  ); </b></p&

30、gt;<p>  if(RunFileDlg!=NULL)</p><p><b>  { </b></p><p>  RunFileDlg(this->GetSafeHwnd(),NULL,NULL,(LPCTSTR)wname,(LPCTSTR)wsss,0x02);</p><p><b>  }</

31、b></p><p>  ::FreeLibrary(hLib); //函數(shù)運(yùn)行完畢后,卸載dll文件</p><p><b>  }</b></p><p>  功能實(shí)現(xiàn)的流程圖如圖3所示:</p><p>  圖3 啟動(dòng)新進(jìn)程流程圖 </p><p>  3.3 終止進(jìn)程模塊 </

32、p><p>  該模塊使用到的控件情況表如表1:</p><p>  在IDC_STOP控件上建立事件OnStopProcess (),當(dāng)用戶(hù)選中其中一個(gè)進(jìn)程,并點(diǎn)擊“終止進(jìn)打開(kāi)進(jìn)程 選擇要啟動(dòng)的程序 hLib 是否為空 加載文件 函數(shù)運(yùn)行完畢, 卸載dll 文件 N 結(jié) 束 Y 10 程”按扭時(shí)事件發(fā)生,所選中的進(jìn)程被終止,進(jìn)程列表被更新。函數(shù)源代碼如下:</p><p&

33、gt;  void CShowAllProcessDlg::OnStopProcess() //終止進(jìn)程的消息處理 </p><p><b>  { </b></p><p>  / TODO: Add your control notification handler code here </p><p>  POSITION pos = m

34、_showlist.GetFirstSelectedItemPosition(); //要選擇的進(jìn)程所處的位置</p><p>  int currentSelect=m_showlist.GetNextSelectedItem(pos); //當(dāng)前選中的行</p><p>  if(currentSelect>0)</p><p><b>  {

35、</b></p><p><b>  //選擇某項(xiàng) </b></p><p>  CString FileBuffer;//獲得進(jìn)程的可執(zhí)行文件的文件名</p><p>  FileBuffer=CString(TEXT("確實(shí)要終止進(jìn)程 ")+m_showlist.GetItemText(currentSele

36、ct,0)+TEXT("?")); if(AfxMessageBox(FileBuffer,MB_OKCANCEL,0)==IDOK)</p><p>  {//先獲得該進(jìn)程句柄,通過(guò)進(jìn)程標(biāo)識(shí)</p><p>  HANDLE ProcessHandle; ProcessHandle=OpenProcess(PROCESS_ALL_ACCESS,FALSE,m_Proc

37、essIndex[currentSel ect]); //利用數(shù)組ID指定的獲得存在的一個(gè)進(jìn)程的句柄</p><p>  if(ProcessHandle) {TerminateProcess(ProcessHandle,0); //使指定進(jìn)程結(jié)束 </p><p>  AfxMessageBox("指定進(jìn)程已終止!"); </p><p>  

38、OnGetProcess();//刷新顯示 </p><p><b>  } </b></p><p>  else {AfxMessageBox("系統(tǒng)不允許終止指定進(jìn)程!");</p><p><b>  } </b></p><p><b>  } </b&

39、gt;</p><p><b>  } </b></p><p>  else {AfxMessageBox("請(qǐng)先選擇一個(gè)需要終止的進(jìn)程!",MB_OK);</p><p><b>  } </b></p><p><b>  } </b></p&g

40、t;<p>  功能實(shí)現(xiàn)的流程圖如圖4所示:</p><p>  圖4 終止進(jìn)程流程圖圖 </p><p><b>  3.4 退出模塊 </b></p><p>  該模塊使用到的控件情況表如表1:</p><p>  在 I IDCANCEL 控件上建立事件 OnBnClickedCancel(),“退

41、出”按鈕響應(yīng)函數(shù),退出進(jìn)程管理器。函數(shù)源代碼如下:</p><p>  void CShowAllProcessDlg::OnBnClickedCancel() //斷開(kāi)該連接"按鈕的響應(yīng)函數(shù) </p><p><b>  { </b></p><p>  IDCANCEL // TODO: 在此添加控件通知處理程序代碼</p&

42、gt;<p>  OnCancel(); </p><p><b>  }</b></p><p><b>  四、類(lèi)的設(shè)計(jì)與分析</b></p><p>  4.1、CShowAllProcessApp 類(lèi)</p><p>  以 CwinApp 為基類(lèi)創(chuàng)建 CShowAllProc

43、essApp 子類(lèi),它是應(yīng)用程序的入口和出口,在這里處理一些啟動(dòng)和退出程序時(shí)需要讀取或?qū)懭氲脑O(shè)置信息,以及設(shè)置一些全局變量。 CShowAllProcessApp 類(lèi)的定義如下:</p><p>  class CShowAllProcessApp : public CwinApp // 函數(shù)頭文件中的應(yīng)用程序,</p><p>  public: CShowAllProcessApp()

44、; </p><p>  //整個(gè)程序中的應(yīng)用程序 </p><p>  // Overrides </p><p>  // ClassWizard generated virtual function overrides </p><p>  //{{AFX_VIRTUAL(CShowAllProcessApp)</p>&

45、lt;p><b>  public: </b></p><p>  virtual BOOL InitInstance(); </p><p>  //}}AFX_VIRTUAL </p><p>  // Implementation </p><p>  //{{AFX_MSG(CShowAllProcessA

46、pp) </p><p>  // NOTE - the ClassWizard will add and remove member functions here.</p><p>  // DO NOT EDIT what you see in these blocks of generated code ! </p><p>  //}}AFX_MSG<

47、/p><p><b>  }; </b></p><p>  //用戶(hù)程序中的每個(gè)CCmdTarget 派生類(lèi)必須提供消息映射以處理消息,用這個(gè)函數(shù)了來(lái)處理用戶(hù)消息</p><p>  DECLARE_MESSAGE_MAP()</p><p>  4.2 CaboutDlg 類(lèi)</p><p>  

48、以 CDialog 為基類(lèi)創(chuàng)建 CAboutDlg 類(lèi),CAboutDlg 由 CDialog 派生而來(lái),用來(lái)處理進(jìn)程管理器的主窗口。CLockfileDlg 類(lèi)的定義如下:</p><p>  class CAboutDlg : public CDialog </p><p><b>  { </b></p><p><b>  p

49、ublic: </b></p><p>  CAboutDlg();</p><p>  // Dialog Data </p><p>  //{{AFX_DATA(CAboutDlg)</p><p>  enum { IDD = IDD_ABOUTBOX }; //公有類(lèi)型 </p><p>  //

50、}}AFX_DATA </p><p>  // ClassWizard generated virtual function overrides </p><p>  //{{AFX_VIRTUAL(CAboutDlg)</p><p>  protected:</p><p>  virtual void DoDataExchange(C

51、DataExchange* pDX); // 數(shù)據(jù)更新 </p><p>  //}}AFX_VIRTUAL </p><p>  // Implementation </p><p>  protected: </p><p>  //{{AFX_MSG(CAboutDlg) </p><p>  //}}AFX_M

52、SG DECLARE_MESSAGE_MAP() // </p><p><b>  }; </b></p><p>  4.3、CshowAllProcessDlg 類(lèi)</p><p>  以CDialog 為基類(lèi)創(chuàng)建CShowAllProcessDlg 子類(lèi)。 CLockfileDlg 類(lèi)的定義如下:</p><p>

53、;  class CShowAllProcessDlg : public CDialog </p><p><b>  { </b></p><p>  // Construction </p><p><b>  public:</b></p><p>  DWORD m_ProcessIndex

54、[50];//存放所有進(jìn)程的ID </p><p>  CShowAllProcessDlg(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CShowAllProcessDlg)</p><p>  enum { IDD = IDD_SHOWALLPROCESS_DIALOG }; &l

55、t;/p><p>  CListCtrl m_showlist;</p><p>  CSXButton m_show; </p><p>  CSXButton m_exit;</p><p>  CSXButton m_stop;</p><p>  //}}AFX_DATA </p><p>

56、  // ClassWizard generated virtual function overrides</p><p>  //{{AFX_VIRTUAL(CShowAllProcessDlg)</p><p>  protected: </p><p>  virtual void DoDataExchange(CDataExchange* pDX); //

57、DDX/DDV support </p><p>  //}}AFX_VIRTUAL </p><p>  // Implementation</p><p>  protected: </p><p>  HICON m_hIcon; </p><p>  // Generated message map funct

58、ions </p><p>  //{{AFX_MSG(CShowAllProcessDlg) </p><p>  virtual BOOL OnInitDialog();</p><p>  afx_msg void OnSysCommand(UINT nID, LPARAM lParam);</p><p>  afx_msg void

59、 OnPaint(); </p><p>  afx_msg HCURSOR OnQueryDragIcon(); </p><p>  afx_msg void OnGetProcess(); </p><p>  afx_msg void OnStopProcess(); </p><p>  afx_msg void OnstartBU

60、TTON();</p><p>  afx_msg void Ononrun(); </p><p>  //}}AFX_MSG DECLARE_MESSAGE_MAP() </p><p><b>  public: </b></p><p>  afx_msg void OnBnClickedCancel();<

61、;/p><p><b>  public: </b></p><p>  afx_msg void OnLvnItemchangedListShow(NMHDR *pNMHDR, LRESULT *pResult);</p><p><b>  };</b></p><p>  4.4、CSXButto

62、n 類(lèi)</p><p>  以CButton 為基類(lèi)創(chuàng)建CSXButton 類(lèi),CSXButton 由CButton 派生而來(lái),用于創(chuàng)建控制的按鈕,用于界面的美化。CSXButton 類(lèi)的定義如下:</p><p>  class CSXButton : </p><p>  public CButton </p><p><b>

63、  { </b></p><p>  // Construction public: CSXButton(); </p><p>  // Attributes</p><p><b>  private: </b></p><p>  // Positioning BOOL m_bUseOffset; &l

64、t;/p><p>  CPoint m_pointImage; </p><p>  CPoint m_pointText; </p><p>  int m_nImageOffsetFromBorder; </p><p>  int m_nTextOffsetFromImage; </p><p><b> 

65、 // Image</b></p><p>  HICON m_hIcon;</p><p>  HBITMAP m_hBitmap;</p><p>  HBITMAP m_hBitmapDisabled; </p><p>  int m_nImageWidth, </p><p>  m_nImage

66、Height; </p><p>  // Color Tab</p><p>  char m_bColorTab; </p><p>  COLORREF m_crColorTab; </p><p>  // State BOOL m_bDefault;</p><p>  UINT m_nOldAction;

67、</p><p>  UINT m_nOldState; </p><p>  // Operations</p><p><b>  public:</b></p><p>  // Positioning</p><p>  int SetImageOffset( int nPixels );

68、 </p><p>  int SetTextOffset( int nPixels ); </p><p>  CPoint SetImagePos( CPoint p );</p><p>  CPoint SetTextPos( CPoint p );</p><p><b>  // Image</b></

69、p><p>  BOOL SetIcon( UINT nID, int nWidth, int nHeight );</p><p>  BOOL SetBitmap( UINT nID, int nWidth, int nHeight ); </p><p>  BOOL SetMaskedBitmap( UINT nID, int nWidth, int nHeig

70、ht, COLORREF crTransparentMask ); BOOL HasImage(); </p><p>  // Color Tab </p><p>  void SetColorTab(COLORREF crTab);</p><p>  // State BOOL SetDefaultButton( BOOL bState = TRUE );

71、</p><p><b>  private: </b></p><p>  BOOL SetBitmapCommon( UINT nID, int nWidth, int nHeight, COLORREF crTransparentMask, BOOL bUseMask ); </p><p>  void CheckPointForCen

72、tering( CPoint &p, int nWidth, int nHeight ); void Redraw();</p><p>  // Overrides </p><p>  // ClassWizard generated virtual function overrides </p><p>  //{{AFX_VIRTUAL(CSXBut

73、ton) </p><p><b>  public: </b></p><p>  virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); </p><p>  //}}AFX_VIRTUAL</p><p>  // Implementation</p

74、><p><b>  public: </b></p><p>  virtual ~CSXButton(); </p><p>  // Generated message map functions</p><p>  protected:</p><p>  //{{AFX_MSG(CSXBut

75、ton) </p><p>  afx_msg LRESULT OnGetText(WPARAM wParam, LPARAM lParam); </p><p>  //}}AFX_MSG </p><p>  DECLARE_MESSAGE_MAP()</p><p><b>  }; </b></p>

76、<p><b>  六、功能測(cè)試</b></p><p>  本進(jìn)程管理器實(shí)現(xiàn)了四個(gè)功能,加上調(diào)試形成五大界面,以下是程序調(diào)試后的各功能界面。 </p><p>  1)進(jìn)程管理器界面如圖5 所示:</p><p>  圖5 進(jìn)程管理器界面</p><p>  2)獲取進(jìn)程界面如圖6 所示:</p>

77、;<p><b>  圖6 獲取進(jìn)程界面</b></p><p>  3)啟動(dòng)新進(jìn)程界面如圖7 所示: </p><p>  圖7 啟動(dòng)新進(jìn)程界面</p><p>  4)終止進(jìn)程界面如圖8 所示:</p><p><b>  圖8 終止進(jìn)程界面</b></p><

78、p>  5)退出進(jìn)程界面如圖9 所示:</p><p><b>  圖9 退出進(jìn)程界面</b></p><p>  七、存在的不足與對(duì)策</p><p>  經(jīng)過(guò)三個(gè)星期的課程設(shè)計(jì),終于編成了一個(gè)進(jìn)程管理器,我從一個(gè)從未接觸過(guò)MFC 的新手到現(xiàn)在對(duì) MFC 有了一定程度的了解,在此期間,我上網(wǎng)查閱了相關(guān)的資料,看網(wǎng)上視頻教程和查閱圖書(shū)館的

79、相關(guān)書(shū)籍,并在一些同學(xué)的幫助下,終于完成了這份粗糙的作品。通過(guò)這次課程設(shè)計(jì)中,我學(xué)到了很多關(guān)于MFC 的只是,同時(shí)也對(duì)VC++有了更深的認(rèn)識(shí),并對(duì)編程有了新的看法。當(dāng)然,在此過(guò)程中我也遇到了很多問(wèn)題,有的問(wèn)題經(jīng)過(guò)研究科最終被解決了,有的問(wèn)題卻仍然存在,以下是我做這個(gè)實(shí)驗(yàn)遇到的問(wèn)題,以及一些解決的方法: </p><p>  第一、通過(guò)本次試驗(yàn),在“啟動(dòng)新進(jìn)程”的實(shí)現(xiàn)函數(shù)里調(diào)用了 MultiByteToWideCh

80、ar,表示把多字節(jié)字符轉(zhuǎn)為寬字節(jié)字符,它跟 WideCharToMultiByte()函數(shù)(寬字節(jié)字符轉(zhuǎn)為多字節(jié)字符)極容易混淆,實(shí)際上MultiByteToWideChar 和WideCharToMultiByte 是互逆的過(guò)程,MultiByteToWideChar 是將普通字符串轉(zhuǎn)化為Unicod,而WideCharToMultiByte 正好相反。它們的操作過(guò)程相類(lèi)似,在使用時(shí)首先要申請(qǐng)數(shù)組空間,然后分配響應(yīng)的數(shù)組空間,接著是進(jìn)

81、行字符間的轉(zhuǎn)換了,最后還要釋放所占用的內(nèi)存 。這兩個(gè)函數(shù)的缺點(diǎn)在于無(wú)法動(dòng)態(tài)分 21 配內(nèi)存,在轉(zhuǎn)換很長(zhǎng)的字符串時(shí)可能會(huì)浪費(fèi)較多內(nèi)存空間,優(yōu)點(diǎn)是在不考慮浪費(fèi)空間的情況下轉(zhuǎn)換較短字符串非常方便。</p><p>  第二、在窗體界面美化方面。窗體的美化方法有很多,可以在PushButton 控件中美化,可以在GroupButton 控件中美化,可以在Edit 控件中美化,在Static 控件中美化等等,本系統(tǒng)是在 P

82、ushButton 控件中美化的,自定義一個(gè)基于 Cbutton 的子類(lèi) CSXButton,在 CSXButton 函數(shù)里對(duì)整個(gè)BUTTON 控件進(jìn)行繪制。 此次課程設(shè)計(jì)由于時(shí)間和技術(shù)的問(wèn)題,有很多地方還做得不夠好,存在很多不足,有很地方還需要改進(jìn),在程序的設(shè)計(jì)方面。因?yàn)閷?duì)MFC 和VC++編程不太熟悉,在做設(shè)計(jì)的過(guò)程中遇到了很多問(wèn)題,耗費(fèi)了很多時(shí)間在代碼的修改和調(diào)試上,還有很多界面的設(shè)置不能如愿實(shí)現(xiàn),今后應(yīng)在程序的編寫(xiě)上下苦功,不斷

83、加強(qiáng)自己的編程的能力。</p><p><b>  八、程序源代碼</b></p><p>  // ShowAllProcessDlg.cpp : implementation file </p><p><b>  // </b></p><p>  #include "stdafx.

84、h"</p><p>  #include "ShowAllProcess.h"</p><p>  #include "ShowAllProcessDlg.h" </p><p>  #include "TLHELP32.H"//一定要加如這個(gè)頭文件 </p><p> 

85、 #ifdef _DEBUG #define new DEBUG_NEW</p><p>  #undef THIS_FILE static char THIS_FILE[] = __FILE__;</p><p><b>  #endif </b></p><p>  /////////////////////////////////////

86、//////////////////////////////////////// </p><p>  // CAboutDlg dialog used for App About class CAboutDlg :</p><p><b>  public </b></p><p><b>  CDialog </b>&

87、lt;/p><p><b>  { </b></p><p><b>  public:</b></p><p>  CAboutDlg(); </p><p>  // Dialog Data </p><p>  //{{AFX_DATA(CAboutDlg) </p&

88、gt;<p>  enum { IDD = IDD_ABOUTBOX }; </p><p>  //}}AFX_DATA </p><p>  // ClassWizard generated virtual function overrides </p><p>  //{{AFX_VIRTUAL(CAboutDlg) </p>&l

89、t;p>  protected: </p><p>  virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support </p><p>  //}}AFX_VIRTUAL </p><p>  // Implementation </p><p>  protec

90、ted: </p><p>  //{{AFX_MSG(CAboutDlg) </p><p>  //}}AFX_MSG</p><p>  DECLARE_MESSAGE_MAP() </p><p><b>  }; </b></p><p>  CAboutDlg::CAboutDlg()

91、 : CDialog(CAboutDlg::IDD) </p><p><b>  { </b></p><p>  //{{AFX_DATA_INIT(CAboutDlg)</p><p>  //}}AFX_DATA_INIT</p><p><b>  } </b></p>&l

92、t;p>  void CAboutDlg::DoDataExchange(CDataExchange* pDX) </p><p><b>  { </b></p><p>  CDialog::DoDataExchange(pDX); </p><p>  //{{AFX_DATA_MAP(CAboutDlg) </p>

93、<p>  //}}AFX_DATA_MAP } </p><p>  BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) </p><p>  //{{AFX_MSG_MAP(CAboutDlg) </p><p>  // No message handlers </p><p>  //}}AFX_MS

94、G_MAP</p><p>  END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// </p><p>  // CShowAllProcessDlg dialog</p><p>  CShowAllProcessDlg::CS

95、howAllProcessDlg(CWnd* pParent /*=NULL*/)</p><p>  : CDialog(CShowAllProcessDlg::IDD, pParent) { </p><p>  //{{AFX_DATA_INIT(CShowAllProcessDlg) </p><p>  // NOTE: the ClassWizard w

96、ill add member initialization here /</p><p>  /}}AFX_DATA_INIT</p><p>  // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON_START

97、); </p><p><b>  } </b></p><p>  void CShowAllProcessDlg::DoDataExchange(CDataExchange* pDX) </p><p><b>  { </b></p><p>  CDialog::DoDataExchange

98、(pDX); </p><p>  //{{AFX_DATA_MAP(CShowAllProcessDlg) </p><p>  DDX_Control(pDX, IDC_LIST_SHOW, m_showlist);</p><p>  DDX_Control(pDX, IDOK, m_show); </p><p>  DDX_Cont

99、rol(pDX, IDOK, m_show); </p><p>  DDX_Control(pDX, IDCANCEL, m_exit); </p><p>  DDX_Control(pDX, IDC_STOP, m_stop); 24 //}}AFX_DATA_MAP</p><p>  } BEGIN_MESSAGE_MAP(CShowAllProcessD

100、lg, CDialog) /</p><p>  /{{AFX_MSG_MAP(CShowAllProcessDlg)</p><p>  ON_WM_SYSCOMMAND()</p><p>  ON_WM_PAINT()</p><p>  ON_WM_QUERYDRAGICON() </p><p>  ON_B

101、N_CLICKED(IDOK, OnGetProcess) </p><p>  ON_BN_CLICKED(IDC_STOP, OnStopProcess) </p><p>  // ON_BN_CLICKED(IDC_startBUTTON, OnstartBUTTON) </p><p>  ON_BN_CLICKED(IDC_onrun, Ononrun)

102、 </p><p>  //}}AFX_MSG_MAP</p><p>  END_MESSAGE_MAP() /////////////////////////////////////////////////////////////////////////////</p><p>  // CShowAllProcessDlg message handlers B

103、OOL </p><p>  CShowAllProcessDlg::OnInitDialog()</p><p><b>  { </b></p><p>  CDialog::OnInitDialog();</p><p>  m_stop.SetIcon(IDI_ICON_STOP,25,25);</p>

104、;<p>  m_exit.SetIcon(IDI_ICON_EXIT,25,25);</p><p>  m_show.SetIcon(IDI_ICON_SHOW,25,25); m_showlist.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES); m_showlist.InsertColumn(0,"進(jìn)程映像名稱(chēng)&quo

105、t;); </p><p>  m_showlist.InsertColumn(1,"進(jìn)程開(kāi)啟的線(xiàn)程數(shù)"); </p><p>  m_showlist.InsertColumn(2,"PID"); </p><p>  m_showlist.InsertColumn(3,"優(yōu)先級(jí)");</p>

106、<p>  for(int i=0;i<4;i++)</p><p>  m_showlist.SetColumnWidth(i,120);</p><p>  // Add "About..." menu item to system menu. </p><p>  // IDM_ABOUTBOX must be in t

107、he system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); </p><p>  ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);</p><p>  if (pSysMenu != NULL)&l

108、t;/p><p><b>  {</b></p><p>  CString strAboutMenu;</p><p>  StrAboutMENU.LoadString(IDS_ABOUTBOX);</p><p>  If(!strAboutMenu.IsEmpty())</p><p><

109、;b>  {</b></p><p>  pSysMenu->AppendMenu(MF_SEPARATOR);</p><p>  pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);</p><p><b>  }</b></p>&

110、lt;p><b>  }</b></p><p>  //Set the icon for this dialog. The framework does this automatically</p><p>  // When the application’s main window is not a dialog</p><p> 

111、 SetIcon(m_hIcon,TURE); //Set big icon</p><p>  SerIcon(m_hIcon,FALSE); // Set small icon</p><p>  //TOOD:Add extra initialization here</p><p>  Return TURE;//return TURE unless y

112、ou set the focus to a control</p><p><b>  }</b></p><p>  void CShowALLProcessDlg::OnSysCommand(UINT uID, LPARAM lParam)</p><p><b>  {</b></p><p>

113、;  If((nID&OxFFF0)=IDM_ABOUTBOX)</p><p><b>  {</b></p><p>  CAboutDlg dlgAbout;</p><p>  dlgAbout.DoModal;</p><p><b>  }</b></p><

114、p><b>  Else</b></p><p><b>  {</b></p><p>  CDialog::OnSysCommand(nID,lParam);</p><p><b>  }</b></p><p><b>  }</b><

115、/p><p>  //If you add a minimize button to your dialog, you will need the code below</p><p>  //to draw the icon. For MFC applications using the document/view model</p><p>  //this is

116、automatically done for you by the framework</p><p>  void CShowAllProcessDlg::OnPaint()</p><p><b>  {</b></p><p>  If(IsIconic)</p><p><b>  {</b>

117、;</p><p>  CPaintDC dc(this);//device context for painting</p><p>  SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);</p><p>  //Center icon in client rectangle</p>

118、<p>  int cxIcon=GetSystemMetrics(SM_CXICON);</p><p>  int cyIcon=GetSystemMetrics(SM_CYICON);</p><p>  CRect rect;</p><p>  GetClientRect(&rect);</p><p>  int

119、 x=(rect.Width()-cxIcon+1)/2;</p><p>  int y=(rect.Height()-cyIcon+1)/2;</p><p>  //Draw the icon</p><p>  dc.DrawIccon(x,y,m_hIcon);</p><p><b>  }</b></

120、p><p><b>  Else</b></p><p><b>  {</b></p><p>  CDialog::OnPaint();</p><p><b>  }</b></p><p><b>  }</b></p&g

121、t;<p>  The system call this to obtain the cursor to display while the user drags</p><p>  //the minimized window.</p><p>  HCURSOR CShowAllProcessDlg::OnQueryDragIcon()</p><p&

122、gt;<b>  {</b></p><p>  return (HCURSOR) m_hIcon;</p><p><b>  }</b></p><p>  void CShowAllProcessDlg::OnGetPross()</p><p><b>  {</b>&

123、lt;/p><p>  //TOOD:And your control notification handler code here</p><p>  HANDLE Snapshot;</p><p>  Snapshot=CreateToolhehp32napshot(TH32CS_SNAPPROCESS,0);</p><p>  //獲得

124、某一時(shí)刻系統(tǒng)的進(jìn)程、堆(heap)、模塊(module)或線(xiàn)程的快照消息</p><p>  PROCESSENTRY32 processListStr;</p><p>  processListStr.dwSise=sizeof(PRECSSENTRY32);</p><p>  BOOL return_value;</p><p>  

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論