• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 64, 文章 - 11, 評(píng)論 - 12, 引用 - 0
            數(shù)據(jù)加載中……

            進(jìn)程初探之<4>

                    繼寫(xiě)完上篇<進(jìn)程初探之終結(jié)>文章,我有很長(zhǎng)時(shí)間沒(méi)有來(lái)管理我博客中的閑言片斷了。五一,公司放了三天假,原計(jì)劃在此期間去公園散散步,拿本書(shū)在大樹(shù)下的石凳上坐上半天,累了休息一下,欲在這喧囂都市中尋找心中的那份寧?kù)o。再花一天時(shí)間去植物園中觀賞游玩一趟,讓滿(mǎn)眼的綠意來(lái)驅(qū)趕滿(mǎn)腦子的項(xiàng)目需求設(shè)計(jì),讓這重負(fù)的腦袋斷電休息一天。然這幾天老天不作美,卻陰著臉,下起雨來(lái)了。看來(lái)計(jì)劃又得落空。
                   
                     時(shí)下很多介紹人際交往、公關(guān)之類(lèi)的書(shū)藉。大凡其中都談到了要因人而異,了解對(duì)方。然后才能展開(kāi)有效的交際方法。是的,比如說(shuō)有些人就喜歡與少言之人做朋友,而有些人卻喜歡與能言者做朋友。有的人喜歡談?wù)危械娜讼矚g談利益。你如果與剛愎自用之人談與其相悖的觀點(diǎn),我估計(jì)會(huì)鬧個(gè)不歡而散,而與虛懷若谷的納言人則可能會(huì)視你為良友。同一番話(huà)給與不同的人,就產(chǎn)生了截然不同的效果,所以我們要有因人而異的交際策略。這也就提出了要我們?cè)谙牒眠@個(gè)策略之前就要了解一個(gè)人。進(jìn)程之間也會(huì)是如此的嗎?

                   上面說(shuō)了這么多的引言,下面來(lái)說(shuō)一進(jìn)程的發(fā)現(xiàn),認(rèn)識(shí)。下面用一段代碼示例枚舉了當(dāng)前系統(tǒng)中的進(jìn)程。
             1#ifndefine _XIAO_TOOLHELP_H_
             2#define _XIAO_TOOLHELP_H_
             3#include <TLHELP32.H>
             4#include <tchar.h>
             5//////////////////////////////////////////////////////////////
             6
             7class CToolHelp
             8{    
             9public:
            10    CToolHelp(DWORD dwFlags = 0,DWORD dwProcessId = 0);
            11    ~CToolHelp();
            12
            13    BOOL CreateSnapshot(DWORD dwFlags,DWORD dwProcessId = 0);
            14
            15    BOOL ProcessFirst(PPROCESSENTRY32 ppe);
            16    BOOL ProcessNext(PPROCESSENTRY32 ppe);
            17    BOOL ProcessFind(DWORD dwProcessId,PPROCESSENTRY32 ppe) ;
            18}

            19#endif
            20
                  cpp實(shí)現(xiàn)文件如下
             1///////////////////////////////////////////////////////////////////////////////
             2
             3CToolHelp::CToolHelp(DWORD dwFlags,DWORD dwProcessId)
             4{
             5    m_hSnapshot=INVALID_HANDLE_VALUE;
             6    CreateSnapshot(dwFlags,dwProcessId);
             7}

             8
             9//////////////////////////////////////////////////////////////////////////////
            10
            11CToolHelp::~CToolHelp()
            12{
            13    if(m_hSnapshot != INVALID_HANDLE_VALUE)
            14    {
            15        CloseHandle(m_hSnapshot);
            16    }

            17}

            18
            19//////////////////////////////////////////////////////////////////////////////
            20
            21BOOL CToolHelp::CreateSnapshot(DWORD dwFlags,DWORD dwProcessId)
            22{
            23    if(m_hSnapshot != INVALID_HANDLE_VALUE)
            24    {
            25        CloseHandle(m_hSnapshot);
            26    }

            27    if(dwFlags == 0)
            28    {
            29        m_hSnapshot = INVALID_HANDLE_VALUE;
            30    }

            31    else
            32    {
            33        m_hSnapshot = CreateToolhelp32Snapshot(dwFlags,dwProcessId);
            34    }

            35    return m_hSnapshot != INVALID_HANDLE_VALUE;
            36}

            37
            38////////////////////////////////////////////////////////////////////////////
            39
            40BOOL CToolHelp::ProcessFirst(PPROCESSENTRY32 ppe)
            41{
            42    BOOL fOk = Process32First(m_hSnapshot,ppe);
            43    if (fOk && (ppe->th32ParentProcessID==0))
            44    {
            45        fOk = ProcessNext(ppe);
            46    }

            47    return fOk;
            48}

            49
            50////////////////////////////////////////////////////////////////////////////
            51
            52BOOL CToolHelp::ProcessNext(PPROCESSENTRY32 ppe)
            53{
            54    BOOL fOk = Process32Next(m_hSnapshot,ppe);
            55    if (fOk && (ppe->th32ParentProcessID==0))
            56    {
            57        fOk = ProcessNext(ppe);
            58    }

            59    return fOk;
            60}

            61
            62//////////////////////////////////////////////////////////////////////////////
            63
            64BOOL CToolHelp::ProcessFind(DWORD dwProcessId,PPROCESSENTRY32 ppe)
            65{
            66    BOOL fFound = FALSE;
            67    for(BOOL fOk=ProcessFirst(ppe); fOk ;fOk = ProcessNext(ppe))
            68    {
            69        fFound = (ppe->th32ProcessID == dwProcessId);
            70        if(fFound)
            71        {
            72            break;
            73        }

            74    }

            75    return TRUE;
            76}
                  聲明:上面的代碼的構(gòu)思及實(shí)現(xiàn)都是Jeffrey這位頂級(jí)大牛的一些片斷代碼。
                  
                     進(jìn)程是系統(tǒng)的內(nèi)核對(duì)象,內(nèi)核對(duì)象就是僅有系統(tǒng)內(nèi)核管理的一塊內(nèi)存數(shù)據(jù)結(jié)構(gòu)。從這段內(nèi)核對(duì)象的代碼里我們可以看出內(nèi)核對(duì)象為系統(tǒng)內(nèi)核所專(zhuān)有訪問(wèn)權(quán),也說(shuō)明了內(nèi)核對(duì)象在系統(tǒng)中存有其數(shù)信息。為此上面就用了這個(gè)函數(shù)
                     HANDLE  m_hSnapshot  =  CreateToolhelp32Snapshot(dwFlgs,dwProcessId);
            來(lái)建立一份系統(tǒng)的快照。對(duì)于這個(gè)函數(shù)的兩個(gè)參數(shù),前一個(gè)是指明將立快照的類(lèi)型,后一個(gè)是指明是否針對(duì)某一個(gè)特殊的進(jìn)程ID的快照。在我們有了系統(tǒng)的快照之后。我們將用下面的兩個(gè)函數(shù)來(lái)瀏覽快照中的進(jìn)程信息。
                           PROCESSENTRY32 pe = { sizeof(pe) };
                           BOOL  Process32First(m_hSnapshot,&pe);
                           BOOL  Process32Next(m_hSnapshot,&pe);
            對(duì)于上述要注明一點(diǎn)的是pe結(jié)構(gòu)必須初始化,否則將不會(huì)成功。這樣數(shù)來(lái)要實(shí)現(xiàn)系統(tǒng)進(jìn)程的枚舉也就這么幾個(gè)函數(shù)了。上面這種實(shí)現(xiàn)方法在win95 ,win98,win2000,winxp,及win2003中都能夠這樣。

                     上面介紹了通用的一種方法,下面再介紹一種不能在win95,win98中的枚舉方法,這原因還得從MS的windows NT開(kāi)發(fā)小組說(shuō)起,他們更中意下面的枚舉方法。
                     利用psapi.dll中提供的函數(shù)來(lái)實(shí)現(xiàn)進(jìn)程等內(nèi)核對(duì)象的枚舉。
                        BOOL EnumProcesses(DWORD *pdwProcess,DWORD cb,DWORD cbNeeded);
                     當(dāng)然還可枚舉其它的內(nèi)核對(duì)象。

                  好了系統(tǒng)進(jìn)程的枚舉暫且就回憶到這里。

            posted on 2008-05-02 14:51 Robertxiao 閱讀(363) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): Windows/MFC探索

            久久成人精品| 久久国产亚洲精品| 久久精品亚洲乱码伦伦中文| 日本精品久久久久久久久免费| 一级做a爰片久久毛片毛片| 久久久久久久精品成人热色戒| 日韩人妻无码精品久久久不卡 | 久久狠狠高潮亚洲精品| 青青青青久久精品国产h| 久久午夜综合久久| 国内精品久久久久影院日本 | 久久精品亚洲男人的天堂| 国内精品九九久久精品| 大美女久久久久久j久久| 伊人久久久AV老熟妇色| 久久99精品九九九久久婷婷| 久久亚洲精品国产精品| 精品久久久久中文字幕一区| 久久99精品国产| 一本色道久久综合狠狠躁| 久久天天躁狠狠躁夜夜av浪潮| 久久噜噜电影你懂的| 久久w5ww成w人免费| 久久久久亚洲AV片无码下载蜜桃| 99久久久久| 精品久久一区二区| 精品国产乱码久久久久久1区2区| 7777精品伊人久久久大香线蕉| 久久99精品国产99久久6| 国产福利电影一区二区三区久久老子无码午夜伦不 | 久久精品国产亚洲av水果派 | 亚洲国产精品久久电影欧美 | 久久综合丁香激情久久| 狠狠色噜噜色狠狠狠综合久久| 色天使久久综合网天天| 久久国产视频99电影| 亚洲乱亚洲乱淫久久| 亚洲精品高清久久| 国产99久久久久久免费看| 91精品婷婷国产综合久久| 91超碰碰碰碰久久久久久综合|