人人做人人澡人人爽欧美,国产主播一区二区,久久久精品五月天,羞羞视频在线观看免费

當前位置:蘿卜系統(tǒng)下載站 > 技術開發(fā)教程 > 詳細頁面

在Visual C++應用程序中完全清除進程

在Visual C++應用程序中完全清除進程

更新時間:2022-07-06 文章作者:未知 信息來源:網(wǎng)絡 閱讀次數(shù):

讀者朋友們可能經(jīng)常會碰到這樣一個問題,想對某些進行操作時,發(fā)現(xiàn)這些文件正在被其它程序使用,處于打開狀態(tài),而且是被獨占打開,這時是沒法對文件進行操作的。因此,要想操作這些文件,必須將打開這些文件的進程清除掉。那么如何干凈地清除進程呢?其實,在Windows2000操作系統(tǒng)版本中有一個工具程序叫tskill.exe,用它就可以清除掉某個程序的進程,在輸入"tskill 程序名"后就可以清除其運行實例。但是如何要在代碼里實現(xiàn)tskill的功能該如何做呢?針對這一問題,本實例介紹了在Windows2000下實現(xiàn)的方法。

   一、實現(xiàn)方法

  在Visual C++編程中,最安全的殺死進程的方法是向運行程序的主窗口發(fā)送WM_CLOSE消息,其實現(xiàn)代碼如下:


  HWND hwnd =this.m_hWnd; // 獲得主窗口
  PostMessage(hwnd, WM_CLOSE, 0, 0);

  發(fā)送此消息后,通常應該等待直到進程確實終止,當進程終止時,它發(fā)出狀態(tài)信號,并且 WaitForSingleObject 返回WAIT_OBJECT_0。如果返回別的值,進程要么掛起了,要么仍然在進行處理。在這種情況下,殺死這個進程的唯一方法是用功能更強大的API函數(shù):TerminateProcess()。如果想干得漂亮一點,可以在關閉之前向主窗口發(fā)送一個WM_QUERYENDSESSION消息,當用戶結束會話(log out)或者調用ExitWindows()函數(shù)時,應用程序會收到這個消息,然后準備退出進程,此時一般都會彈出一個確認對話框,告訴用戶:"程序要推出了,如果要保存修改的東西,現(xiàn)在是最佳時機,想保存嗎?"有三種選擇(Yes/No/Cancel)。此外,發(fā)送WM_QUERYENDSESSION消息可以拒絕推出進程(按下"Cancel鍵"),如果是這樣,進程將會延續(xù)。

  如果想要關閉的進程被掛起,使用SendMessageTimeout()函數(shù)就非常重要,而不是用SendMessage()函數(shù),其參數(shù)SMTO_NOTIMEOUTIFNOTHUNG是一個只有Windows 2000 和Windows XP才有的標志。其意義是"如果線程沒有掛起,不要超時",換句話說就是如果線程正在進行正常處理,那么永遠等待,以便用戶能看到對話框并決定做什么,當用戶最終做出決定后,SendMessageTimeout()將帶著相應的bOKToKill值返回。

  本例為了增強代碼的可重用性,將實現(xiàn)細節(jié)都封裝在一個叫CFindKillProcess的類中,包括查找和殺死進程,詳情請參見EnumProc.h和EnumProc.cpp文件。文件中還有另外兩個可重用類,一個是CProcessIterator,另一個是CWindowIterator。

  CfindKillProcess類的成員函數(shù)FindProcess()查找某個進程序,如果找到這個進程,它返回此進程的ID,然后將此ID傳給CFindKillProcess::KillProcess()函數(shù),KillProcess()函數(shù)封裝了關閉窗口以及終止邏輯,它利用CmainWindowIterator類對象來枚舉進程的主窗口(可能不止一個,見"如何獲取某個進程的主窗口以及創(chuàng)建進程的程序名?"),并發(fā)送WM_CLOSE到每一個窗口,然后等待進程死亡。它有一個布爾型參數(shù)用來指示當應用程序進程不愿意退出時是否執(zhí)行TerminateProcess()函數(shù)。詳細細節(jié)請參見下載的代碼。

   二、編程步驟

  1、 啟動Visual C++6.0,生成一個控制臺應用程序,將該程序命名為"kp";

  2、 在程序代碼中添加CfindKillProcess、CProcessIterator類的定義;

  3、 添加代碼,編譯運行程序。

[1] [2]  下一頁

溫馨提示:喜歡本站的話,請收藏一下本站!

本類教程下載

系統(tǒng)下載排行

網(wǎng)站地圖xml | 網(wǎng)站地圖html
主站蜘蛛池模板: 永平县| 威海市| 乌海市| 宣武区| 台东市| SHOW| 南充市| 武宁县| 渑池县| 高密市| 肇东市| 加查县| 阜南县| 镇沅| 江永县| 新沂市| 南皮县| 武陟县| 嫩江县| 芜湖市| 贵港市| 吉安县| 利津县| 宣城市| 永济市| 娄底市| 和田市| 盐边县| 绥芬河市| 南溪县| 孙吴县| 潞西市| 罗平县| 邵阳县| 垣曲县| 建始县| 高密市| 昌平区| 本溪市| 鄂州市| 伊春市|