²é¿´: 263  |  »Ø¸´: 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 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 085602»¯Ñ§¹¤³Ì350£¬µ÷¼Á£¬ÓÐûÓÐ211µÄ +4 ÀûºÃÀûºÃ. 2026-03-02 7/350 2026-03-02 21:46 by sunny81
[¿¼ÑÐ] 289Çóµ÷¼Á +3 BrightLL 2026-03-02 4/200 2026-03-02 21:17 by BrightLL
[¿¼ÑÐ] 272Çóµ÷¼Á +9 ²Ä×ÏÓл¯ 2026-02-28 9/450 2026-03-02 20:22 by hypershenger
[¿¼ÑÐ] 085600²ÄÁϹ¤³ÌÒ»Ö¾Ô¸Öпƴó×Ü·Ö312Çóµ÷¼Á +9 ³ÔÏüÒ¹1 2026-02-28 11/550 2026-03-02 20:14 by hypershenger
[¿¼ÑÐ] Öйú¿ÆÑ§¼¼Êõ´óѧ²ÄÁÏÓ뻯¹¤281Çóµ÷¼Á£¬ÓпÆÑкͻñ½±¾­Àú +5 wsxw 2026-03-02 5/250 2026-03-02 20:12 by hypershenger
[¿¼ÑÐ] 271Çóµ÷¼Á +3 Ricardo1113 2026-03-02 3/150 2026-03-02 19:53 by zhukairuo
[¿¼ÑÐ] 275Çóµ÷¼Á +7 Ã÷Ô¶Çóѧ 2026-03-01 7/350 2026-03-02 19:22 by zhukairuo
[¿¼ÑÐ] ²ÄÁÏ085601µ÷¼Á +5 ¶à¶à×Ó. 2026-03-02 5/250 2026-03-02 19:15 by zhukairuo
[¿¼ÑÐ] һ־Ըɽ¶«´óѧ²ÄÁÏÓ뻯¹¤325Çóµ÷¼Á +5 °ë½ØµÄÊ«0927 2026-03-02 5/250 2026-03-02 18:37 by Ã÷ÁÁ9527
[¿¼ÑÐ] Ò»Ö¾Ô¸»ªÄÏÀí¹¤´óѧ²ÄÁÏÓ뻯¹¤326·Ö£¬Çóµ÷¼Á +3 wujinrui1 2026-02-28 3/150 2026-03-02 16:36 by chuocheng
[¿¼ÑÐ] »¯¹¤×¨Ë¶348£¬Ò»Ö¾Ô¸985Çóµ÷¼Á +6 ¸¥¸ñ¸ö 2026-02-28 9/450 2026-03-02 14:09 by liyongv
[¿¼ÑÐ] 291 Çóµ÷¼Á +3 »¯¹¤2026½ì±ÏÒµÉ 2026-03-02 3/150 2026-03-02 12:55 by houyaoxu
[¿¼ÑÐ] 292Çóµ÷¼Á +7 yhk_819 2026-02-28 7/350 2026-03-02 12:43 by Î޼ʵIJÝÔ­
[¿¼ÑÐ] 295Çóµ÷¼Á +8 19171856320 2026-02-28 8/400 2026-03-02 11:19 by yuchj
[¿¼ÑÐ] 264Çóµ÷¼Á +4 °ÍÀ­°ÍÀ­¸ù556 2026-02-28 4/200 2026-03-02 10:48 by yuchj
[¿¼ÑÐ] 299Çóµ÷¼Á +3 YÄ«Ã÷ÆåÃîY 2026-02-28 5/250 2026-03-01 21:01 by tangxiaotian
[¿¼ÑÐ] 291·Ö¹¤¿ÆÇóµ÷¼Á +9 science¶ö¶ö 2026-03-01 10/500 2026-03-01 18:55 by 18137688336
[ÂÛÎÄͶ¸å] Optics lettersͶ¸å±»¾ÜÇóÖú 30+3 luckyry 2026-02-26 4/200 2026-03-01 09:06 by babero
[¿¼ÑÐ] 304Çóµ÷¼Á +3 52hz~~ 2026-02-28 5/250 2026-03-01 00:00 by 52hz~~
[˶²©¼ÒÔ°] ¡¾²©Ê¿ÕÐÉú¡¿Ì«Ô­Àí¹¤´óѧ2026»¯¹¤²©Ê¿ +4 N1ce_try 2026-02-24 8/400 2026-02-26 08:40 by N1ce_try
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û