²é¿´: 265  |  »Ø¸´: 1
µ±Ç°Ö÷ÌâÒѾ­´æµµ¡£

zsglly

ľ³æ (ÖøÃûдÊÖ)

[½»Á÷] ¸É¸É¾»¾»É±ËÀ½ø³Ì

×î½üÔÚд³ÌÐòʱÅöµ½ÕâÑùÒ»¸öÎÊÌ⣺ÎÒÏ뽫Îļþ±¸·Ýµ½ÍøÂçÇý¶¯Æ÷ÉÏ£¬µ«ÊÇÓÐһЩÎļþÕýÔÚ±»ÆäËü³ÌÐòʹÓ㬴¦ÓÚ´ò¿ª×´Ì¬£¬¶øÇÒÊDZ»¶ÀÕ¼´ò¿ª£¬ÕâʱÊÇû·¨¶ÔÎļþ½øÐб¸·Ý²Ù×÷µÄ¡£Òò´Ë£¬ÒªÏ뱸·ÝÕâЩÎļþ£¬±ØÐ뽫´ò¿ªËüÃǵÄÄÇЩ½ø³Ìkillµô¡£ÄÇôÈçºÎ¸É¾»µØÉ±ËÀÕâЩ´ò¿ªÎļþµÄ½ø³ÌÄØ£¿ÏàÐÅ¿´Íê±¾Îĺó£¬×ÔÈ»»áÓа취½â¾ö£¡

Æäʵ£¬ÔÚ½ÏеÄWindows²Ù×÷ϵͳ°æ±¾ÖÐÓÐÒ»¸ö¹¤¾ß³ÌÐò½Ðtskill.exe£¬ÓÃËü¾Í¿ÉÒÔ½â¾öÎÊÌ⡣Ҫɱµôij¸ö³ÌÐòµÄ½ø³Ì£¬¿ÉÒÔÊäÈëÏÂÃæµÄÃüÁî±ã¿ÉÒÔɱËÀÆäÔËÐÐʵÀý£º tskill ³ÌÐòÃû      
µ«ÊÇÎÒÏëÔÚ×Ô¼ºÐ´µÄ´úÂëÀïʵÏÖtskillµÄ¹¦ÄܸÃÈçºÎ×öÄØ£¿×ȫµÄɱËÀ½ø³ÌµÄ·½·¨ÊÇÏòÔËÐгÌÐòµÄÖ÷´°¿Ú·¢ËÍWM_CLOSEÏûÏ¢¡£ HWND hwnd = // »ñµÃÖ÷´°¿Ú
PostMessage(hwnd, WM_CLOSE, 0, 0);      
·¢ËÍ´ËÏûÏ¢ºó£¬Í¨³£Ó¦¸ÃµÈ´ýÖ±µ½½ø³ÌȷʵÖÕÖ¹£º HANDLE hp = OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE,FALSE,pid);
WaitForSingleObject(hp, 5000); // µÈ´ý5Ãë      
µ±½ø³ÌÖÕֹʱ£¬Ëü·¢³ö״̬Ðźţ¬²¢ÇÒ WaitForSingleObject ·µ»ØWAIT_OBJECT_0¡£Èç¹û·µ»Ø±ðµÄÖµ£¬½ø³ÌҪô¹ÒÆðÁË£¬ÒªÃ´ÈÔÈ»ÔÚ½øÐд¦Àí¡£ÔÚÕâÖÖÇé¿öÏ£¬É±ËÀÕâ¸ö½ø³ÌµÄΨһ·½·¨ÊÇÓù¦ÄܸüÇ¿´óµÄTerminateProcess£º if (WaitForSingleObject(hp, 5000) != WAIT_OBJECT_0)
    TerminateProcess(hp,0);        
