²é¿´: 262  |  »Ø¸´: 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 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] 0856µ÷¼Á +7 ÁõÃÎ΢ 2026-02-28 7/350 2026-03-02 14:11 by liyongv
[¿¼ÑÐ] ²ÄÁÏÓ뻯¹¤328Çóµ÷¼Á +3 ¡££¬¡££¬¡££¬¡£i 2026-03-02 3/150 2026-03-02 13:09 by houyaoxu
[¿¼ÑÐ] 291 Çóµ÷¼Á +3 »¯¹¤2026½ì±ÏÒµÉ 2026-03-02 3/150 2026-03-02 12:55 by houyaoxu
[¿¼ÑÐ] 26¿¼Ñб¨¿¼Î÷¹¤´ó²ÄÁÏ308·ÖÇóµ÷¼Á +4 weizhong123 2026-03-01 4/200 2026-03-02 12:46 by Î޼ʵIJÝÔ­
[»ù½ðÉêÇë] ÃæÉÏÄ£°å¸Ä²»ÁËÒ³±ß¾à°É£¿ +6 ieewxg 2026-02-25 7/350 2026-03-02 12:44 by stidwellNK
[¿¼ÑÐ] ¿¼Ñи´ÊÔµ÷¼Á£¬¹ý¹ú¼ÒÏßµÄͬѧ¶¼¿É±¨Ãû +3 ºÚ£¡ÔÚ¸ÉÂï 2026-02-28 4/200 2026-03-02 12:20 by »¨Óã²»ÊÇÓã
[¿¼ÑÐ] ²ÄÁϹ¤³Ì274Çóµ÷¼Á +4 Lilithan 2026-03-01 4/200 2026-03-02 12:06 by yuchj
[¿¼ÑÐ] ¹þ¹¤´ó¼ÆËã»úÁõ„ÂÍŶÓÕÐÉú +4 hit_aiot 2026-03-01 6/300 2026-03-02 11:53 by Ò»ÉùÎʺÃ
[¿¼ÑÐ] »¯¹¤×¨Ë¶342£¬Ò»Ö¾Ô¸´óÁ¬Àí¹¤´óѧ£¬Çóµ÷¼Á +6 kyf»¯¹¤ 2026-02-28 7/350 2026-03-02 10:56 by Î޼ʵIJÝÔ­
[¿¼ÑÐ] 274Çóµ÷¼Á +3 cgyzqwn 2026-03-01 7/350 2026-03-02 10:38 by lature00
[¿¼ÑÐ] 0856²ÄÁϵ÷¼Á +4 ÑØ°¶Óб´¿ÇOUC 2026-03-02 4/200 2026-03-02 10:19 by ¹«èªåÐÒ£
[¿¼ÑÐ] ²ÄÁÏѧµ÷¼Á +10 ÌáÉñ¶¹É³°ü 2026-02-28 12/600 2026-03-02 09:26 by ÀîÀÏʦ£¡
[¿¼ÑÐ] ²ÄÁÏÀàÇóµ÷¼Á +11 wana_kiko 2026-02-28 14/700 2026-03-02 08:46 by ´ÏÃ÷µÄ´óËÉÊó
[¿¼ÑÐ] 322Çóµ÷¼Á +3 Ðܾ³†´ 2026-03-01 3/150 2026-03-02 08:44 by houyaoxu
[¿¼ÑÐ] 0857µ÷¼Á +4 Ò»ll°ë 2026-02-28 5/250 2026-03-02 02:33 by 908055542
[¿¼ÑÐ] 299Çóµ÷¼Á +3 YÄ«Ã÷ÆåÃîY 2026-02-28 5/250 2026-03-01 21:01 by tangxiaotian
[¿¼ÑÐ] Ò»Ö¾Ô¸ÖÐÄÏ´óѧÀíѧ»¯Ñ§ +4 15779376950 2026-03-01 5/250 2026-03-01 19:00 by Fff-1
[¿¼ÑÐ] 307Çóµ÷¼Á +5 wyyyqx 2026-03-01 5/250 2026-03-01 15:21 by Fff-1
[¿¼ÑÐ] 295¸´ÊÔµ÷¼Á +3 ¼òľChuFront 2026-03-01 3/150 2026-03-01 14:27 by zzxw520th
[ÂÛÎÄͶ¸å] Optics lettersͶ¸å±»¾ÜÇóÖú 30+3 luckyry 2026-02-26 4/200 2026-03-01 09:06 by babero
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û