Èç¹ûÏë¸ÉµÃƯÁÁÒ»µã£¬¿ÉÒÔÔڹرÕ֮ǰÏòÖ÷´°¿Ú·¢ËÍÒ»¸öWM_QUERYENDSESSIONÏûÏ¢¡£µ±Óû§½áÊø»á»°£¨log out£©»òÕßÓÐÈ˵÷ÓÃExitWindowsʱ£¬Ó¦ÓóÌÐò»áÊÕµ½Õâ¸öÏûÏ¢¡£È»ºó×¼±¸¼´½«À´ÁÙµÄËÀÍö¡£´Ëʱһ°ã¶¼»áµ¯³öÒ»¸öÈ·È϶Ի°¿ò£¬¸æËßÊÀÈË£º¡°ÎÒÒªÍêµ°ÁË£¬Èç¹ûÒª±£´æÐ޸ĵĶ«Î÷£¬ÏÖÔÚÊÇ×î¼Ñʱ»ú£¬Ïë±£´æÂ𣿡±ÓÐÈýÖÖÑ¡Ôñ£¨Yes/No/Cancel£©¡£´ËÍ⣬WM_QUERYENDSESSIONÉõÖÁ¿ÉÒԾܾøËÀÍö£¨°´ÏÂ"Cancel¼ü"£©£¬Èç¹ûÊÇÕâÑù£¬ÉúÃü½«»áÑÓÐø¡£´úÂëÓ¦¸ÃÕâÑùд£º DWORD bOKToKill = FALSE;
SendMessageTimeout(hwnd, WM_QUERYENDSESSION, 0, 0,
    SMTO_ABORTIFHUNG|SMTO_NOTIMEOUTIFNOTHUNG, 100, &bOKToKill);
if (bOKToKill) {
  // ·¢ËÍWM_CLOSE ²¢µÈ´ý
}      
Èç¹ûÏëÒª¹Ø±ÕµÄ½ø³Ì±»¹ÒÆð¡£Ê¹ÓÃSendMessageTimeout¾Í·Ç³£ÖØÒª£¬¶ø²»ÊÇÓÃSendMessage¡£SMTO_NOTIMEOUTIFNOTHUNGÊÇÒ»¸öÖ»ÓÐWindows 2000 ºÍWindows XP²ÅÓеıêÖ¾¡£ÆäÒâÒåÊÇ¡°Èç¹ûÏß³ÌûÓÐ¹ÒÆð£¬²»Òª³¬Ê±¡£¡±»»¾ä»°Ëµ¾ÍÊÇ:Èç¹ûÏß³ÌÕýÔÚ½øÐÐÕý³£´¦Àí£¬ÄÇôÓÀÔ¶µÈ´ý£¬ÒÔ±ãÓû§ÄÜ¿´µ½¶Ô»°¿ò²¢¾ö¶¨×öʲô¡£µ±Óû§×îÖÕ×ö³ö¾ö¶¨ºó£¬SendMessageTimeout½«´ø×ÅÏàÓ¦µÄbOKToKillÖµ·µ»Ø¡£ËùÓÐÕâЩµÄǰÌáÊÇÆäËüµÄÓ¦ÓóÌÐòÔËÐÐÕý³£²¢ÇÒWM_QUERYENDSESSIONÒ²µÃµ½Õý³£´¦Àí¡£ ±¾ÎÄÌṩÁËÒ»¸öСÀý×Ó³ÌÐòkp.exe£¬ÏÂÃæÊǹؼü´úÂ룺 /////////////////////////////////////////////
kp.exe³ÌÐò´úÂë
////////////////////////////////////////////

#include "stdafx.h"
#include "EnumProc.h"

typedef list CStringList;         // ʹÓÃSTL£¬ÓëMFCµÄÀàËÆ
inline BOOL isswitch(TCHAR c) { return c==L''''''''/'''''''' || c==L''''''''-''''''''; }

int main(int argc, TCHAR* argv[], TCHAR* envp[])
{
    CStringList cmdargs;             // ÃüÁîÐвÎÊý (ҪɱËÀµÄ½ø³Ì£¬¿ÉÒÔ¶à¸ö)
    BOOL bDisplayOnly=FALSE;     // ²»É±£¬Ö»ÊÇÏÔʾ
    BOOL bQuiet=FALSE;           // ½ûÖ¹³ö´íÐÅÏ¢
    BOOL bZap=FALSE;            // Ç¿ÐÐɱËÀ

    // ½âÎöÃüÁîÐпª¹Ø£¬¿ª¹ØË³Ðò¿ÉÒÔÈÎÒâ
    for (int i=1; i         if (isswitch(argv[0])) {
            for (UINT j=1; j); j++) {
                switch(tolower(argv[j])) {
                case ''''''''?'''''''':    help();    return 0;
                case ''''''''n'''''''':    bDisplayOnly=TRUE; break;
                case ''''''''q'''''''':    bQuiet=TRUE;       break;
                case ''''''''z'''''''':    bZap=TRUE;         break;
                default:
                    return help();
                }
            }
        } else {
            cmdargs.push_back(argv);     // Èç¹ûÊÇ·Ç¿ª¹Ø²ÎÊý£¬Ìí¼Óµ½Áбí
        }
    }
    if (cmdargs.size()<=0)
        help();

    // ±éÀú²ÎÊý£¨Ä£¿éÃû£©£¬Ò»¸öÒ»¸ö¸Éµô
    CStringList::iterator it;
    for (it=cmdargs.begin(); it!=cmdargs.end(); it++) {
        CFindKillProcess fkp;
        DWORD pid = fkp.FindProcess(it->c_str());
        if (pid) {
            if (bDisplayOnly) {
                _tprintf(_T("Kill process %d(0x%08x)\n",pid,pid);
            } else {
                fkp.KillProcess(pid, bZap);
            }
        } else if (!bQuiet) {
            _tprintf(_T("´íÎó: ÕÒ²»µ½½ø³Ì ''''''''%s''''''''.\n",it->c_str());
        }
    }
    return 0;
}      
Õâ¸ö³ÌÐòµÄ¹¦ÄÜÓëtskillÀàËÆ£¬ÓÃËüÒ²¿ÉÒÔɱËÀ½ø³Ì¡£ÎªÁËÔöÇ¿´úÂëµÄ¿ÉÖØÓÃÐÔ£¬½«ÊµÏÖϸ½Ú¶¼·â×°ÔÚÒ»¸ö½ÐCFindKillProcessµÄÀàÖУ¬°üÀ¨²éÕÒºÍɱËÀ½ø³Ì£¬ÏêÇéÇë²Î¼ûEnumProc.hºÍEnumProc.cppÎļþ¡£ÎļþÖл¹ÓÐÁíÍâÁ½¸ö¿ÉÖØÓÃÀ࣬һ¸öÊÇCProcessIterator£¬ÁíÒ»¸öÊÇCWindowIterator¡£ÕâÔÚÒÔǰµÄÎÄÕÂÖÐÓйýÏêϸÃèÊö¡£¼û¡°ÈçºÎ»ñȡij¸ö½ø³ÌµÄÖ÷´°¿ÚÒÔ¼°´´½¨½ø³ÌµÄ³ÌÐòÃû£¿¡± ///////////////////////////////////////////////////////////////
EnumProc.hºÍEnumProc.cpp
//////////////////////////////////////////////////////////////
EnumProc.h  


//////////////////////////////////////////////////////////////////////////////////////////////
// ÏÂÃæÊÇCFindKillProcessµÄ¶¨ÒåºÍʵÏÖ£¬ÕâÊÇÒ»¸öСÇɹ¤¾ßÀ࣬רÃÅÓÃÀ´Í¨¹ýij¸ö½ø³ÌµÄÃû×Ö²éÕÒ²¢É±ËÀËü¡£
//
class CFindKillProcess {
public:
    CFindKillProcess();
    ~CFindKillProcess();
    DWORD FindProcess(LPCTSTR lpModname, BOOL bAddExe=TRUE);
    BOOL  KillProcess(DWORD pid, BOOL bZap);
};

EnumProc.cpp  

#include "stdafx.h"
#include "EnumProc.h"

¡­¡­
//ʵÏÖCProcessIterator
¡­¡­.
//ʵÏÖCWindowIterator

////////////////////////////////////////////////////////////////
// ʵÏÖCFindKillProcess - ÓÃÄ£¿éÃû²éÕÒ²¢É±ËÀ½ø³Ì¡£
//
CFindKillProcess::CFindKillProcess()
{
}

CFindKillProcess::~CFindKillProcess()
{
}

//////////////////
// ËÑË÷Óë²ÎÊýÆ¥ÅäµÄÄ£¿éÃû£¬Ä£¿éÃû¿ÉÒÔÊÇfoo»òÕßfoo.exe
//
DWORD CFindKillProcess::FindProcess(LPCTSTR modname, BOOL bAddExe)
{
    CProcessIterator itp;
    for (DWORD pid=itp.First(); pid; pid=itp.Next()) {
        TCHAR name[_MAX_PATH];
        CProcessModuleIterator itm(pid);
        HMODULE hModule = itm.First(); // .EXE
        if (hModule) {
            GetModuleBaseName(itm.GetProcessHandle(),
                hModule, name, _MAX_PATH);

            string sModName = modname;
            if (strcmpi(sModName.c_str(),name)==0)
                return pid;
            sModName += ".exe";
            if (bAddExe && strcmpi(sModName.c_str(),name)==0)
                return pid;
        }
    }
    return 0;
}

//////////////////
// ¸É¾»µØÉ±ËÀ½ø³Ì£º¹Ø±Õ´°¿ÚºóµÈ´ý¡£
// bZap=TRUE £ºÇ¿ÐÐɱËÀ
//
BOOL CFindKillProcess::KillProcess(DWORD pid, BOOL bZap)
{
    CMainWindowIterator itw(pid);
    for (HWND hwnd=itw.First(); hwnd; hwnd=itw.Next()) {
        DWORD bOKToKill = FALSE;
        SendMessageTimeout(hwnd, WM_QUERYENDSESSION, 0, 0,
            SMTO_ABORTIFHUNG|SMTO_NOTIMEOUTIFNOTHUNG, 100, &bOKToKill);
        if (!bOKToKill)
            return FALSE;  // ²»Ô¸ÒâËÀÍö£¬È¡ÏûÐж¯
        PostMessage(hwnd, WM_CLOSE, 0, 0);
    }

    // ÎÒÒѾ­¹Ø±ÕÁËÈ«²¿Ö÷´°¿Ú£¬ÏÖÔڵȴý½ø³ÌËÀÍö¡£  
    BOOL bKilled = TRUE;
    HANDLE hp=OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE,FALSE,pid);
    if (hp) {
        if (WaitForSingleObject(hp, 5000) != WAIT_OBJECT_0) {
            if (bZap) { // ²»Ô¸ËÀ£¬ÄDz»ÐУ¬Äã±ØÐëËÀ
                TerminateProcess(hp,0);
            } else {
                bKilled = FALSE;
            }
        }
        CloseHandle(hp);
    }
    return bKilled;
}
CFindKillProcessµÄʹÓ÷½·¨ÈçÏ£º

CFindKillProcess fkp;
DWORD pid = fkp.FindProcess("outlook.exe";
fkp.KillProcess(pid);
FindKillProcessÓà CProcessIterator ºÍ CProcessModuleIteratorÀàÀ´Ã¶¾ÙËùÓнø³Ì£¬²éÕÒµÚÒ»¸öÓëÃû×ÖÆ¥ÅäµÄÄ£¿é£¨¼´Æô¶¯½ø³ÌµÄexeÎļþ£©£º CProcessIterator itp;
for (DWORD pid=itp.First(); pid; pid=itp.Next()) {
  CProcessModuleIterator itm(pid);
  HMODULE hModule = itm.First(); // .EXE
  if (/* Ä£¿éÃû =  ÕýÔÚ²éÕÒµÄÄ£¿éÃû*/) {
    return pid;
  }
}      
FindProcess²éÕÒfoo»òÕßfoo.exe¡£Èç¹ûÕÒµ½Õâ¸ö½ø³Ì£¬Ëü·µ»Ø´Ë½ø³ÌµÄID£¬È»ºóÄ㽫Ëü´«¸øCFindKillProcess::KillProcess¡£KillProcess·â×°Á˹رմ°¿ÚÒÔ¼°ÖÕÖ¹Âß¼­¡£ËüÀûÓÃCMainWindowIteratorÀ´Ã¶¾Ù½ø³ÌµÄÖ÷´°¿Ú£¨¿ÉÄܲ»Ö¹Ò»¸ö£¬¼û¡°ÈçºÎ»ñȡij¸ö½ø³ÌµÄÖ÷´°¿ÚÒÔ¼°´´½¨½ø³ÌµÄ³ÌÐòÃû£¿¡±£©£¬²¢·¢ËÍWM_CLOSEµ½Ã¿Ò»¸ö´°¿Ú£¬È»ºóµÈ´ý½ø³ÌËÀÍö¡£ËüÓÐÒ»¸ö²¼¶ûÐͲÎÊýÓÃÀ´Ö¸Ê¾µ±Ó¦ÓóÌÐò²»Ô¸ÒâËÀÍöʱÊÇ·ñÖ´ÐÐTerminateProcess¡£

[ Last edited by »ÃÓ°ÎÞºÛ on 2006-11-27 at 08:14 ]
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

×öÈËÒªºñµÀ°¡£¡ºñµÀ°¡£¡
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

ÐÐÏã×Ó

2Â¥2006-01-01 21:36:14
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ zsglly µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 07»¯Ñ§280·ÖÇóµ÷¼Á +6 722865 2026-03-23 6/300 2026-03-24 20:58 by allen-yin
[¿¼ÑÐ] Çóµ÷¼Á +5 ÁÖ֮Ϧ 2026-03-24 5/250 2026-03-24 17:16 by dick_runner
[¿¼ÑÐ] 292Çóµ÷¼Á +4 ¶ì¶ì¶ì¶î¶î¶î¶î¶ 2026-03-24 4/200 2026-03-24 16:41 by peike
[¿¼ÑÐ] 307Çóµ÷¼Á +5 ³¬¼¶ÒÁ°º´óÍõ 2026-03-24 5/250 2026-03-24 15:46 by ÐÇ¿ÕÐÇÔÂ
[¿¼ÑÐ] ²ÄÁÏÓ뻯¹¤328·Öµ÷¼Á +4 ¡££¬¡££¬¡££¬¡£i 2026-03-23 4/200 2026-03-24 11:03 by 544594351
[¿¼ÑÐ] Çó²ÄÁÏ£¬»·¾³×¨Òµµ÷¼Á +3 18567500178 2026-03-18 3/150 2026-03-23 23:50 by ÈÈÇéɳĮ
[¿¼ÑÐ] 341Çóµ÷¼Á(Ò»Ö¾Ô¸ºþÄÏ´óѧ070300) +5 ·¬ÇÑÍ·--- 2026-03-22 6/300 2026-03-23 23:45 by Txy@872106
[¿¼ÑÐ] ¹¤¿Æ0856Çóµ÷¼Á +5 ãåÎö͡͡ 2026-03-21 5/250 2026-03-23 17:56 by º£ÉªÞ±-
[¿¼ÑÐ] ÉϺ£µçÁ¦´óѧ²ÄÁÏ·À»¤ÓëвÄÁÏÖØµãʵÑéÊÒÕÐÊÕµ÷¼ÁÑо¿Éú£¨²ÄÁÏ¡¢»¯Ñ§¡¢µç»¯Ñ§£¬»·¾³£© +3 ÎÒ°®Ñ§µç³Ø 2026-03-23 3/150 2026-03-23 17:16 by AZMK
[¿¼ÑÐ] 328Çóµ÷¼Á +4 LHHL66 2026-03-23 4/200 2026-03-23 14:55 by lbsjt
[¿¼ÑÐ] 352Çóµ÷¼Á +3 ´óÃ×·¹£¡ 2026-03-22 3/150 2026-03-22 23:28 by king123£¡
[¿¼ÑÐ] 306Çóµ÷¼Á +5 À´ºÃÔËÀ´À´À´ 2026-03-22 5/250 2026-03-22 16:17 by BruceLiu320
[¿¼ÑÐ] 319Çóµ÷¼Á +4 СÁ¦Æøçæçæ 2026-03-20 4/200 2026-03-22 15:53 by ColorlessPI
[¿¼ÑÐ] ³õÊÔ 317 +7 °ëÀ­Ô±û 2026-03-20 7/350 2026-03-21 22:26 by peike
[¿¼ÑÐ] 266Çóµ÷¼Á +3 ÍÛºôºßºôºß 2026-03-20 3/150 2026-03-21 16:46 by barlinike
[¿¼ÑÐ] Ò»Ö¾Ô¸ÖØÇì´óѧ085700×ÊÔ´Óë»·¾³×Ü·Ö308Çóµ÷¼Á +7 īīĮ 2026-03-20 7/350 2026-03-21 16:36 by barlinike
[¿¼ÑÐ] ÖÐÄÏ´óѧ»¯Ñ§Ñ§Ë¶337Çóµ÷¼Á +3 niko- 2026-03-19 6/300 2026-03-20 21:58 by luoyongfeng
[¿¼ÑÐ] 290Çóµ÷¼Á +7 ^O^Ø¿ 2026-03-19 7/350 2026-03-20 21:43 by JourneyLucky
[¿¼ÑÐ] Ò»Ö¾Ô¸Î÷°²½»Í¨´óѧ ѧ˶ 354Çóµ÷¼Á211»òÕß˫һÁ÷ +3 ÎÒÏëÒª¶ÁÑо¿Éú 2026-03-20 3/150 2026-03-20 20:13 by JourneyLucky
[¿¼ÑÐ] 086500 325 Çóµ÷¼Á +3 Áì´øÐ¡ÐÜ 2026-03-19 3/150 2026-03-20 18:38 by ¾¡Ë´Ò¢1
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û