锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
寰堝浜鴻涓篊++榪囨椂浜?涓嶆効鎰忓啀鑺辨椂闂村涔?鎴戜笉榪欐牱璁や負,C++鑳藉湪縐誨姩璁懼寮鍙戜笂,鑳藉敜璧風(fēng)浜屾槬. 鍦╳indows涓婄敤VS鐢ㄤ箙浜?瑕佹崲涓郴緇?鎹釜鐜,瀛︿範(fàn)浠d環(huán)澶珮浜?
涓鏉¤礬璧板埌榛戝緱浜?..
]]>
鎴戜滑鐨勬ā鍧椾紬澶氱湡鐨勬槸鍥犱負榪欎釜鍘熷洜鍚? 鎴戜笉璧炲悓.
涓涓紭縐鐨勮蔣浠墮鍏堝簲璇ユ槸鏄撲簬嫻嬭瘯鐨?鍙湁鏂逛究嫻嬭瘯,鎵嶈兘蹇熺殑瀹氫綅闂.
]]>
1錛屽儚鎴戣繖涔堢埍騫插噣鐨勪漢錛屽綋鐒朵笉鑳藉蹇嶅拰MM鑱婂ぉ鐨勬椂鍊欙紝鐪嬪埌涓涓唴琛e箍鍛婂湪涓婇潰涓闂竴闂紝榪欎笉寮曡鑰佺撼涔堬紱
2錛屼負浠涔堜笉鐢ㄥ叾瀹冨鎸傦紵鐝婄憵铏凡S錛屽啀娌$敤榪囧叾瀹冦傜幇鏈夌殑澶栨寕瀹炵幇浜嗕竴浜涙垜涓嶆兂瑕佺殑鍔熻兘錛岀湅IP涔熸病蹇呰錛岃亰澶╃殑閮芥槸鐔熶漢銆傚彟澶栵紝涓嶇煡閬撳畠鍋氫簡浜涗粈涔堜簨鎯咃紱
3錛屾墦鍙戣繖涓棤鑱婄殑鍛ㄦ湯銆?br>
鎬庢牱瀹炵幇錛?br> 1錛屼竾鑳界殑HOOK
鐜板湪鐢ㄥ埌鐨勬槸鍏ㄥ眬鐨凷HELL HOOK錛孒ook鐨勬槸紿楀彛鍒涘緩瀹屾垚鐨勬秷鎭紱
g_hShellHook = SetWindowsHookEx( WH_SHELL,
(HOOKPROC)ShellHook,
g_hInstance,
0);ShellHook 鐨勫疄鐜板涓?
static LRESULT CALLBACK ShellHook(UINT nCode, WPARAM wParam, LPARAM lParam)

{
if(nCode < 0)
goto CallOrg;
if( HSHELL_WINDOWCREATED == nCode )
{
if( !isQQWnd( (HWND)wParam ) )
goto CallOrg;
EnumChildWindows( (HWND)wParam, EnumChildProc, (LPARAM)0 );
}
CallOrg:
return CallNextHookEx( g_hShellHook, nCode, wParam, lParam);
} 
鍦ㄦ敹鍒扮獥鍙e垱寤哄悗鐨勬秷鎭椂錛屽氨鍒ゆ柇榪欎釜紿楀彛鏄笉鏄疩Q鐨?榪欓噷鐢ㄥ埌浜?GetWindowThreadProcessId 錛屽畠榪斿洖紿楀彛鐩稿叧鐨勮繘紼婭D
BOOL isQQWnd(HWND hWnd)

{
if( g_pContext == NULL )
return FALSE;
if( g_dwQQProcessID == 0 )
g_dwQQProcessID = GetQQProcessID();
DWORD dwWndProcessID;
if( GetWindowThreadProcessId( hWnd, &dwWndProcessID ) == 0 )
return FALSE;
return dwWndProcessID == g_dwQQProcessID;
}
鐒跺悗鏋氫婦瀹冪殑瀛愮獥鍙o紝鐪嬪畠鐨勫瓙紿楀彛鏈夋病鏈夊箍鍛婃帶浠訛紝鏈夌殑璇濆氨緇欏瓙鎺т歡鍙戦佷釜WM_CLOSE鐨勬秷鎭?
BOOL CALLBACK EnumChildProc(HWND hwnd, LPARAM lParam )

{
DWORD dwID = GetDlgCtrlID( hwnd );
if( dwID == 0x3e9 )
{
HWND hPrarent = GetParent( hwnd );
PostMessage(hwnd, WM_CLOSE, 0, 0 );
Sleep( 10 );
PostMessage(hPrarent, WM_PAINT, 0, 0 );
}
else if( dwID == 0x643f )
{
PostMessage(hwnd, WM_CLOSE, 0, 0 );
}
return TRUE;
}
鍏朵腑鐨勪袱涓‖緙栫爜鏄敤 spy++ 鍒嗘瀽鍑烘潵鐨勶紝鍙兘鍥犱負鐗堟湰鐨勪笉鍚岋紝浼氭湁宸紓銆傛墍浠ユ垜涓嶇‘瀹氳兘涓嶈兘鍏抽棴鍏跺畠鐗堟湰鐨凲Q騫垮憡銆傛垜浣跨敤鐨勭増鏈槸QQ2008璐哄瞾鐗堛?br>
--------------------------------------------------------------------------
鍚庤:
灝界瀹炵幇鐨勬妧鏈緢綆鍗?浣嗚繕鏄姳浜嗘垜澶у崐澶╃殑鏃墮棿. 鍐欏畬涔嬪悗瑙夊緱鏋氫婦瀛愮獥鍙g殑鏂瑰紡澶綆鏁? 鎴栬呰繕鏈夊叾瀹冮珮鏁堢偣鐨勬柟寮忋傚彟澶栬繕鏈夊叏灞閽╁瓙,鍙兘娌℃湁蹇呰銆傚鏋滀笅鍗堝懆鏈寔緇棤鑱婏紝鎴戜細灝濊瘯鏀硅繘涓涓嬨?br>
QQ鐨勮亰澶╁璇濇寰堢畝鍗?涓嶅儚MSN鐨勫璇濇,閾佹澘涓鍧?鐢╯py++鍟ラ兘鐪嬩笉鍒?浣嗘槸鍙互鐢?AccExplorer 鍒嗘瀽.鎯沖湪MSN鐨勫璇濇涓婂姞鐐逛笢瑗胯繘鍘伙紝瀹炵幇璧鋒潵寰堝洶闅俱傚榪欐柟闈㈡湁鐮旂┒鐨勫悓瀛︿笉濡ㄤ笌鎴戣璁轟竴涓嬪疄鐜幫紝涓璧峰涔?fàn)銆佽繘姝ャ?br>
浠g爜鐨勮鏁版病鏁幫紝鏈夋晥浠g爜浼拌涔熷氨鐧炬妸琛屽惂錛屽懙鍛碉紝鎴戞壙璁ゆ垜鏄爣棰樺厷銆?br>
闄? 婧愪唬鐮?+ bin
澶栭潰宸茬粡涓鐗?/span>7榛戙傚鍙?/span>H鍚涜繕娌″洖鏉ワ紝浠栨曚竴鍥炴潵灝辯帺娓告垙銆傛垜涓嶆曠帺娓告垙錛屼竴涓漢錛屽湪鍝兘涓鏍鳳紝鍙枩嬈㈠畨闈欍?/span>
涓孌甸煶涔愶紝涓鏉挅鍟★紝涓鏈功錛屼竴孌典唬鐮侊紝涓涓櫄涓娿傛湁鐐瑰枩嬈㈣繖縐嶆劅瑙変簡銆?/span>
涔愬績璇村緱瀵癸紝瑕佸鐢熸椿鏈夎姹傘傚懙鍛點?/span> 鐪嬫潵鎴戠殑瑕佹眰涔熶笉楂樸?/span>
涓婃鏄熸湡鍏徃鏂板憳宸ュ煿璁紝鍐呭鏄?#8220;鎴戠殑浜旀牱”錛?#8220;涓冧釜涔?fàn)鎯?#8221;銆傛垜鐨勪簲鏍鳳紝灝辨槸鍏堝啓涓嬭嚜宸辨渶鍦ㄤ箮鐨勪簲鏍蜂笢瑗匡紝鐒跺悗鍦ㄥ咖鎬ㄧ殑闊充箰澹頒腑錛屼竴涓竴涓殑鍒掑幓錛屽彧鐣欎笅鏈鍚庝竴涓紝浠ユ湡甯綘鎵懼埌鑷繁鐨勭洰鏍囥?/span> 鎴戝彧鍐欎簡涓夋牱錛岃屼笖涓鏍烽兘娌℃湁鍒掑幓錛屾垜瑙夊緱瀹冧滑騫朵笉鐭涚浘錛岃屼笖閭e氨鏄垜鐢熷懡鐨勬剰涔夈傛兂鐭ラ亾鏄摢涓夋牱鍚楋紵 鍢垮樋錛屾垜鍙笉鍛婅瘔浣犮?/span> 鎺ョ潃灝辨槸銆婇珮鏁堣兘浜哄+鐨勪竷涓範(fàn)鎯嬶紝榪欐湰涔︽垜鏃╁氨鐪嬭繃鐢?shù)瀛愮増鐨勫Q屽綋鏃朵竴杈圭湅涓杈規(guī)兂錛氳繖涓嶅氨鏄鎴戠殑涔?fàn)鎯悧锛?/span>kao銆?/span> 璁茶鐨勮佸笀姘村鉤涓鑸紝寰堣兘蹇芥?zhèn)犲Q岃繕涓嶅緇欐垜浠斁闄堝畨涔嬭佸笀鐨勬垚鍔熷銆備竴鍫傚煿璁笅鏉ワ紝涔熸病浠涔堥暱榪涳紝嫻垂鎴戜竴涓嬪崍鐨勬椂闂淬傚畬浜嗕箣鍚庯紝闆嗕綋鍘繪ゼ涓嬬殑瑗塊鍘呭悆铔嬬倰楗紝鍛抽亾榪樹笉閿欍傝繖涓槦鏈熷張鏈夊煿璁紝涔熶笉鐭ラ亾鑳戒笉鑳藉悆鍒板ソ鍚冪殑铔嬬倰楗?/span>
鎯蟲兂鏈榪戣繕鏈変粈涔堟湁瓚g殑浜嬨傚墠澶╅」鐩粍鎼炴瘡鏈堜竴嬈$殑鑱氶錛屾垜浠竴琛屽叓浜猴紝鍘諱簡闄勮繎鐨勪竴瀹跺皬鑲ョ緤銆傛懂娑懂錛屽緢寮蹇冦傚枬浜嗙櫧閰?/span>+鍟ら厭銆傚洖鍒板鑸嶏紝鏅曞懠鍛肩殑鐫$潃浜嗭紝娌$洊琚瓙錛岀粨鏋滅潯鐫鐫$潃錛屽崐澶滈噷涓ら薊瀛旇鍫佃搗鏉ヤ簡錛岄毦鍙楋紝緲誨嚭涓綺掓劅搴鳳紝鏈嶄笅錛屽崐姊﹀崐閱掑埌澶╀寒銆?/span>
涓轟粈涔堢寮SPL錛?/span>
涓銆?span>
鍛嗕簡涓ゅ勾澶氾紝瀵瑰闈㈢殑浜嬬墿寰堝ソ濂囷紝鏈変簺涓滆タ錛屽鏋滀笉韜復(fù)鍏跺鐨勫幓浣撲細錛屾案榪滄棤娉曠煡閬擄紱浜屻?span> 鐪熺殑鎯崇煡閬擄紝涓涓ぇ鐨勯」鐩槸鎬庝箞琚垎鍓叉垚寰堝灝忛儴鍒嗭紝鐒跺悗鏈夋潯涓嶇磰琚墽琛岋紝鐒跺悗涓嬈′氦浠橈紝鐒跺悗鏈夎鍒掔殑鍗囩駭銆佺淮鎶わ紱
涓夈?span> 涓嶅枩嬈笁澶╀袱澶寸殑涓虹▼搴忓姞鏂板姛鑳斤紱
鍥涖?span> 涓嶅枩嬈竴涓槦鏈熶笂鍏ぉ鐝紱
浜斻?span> 涓嶅枩嬈㈠鑸嶅お鍚碉紝涓涓ょ偣閽熻繕琚叧闂ㄧ殑澹伴煶闇囬啋錛?/span>
鍏?span> 涓嶅枩嬈㈡妧鏈病鏈夎繘姝ワ紝鏁村ぉ騫插悓鏍風(fēng)殑媧伙紙涓涓父鎴忓ぉ澶╃帺閫氬叧錛屼綘榪樺枩嬈㈢帺鍚楋紵錛夛紱
涓冦?span> 涓嶅枩嬈竴涓漢鍦ㄦ垬鏂楃殑鏃跺欙紝鐪嬬潃鏃佽竟鐨勮儢瀛愬伔鎳掞紝鑰屼笖宸ヨ祫姣斾綘榪橀珮銆?/span>
涓轟粈涔堢寮TW錛?/span>
涓銆?/span>瀵圭儫鍘傜殑涓氬姟瀹炲湪娌℃湁鍏磋叮錛屽仛寰楀ソ榪樺ソ錛屽仛寰椾笉濂斤紝琚紑闄や簡錛屾垜搴旇鍘誨共鍢涳紵鎴戝彲浠ュ幓騫插槢錛熷綋鍒濊姳閭d箞澶氭椂闂村幓瀛︿範(fàn)鐨勪笢瑗匡紝鐒跺悗紱誨紑鐨勬椂鍊欙紝涓鏃犳槸澶勶紝鏄笉鏄氮璐硅嚜宸辯殑鏃墮棿錛?/span>
浜屻?/span>瀵瑰伐鎺т笉鎰熷叴瓚o紱鐪嬬潃閭d簺鐢墊皵璁懼錛屾垜鎯寵嚜宸卞鏋滃湪榪欒鍙戝睍錛屼笉浼氭瘮閭d釜鏈夌數(shù)瀛愬拰璁$畻鏈哄弻瀛︿綅鐨勫悓瀛︽洿鐗涳紱
涓夈?/span>瀵瑰甫澶村ぇ鍝ョ殑鎶鏈按騫蟲劅鍒板け鏈涳紝灝ゅ叾鏄湅浜嗕粬鍐欑殑浠g爜涔嬪悗錛屾湰鏉ヤ竴涓緢綆鍗曠殑涓滆タ錛岀粡榪囦粬鐨勬墜灝卞彉寰楀紓甯稿鏉傦紝榪樻晠浣滈珮娣便傛暣涓▼搴忓厖婊′簡紜紪鐮侊紝鑰屼笖鎶婇昏緫鍜岀晫闈㈡販娣嗗湪涓璧鳳紱鍙兘浠栧仛涓哄甫澶村ぇ鍝ワ紝鍦ㄥ埆鐨勫湴鏂癸紝濡備笟鍔°佸伐鎺ф柟闈㈡湁鎵寤烘爲(wèi)錛屼絾鏄垜瀵歸偅浜涗竴鐐瑰叴瓚i兘娌★紝鎴戞庤兘寮鴻揩鑷繁璺熺潃浣狅紵
鍥涖?/span>鎰熻涓嶄細鏈夊お澶х殑闀胯繘錛屾垜涓鍚戣涓哄啓浣庣駭鐣岄潰鏄綋鍔涙椿錛?/span>
浜斻?/span>涓嶅枩嬈㈠湪鐑熷巶鑱屽伐闈㈠墠瑁呭瓩瀛愯濂戒粬浠紝鍑粈涔堬紵鎴戝湪SPL榪樻槸鐖峰憿銆?/span>
澶熶簡錛屽仛鑷繁涓嶅枩嬈㈢殑宸ヤ綔錛屽氨鍍忓嚭鍗栬嚜宸辯殑鐏甸瓊銆備笉濡傛棭鐐圭粨鏉燂紝瓚佽嚜宸辨湁閫夋嫨鐨勮兘鍔涖?/span>
杈楄漿鏉ュ埌騫垮窞錛?/span>
鍙墍浠ュ湪榪欏緟鐫鏄洜涓猴細
涓銆?/span>鎴戝枩嬈㈢郴緇熷簳灞傦紝鎴戜互鍓嶅氨鍠滄錛屽彧鏄病鏈夋椂闂村幓浜嗚В錛?/span>
浜屻?/span>欏圭洰緇勭殑鍚屼簨鐩稿璧鋒潵涓嶉敊錛屾病浠涔堟灦瀛愶紝寰堝ソ浜ゆ祦錛?/span>
涓夈?/span>騫垮窞鍜岄暱娌欑殑娑堣垂浼間箮宸笉澶氾紝鑰屼笖榪欏叕鍙歌繕絳斿簲鍖呬綇錛屾墍浠ワ紝姣忔湀鑳藉墿涓嬬殑閽卞氨澶氱偣浜嗐?/span>
鍥涖?/span>鍗充究鏄寮闄や簡錛屽湪騫垮窞榪欏湴錛屾販涓キ浼間箮涔熶笉闅撅紝濡傛灉娌℃湁铏氬害鏃跺厜鐨勮瘽銆傝繖杈?/span>IT鍏徃鎸哄鐨勶紱
浜斻?/span>瓚佺潃騫磋交錛屾兂鍑烘潵瑙佽涓栭潰錛堝鏋滆繖涔熸槸鐞嗙敱鐨勮瘽錛夛紱
鑷繁鍋氬嚭鐨勮繖浜涘喅瀹氾紝鏀句簡涓浜涗漢鐨勯附瀛愶紝鎴戝悜浣犱滑閬撴瓑錛屼綘浠兘鏄ソ浜猴紝鎴戣緶璐熶簡浣犱滑瀵規(guī)垜鐨勪俊浠伙紝閭f槸鍥犱負鎴戠殑浼樻煍瀵℃柇鍜屾ф牸涓婄殑鍏跺畠緙洪櫡寮曡搗鐨勩傝繖閲屾彁鍒扮殑涓浜涗漢琚畾涔変負錛?/span>TW鐨?/span>HR鍜?/span>YM澶у摜錛岃繕鏈夐洦鑺變涵鐨勬潹澶у摜銆?/span>
HR鍦ㄧ粰鎴戝姙鍏ヨ亴鐨勬椂鍊欏拰鎴戣錛氫綘涓嶄細鍋氫袱涓夊ぉ灝辮蛋浜哄惂錛熸垜璇達細搴旇涓嶄細鍚с傚彲鏄垜璧頒簡錛屼負浜嗘垜鎵璋撶殑鐞嗘兂錛屾垜瀵逛笉璧蜂綘錛?/span>
YM錛氭垜浠渶鍚庝竴嬈″垎寮鏃訛紝鎴戝浣犺錛氬仛榪欎釜涓昏鏄涓氬姟鐨勭悊瑙e惂錛熶綘鎷嶆媿鎴戠殑鑲╄唨瀵規(guī)垜璇達細鎵浠ヤ綘瑕佹瘡澶╀笅杞﹂棿鍘葷湅鐪嬨傛垜鐭ラ亾浣犳槸涓烘垜濂斤紝濡備綘鎵璇達紝鍦ㄩ暱娌欐壘涓繖鏍風(fēng)殑宸ヤ綔涓嶅鏄撱傚彲榪欏茍涓嶆槸鎴戞兂瑕佺殑鐢熸椿錛屼篃璁稿湪灝嗘潵鐨勬煇澶╋紝鎴戜細鍚庢?zhèn)旇嚜宸卞け鍘讳簡涓嬈$ǔ瀹氱殑鏈轟細錛屼絾錛屽喅涓嶆槸鐜板湪銆傚啀嬈″悜浣犺澹板涓嶈搗銆?/span>
闆ㄨ姳浜殑鏉ㄥぇ鍝ワ細鍑嗗鍜屼綘鍚堢鎴垮瓙鐨勫墠涓澶╋紝鎴戠寮闀挎矙浜嗭紝鎵浠ヤ綘鐨勯附瀛愪笉寰椾笉鏀俱?/span>
鎯寵搗鏉ユ槸鑷繁鐨勪笉瀵癸紝灝辮寰楁尯闅捐繃錛岃屼笖浠庡績閲屽紑濮?/span>BS鑷繁錛屽鏋滀綘鐪嬪埌榪欎簺錛屼篃璇?/span>BS涓涓嬫垜錛岃鎴戣兘鍦ㄤ綘BS鐨勭溂紲炰腑鍚稿彇鏁欒錛屽鏋滀笅嬈℃湁綾諱技鐨勪簨鎯咃紝浼氬鐞嗗緱濂姐?/span> 鍐欑潃鍐欑潃灝辮寰楁湁浜涘帇鎶戯紝鑰屾垜涔熶笉鐭ラ亾鎬庢牱鎵嶈兘涓嶅帇鎶戜簺銆?/span>
鏀句竴浜?a href="http://m.shnenglu.com/lovelypig/gallery/3737.html">鍥劇墖鍚э紝浣滀負璁板綍錛岃岃繖涓鍒囷紝閮藉凡緇忔槸鍥炲繂銆?/span>
HANDLE聽GetQQProcess();
bool
聽SeachQQNumber(HANDLE聽_hProcess,
string
聽
&
strQQ);
int
聽_tmain(
int
聽argc,聽_TCHAR
*
聽argv[])
{
聽聽聽聽HANDLE聽hProces聽
=
聽GetQQProcess()聽;
聽聽聽聽
if
(hProces
==
聽NULL)
聽聽聽聽聽聽聽聽cout聽
<<
"
No聽run聽QQ!
"
<<
endl;
聽聽聽聽
string
聽strQQ;
聽聽聽聽SeachQQNumber(hProces,strQQ);
聽聽聽聽cout聽
<<
strQQ
<<
endl;
聽聽聽聽system(
"
pause
"
);
聽聽聽聽
return
聽
0
;
}
bool
聽SeachQQNumber(HANDLE聽_hProcess,聽
string
聽
&
strQQ)
{
聽聽聽聽SuspendThread(_hProcess);
聽聽聽聽
聽聽聽聽DWORD聽dwBaseAddress;聽
聽聽聽聽MEMORY_BASIC_INFORMATION聽mbi;
聽聽聽聽
char
聽聽process_mem[
4096
]聽
=
聽
{
0
}
;
聽聽聽聽DWORD聽number_of_bytes_read聽
=
聽
0
;
聽聽聽聽SYSTEM_INFO聽si;聽
聽聽聽聽GetSystemInfo(
&
si);
聽聽聽聽dwBaseAddress聽
=
聽(DWORD)si.lpMinimumApplicationAddress;聽
聽聽聽聽
while
(dwBaseAddress聽
<
聽(DWORD)si.lpMaximumApplicationAddress)聽
聽聽聽聽
{聽
聽聽聽聽聽聽聽聽mbi.BaseAddress聽
=
聽(LPVOID)dwBaseAddress;聽
聽聽聽聽聽聽聽聽VirtualQueryEx(_hProcess,聽(LPVOID)dwBaseAddress,聽
&
mbi,聽
sizeof
(mbi));
聽聽聽聽聽聽聽聽dwBaseAddress聽
=
聽(DWORD)mbi.BaseAddress聽
+
聽mbi.RegionSize;聽
聽聽聽聽聽聽聽聽
if
(mbi.State聽
!=
聽MEM_COMMIT聽
||
聽mbi.AllocationProtect聽
!=
聽PAGE_READWRITE)聽
//
璺寵繃鏈垎閰嶆垨涓嶅彲璇誨啓鐨勫尯鍩熉?/span>
聽聽聽聽聽聽聽聽
{聽
聽聽聽聽聽聽聽聽聽聽聽聽
continue
;聽
聽聽聽聽聽聽聽聽}
聽
聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽
//
鎼滅儲
聽聽聽聽聽聽聽聽
for
(DWORD聽i聽
=
聽(DWORD)mbi.BaseAddress;聽i聽
<
聽dwBaseAddress;聽i
+=
4096
)
聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽
if
(
!
ReadProcessMemory(_hProcess,LPCVOID(i),process_mem,
4096
,
&
number_of_bytes_read))
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
break
;聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽
for
(
int
聽j
=
0
;j
<
4096
聽
-
聽
9
;j
++
)
聽聽聽聽聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
if
(
!
memcmp(
&
process_mem[j],
"
\\MsgEx.db
"
,
9
)聽)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
//
printf("begin\n");
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
for
(
int
聽k
=
j
-
1
;聽k聽
>
聽j
-
12
;聽k
--
)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
if
(process_mem[k]聽
>=
聽
'
0
'
聽
&&
聽process_mem[k]聽
<=
聽
'
9
'
)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽strQQ聽
=
聽聽process_mem[k]聽
+
聽strQQ;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
else
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
break
;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
if
(strQQ.length())
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽ResumeThread(_hProcess);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
return
聽
true
;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽}
聽聽聽聽}
聽聽聽聽ResumeThread(_hProcess);
聽聽聽聽
return
聽
false
;
}
HANDLE聽GetQQProcess()
{
聽聽聽聽PROCESSENTRY32聽pe;
聽聽聽聽pe.dwSize聽
=
聽
sizeof
(PROCESSENTRY32);
聽聽聽聽HANDLE聽hSnapshot聽
=
聽CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,聽
0
);
聽聽聽聽Process32First(hSnapshot,聽
&
pe);
聽聽聽聽
do
{
聽聽聽聽聽聽聽聽
if
(
!
_tcsicmp(pe.szExeFile,_T(
"
qq.exe
"
)))
聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽CloseHandle(hSnapshot);
聽聽聽聽聽聽聽聽聽聽聽聽
return
聽OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe.th32ProcessID);
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽pe.dwSize聽
=
聽
sizeof
(PROCESSENTRY32);
聽聽聽聽}
while
(Process32Next(hSnapshot,聽
&
pe));
聽聽聽聽CloseHandle(hSnapshot);
聽聽聽聽
return
聽NULL;
}
#include聽
"
boost/filesystem/operations.hpp
"
#include聽
"
boost/filesystem/path.hpp
"
#include聽
<
iostream
>
using
聽
namespace
聽std;
namespace
聽fs聽
=
聽boost::filesystem;
void
聽PrintAllFile(fs::path聽
&
full_path);
int
聽main(聽
int
聽argc,聽
char
*
聽argv[]聽)
{
聽聽聽聽fs::path聽full_path(聽
"
D:\\
"
聽,fs::native);
聽聽聽聽PrintAllFile(full_path);
}
void
聽PrintAllFile(fs::path聽
&
full_path)
{
聽
if
(fs::exists(full_path))
聽
{
聽聽fs::directory_iterator聽item_begin(full_path);
聽聽fs::directory_iterator聽item_end;
聽聽
for
(聽;item_begin聽聽
!=
聽item_end;聽item_begin
++
)
聽聽
{
聽聽聽
聽聽聽
if
(fs::is_directory(
*
item_begin))
聽聽聽
{
聽聽聽聽cout聽
<<
item_begin
->
native_file_string()
<<
"
\t[dir]
"
<<
endl;
聽聽聽聽PrintAllFile(
*
item_begin);
聽聽聽}
聽聽聽
else
聽聽聽
{
聽聽聽聽cout聽
<<
item_begin
->
native_file_string()
<<
endl;
聽聽聽}
聽聽}
聽}
}
鍙負鑳戒笌浣犲啀嬈″叡搴β?濡傛灉鎴戣兘璁╂椂鍏夋案椹宦?鎴戜細鐝嶈棌姣忎釜鏃ュ瓙聽 鐒跺悗聽 鍐嶄竴嬈÷?涓庝綘鍏卞害
浣犳壘鍒頒綘鎯沖仛鐨勪簨鎯呮椂聽 鍗存繪槸鍙戠幇聽 宸叉病鏈夎凍澶熸椂闂綽犅?鎴戝巻緇忓瀵昏瑙吢?鎵嶅彂鐜?/p>
浣犲氨鏄偅涓?鎴戞効鍏卞害涓鐢熺殑浜郝?濡傛灉鎴戞湁鐩掑瓙 鐩涚潃浠庢湭瀹炵幇鐨勬ⅵ涓庡笇鏈?/p>
閭d箞瀹冨皢浼氱┖鑽¤崱聽 闄や簡閭d簺聽 浣犱負鎴戝渾姊︾殑璁板繂
錛庯紟.
錛烇紴錛?phonePattern = re.compile(r'^\D*(\d{3})\D*(\d{3})\D*(\d{4})\D*(\d*)$') 1 錛烇紴錛?phonePattern.search('(800)5551212 ext. 1234').groups() 2 ('800', '555', '1212', '1234')
錛烇紴錛?phonePattern.search('800-555-1212').groups() 3 ('800', '555', '1212', '')
錛烇紴錛?phonePattern.search('work 1-(800) 555.1212 #1234') 4
錛烇紴錛?
| 1 | 榪欎釜姝e垯琛ㄨ揪寮忓拰鍓嶉潰鐨勫嚑涔庣浉鍚岋紝闄や簡鍦ㄧ涓涓蹇嗙粍錛堝尯鍙鳳級鍓嶉潰鍖歸厤\D*錛?鎴栬呭涓潪鏁板瓧瀛楃銆傛敞鎰忥紝姝ゅ浣犳病鏈夎蹇嗚繖浜涢潪鏁板瓧瀛楃錛堜粬浠病鏈夎鎷彿鎷搗鏉ワ級銆傚鏋滀綘鍙戠幇浠栦滑錛屽彧鏄煩榪囦粬浠紝鎺ョ潃鍙鍖歸厤涓婂氨寮濮嬭蹇嗗尯鍙楓?br /> |
| 聽2 | 浣犲彲浠ユ垚鍔熺殑瑙f瀽鐢?shù)璇濆忥L(fēng)爜錛屽嵆浣垮湪鍖哄彿鍓嶉潰鏈変竴涓乏鎷彿銆?鍦ㄥ尯鍙峰悗闈㈢殑鍙蟲嫭鍙蜂篃宸茬粡琚鐞嗭紝瀹冭鐪嬫垚闈炴暟瀛楀瓧絎﹀垎闅旂錛岀敱絎竴涓蹇嗙粍鍚庨潰鐨?\D*鍖歸厤銆? |
| 聽3 | 榪涜浠旂粏鐨勬鏌ワ紝淇濊瘉浣犳病鏈夌牬鍧忓墠闈㈣兘澶熷尮閰嶇殑浠諱綍鎯呭喌銆傜敱浜庨瀛楃鏄畬鍏ㄥ彲閫夌殑錛岃繖涓ā寮忓尮閰嶅瓧絎︿覆鐨勫紑濮嬶紝鎺ョ潃鏄?涓潪鏁板瓧瀛楃錛屾帴鐫鏄竴涓湁涓変釜鏁板瓧瀛楃鐨勮蹇嗙粍(800)錛屾帴鐫鏄?涓潪鏁板瓧瀛楃錛堣繛瀛楃錛夛紝鎺ョ潃鏄竴涓湁涓変釜鏁板瓧瀛楃鐨勮蹇嗙粍(555)錛屾帴鐫鏄?涓潪鏁板瓧瀛楃錛堣繛瀛楃錛夛紝鎺ョ潃鏄竴涓湁鍥涗釜鏁板瓧瀛楃鐨勮蹇嗙粍(1212)錛屾帴鐫鏄?涓潪鏁板瓧瀛楃錛屾帴鐫鏄竴涓湁0涓暟瀛椾綅鐨勮蹇嗙粍錛屾渶鍚庢槸瀛楃涓茬殑緇撳熬銆?br /> |
| 聽4 | 姝ゅ鏄鍒欒〃杈懼紡璁╂垜浜х敓浜嗘壘涓涓‖涓滆タ鎸栧嚭鑷繁鐨勭溂鐫涚殑鍐插姩銆備負浠涔堣繖涓數(shù)璇濆彿鐮佹病鏈夊尮閰嶄笂錛熷洜涓哄湪瀹冪殑鍖哄彿鍓嶉潰鏈変竴涓?1錛屼絾鏄綘璁や負鍦ㄥ尯鍙峰墠闈㈢殑鎵鏈夊瓧絎﹂兘鏄潪鏁板瓧瀛楃(\D*)銆?Aargh. |
<杞借嚜:Dive Into Python>
浣犲彲鑳界粡甯哥湅鍒扮綏椹暟瀛楋紝鍗充嬌浣犳病鏈夋剰璇嗗埌浠栦滑銆備綘鍙兘鏇劇粡鍦ㄨ佺數(shù)褰辨垨鑰呯數(shù)瑙嗕腑鐪嬪埌浠栦滑錛堚?span class="quote">鐗堟潈鎵鏈?MCMXLVI鈥?鑰屼笉鏄?鈥?span class="quote">鐗堟潈鎵鏈?tt class="literal">1946鈥濓級錛屾垨鑰呭湪鏌愬浘涔﹂鎴栨煇澶у鐨勮礎(chǔ)鐚涓婄湅鍒頒粬浠?鈥?span class="quote">鎴愮珛浜?MDCCCLXXXVIII鈥濊屼笉鏄?span class="quote">鎴愮珛浜?tt class="literal">1888鈥?銆備綘涔熷彲鑳藉湪鏌愪簺鏂囩尞鐨勫ぇ綰叉垨鑰呯洰褰曚笂鐪嬪埌浠栦滑銆傝繖鏄竴涓〃紺烘暟瀛楃殑緋葷粺錛屼粬鑳藉鐪熸鍥炴函鍒拌繙鍙ょ殑緗楅┈甯濆浗錛堝洜姝よ屽緱鍚嶏級銆?/p>
鍦ㄧ綏椹暟瀛椾腑錛屽埄鐢?涓笉鍚屽瓧姣嶈繘琛岄噸澶嶆垨鑰呯粍鍚堟潵琛ㄨ揪鍚勫紡鍚勬牱鐨勬暟瀛椼?/p>
涓嬮潰鏄叧浜庢瀯閫犵綏椹暟瀛楃殑涓浜涢氱敤鐨勮鍒欑殑浠嬬粛錛?/p>
|
|
|
| 鏈珷璇戣呮敞錛氣滆5鏁撮櫎鐨勬暟鈥濊繖涓瘧娉曞茍涓嶄弗璋紝鍥犱負鎵鏈夎10鏁撮櫎鐨勬暟涔熻兘澶熻5鏁撮櫎錛屾澶勮〃杈劇殑鍚箟鏄細閭d簺鍖呭惈鏈?鐨勫惈涔夌殑緗楅┈鏁板瓧瀛楃銆?/td> | |
#include聽
"
stdafx.h
"
#include聽
"
ace/OS_NS_time.h
"
#include聽
"
ace/Log_Msg.h
"
#include聽
"
ace/Reactor.h
"
#include聽
"
ace/Event_Handler.h
"
#include聽
"
ace/INET_Addr.h
"
#include聽
"
ace/SOCK_Dgram.h
"
#include聽
"
ace/TP_Reactor.h
"
#include聽
"
ace/WFMO_Reactor.h
"
class
聽ClientRecv聽:聽
public
聽ACE_Event_Handler
{
public
:
聽聽聽聽
virtual
聽
~
ClientRecv聽()
{}
聽聽聽聽
int
聽open聽(
const
聽ACE_INET_Addr聽
&
bind_addr);
聽聽聽聽
//
聽Get聽this聽handler's聽I/O聽handle.
聽聽聽聽
virtual
聽ACE_HANDLE聽get_handle聽(
void
)聽
const
聽聽聽聽
{聽
return
聽
this
->
udp.get_handle();聽}
聽聽聽聽
virtual
聽
int
聽handle_input聽(ACE_HANDLE聽fd聽
=
聽ACE_INVALID_HANDLE);
聽聽聽聽
//
聽Called聽when聽this聽handler聽is聽removed聽from聽the聽ACE_Reactor.
聽聽聽聽
virtual
聽
int
聽handle_close聽(ACE_HANDLE聽handle,
聽聽聽聽聽聽聽聽ACE_Reactor_Mask聽close_mask);
聽聽聽聽
聽聽聽聽ACE_SOCK_Dgram聽udp;
}
;

int
ClientRecv::open聽(
const
聽ACE_INET_Addr聽
&
bind_addr)
{
聽聽聽聽
if
聽(
this
->
udp.open聽(bind_addr,聽
1
)聽
==
聽
-
1
)
聽聽聽聽聽聽聽聽ACE_ERROR_RETURN聽((LM_ERROR,
聽聽聽聽聽聽聽聽ACE_TEXT聽(
"
%p\n
"
),
聽聽聽聽聽聽聽聽ACE_TEXT聽(
"
udp.open
"
)),
聽聽聽聽聽聽聽聽
-
1
);
聽聽聽聽
聽聽聽聽
return
聽
this
->
reactor聽()
->
register_handler
聽聽聽聽聽聽聽聽(
this
,聽ACE_Event_Handler::READ_MASK聽);
}
int
聽
ClientRecv::handle_close聽(ACE_HANDLE聽handle,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽ACE_Reactor_Mask聽close_mask)
{
聽聽聽聽
if
聽(close_mask聽
==
聽ACE_Event_Handler::WRITE_MASK)
聽聽聽聽聽聽聽聽
return
聽
0
;
聽聽聽聽close_mask聽
=
聽ACE_Event_Handler::ALL_EVENTS_MASK聽
|
聽聽聽聽聽聽聽聽ACE_Event_Handler::DONT_CALL;
聽聽聽聽
this
->
reactor聽()
->
remove_handler聽(
this
,聽close_mask);
聽聽聽聽
this
->
udp.close();
聽聽聽聽delete聽
this
;
聽聽聽聽
return
聽
0
;
}
int
聽
ClientRecv::handle_input聽(ACE_HANDLE聽fd聽)
{
聽聽聽聽
char
聽聽buffer[
8192
]聽
=
聽
{
0
}
;
聽聽聽聽ACE_INET_Addr聽聽peer_addr;
聽聽聽聽
if
(
-
1
聽
==
聽
this
->
udp.recv(buffer,
8192
,peer_addr))
聽聽聽聽聽聽聽聽ACE_ERROR_RETURN聽((LM_ERROR,
聽聽聽聽聽聽聽聽ACE_TEXT聽(
"
%p\n
"
),
聽聽聽聽聽聽聽聽ACE_TEXT聽(
"
udp.recv
"
)),
聽聽聽聽聽聽聽聽
-
1
);
聽聽聽聽
聽聽聽聽ACE_DEBUG((LM_INFO,
"
%s\n
"
,peer_addr.get_host_addr()));
聽聽聽聽
return
聽
0
;
}
DWORD聽WINAPI聽LoopThread(LPVOID聽lparam)
{
聽聽聽聽ACE_Reactor::instance聽()
->
run_reactor_event_loop聽();
聽聽聽聽
return
聽聽
0
;
}
int
聽_tmain(
int
聽argc,聽_TCHAR
*
聽argv[])
{
聽聽聽聽ACE_INET_Addr聽bind_addr(
10703
);
聽聽聽聽ClientRecv聽聽client;
聽聽聽聽聽聽聽聽client.reactor(ACE_Reactor::instance聽());聽聽
聽聽聽聽
if
(
-
1
聽
==
聽client.open(bind_addr))
聽聽聽聽
{
聽聽聽聽聽聽聽聽
return
聽
-
1
;
聽聽聽聽}
聽聽聽聽
聽聽聽聽CreateThread(NULL,NULL,LoopThread,
0
,
0
,
0
);
聽聽聽聽ACE_INET_Addr聽send_addr;
聽聽聽聽
for
(
int
聽i
=
1024
;i
<
3333
;i
++
)
聽聽聽聽
{
聽聽聽聽聽聽聽聽ACE_DEBUG((LM_INFO,
"
%d聽\n
"
,i));
聽聽聽聽聽聽聽聽send_addr.
set
(i,
"
192.168.3.147
"
);
聽聽聽聽聽聽聽聽Sleep(
5000
);
聽聽聽聽聽聽聽聽
if
(client.udp.send(
"
ttt
"
,
3
,send_addr)聽
==
聽
-
1
)
聽聽聽聽聽聽聽聽
{
聽聽聽聽聽聽聽聽聽聽聽聽ACE_DEBUG((LM_INFO,
"
%p
"
));
聽聽聽聽聽聽聽聽聽聽聽聽
break
;
聽聽聽聽聽聽聽聽}
聽聽聽聽}
聽聽聽聽system(
"
pause
"
);
聽聽聽聽ACE_Reactor::instance聽()
->
end_reactor_event_loop聽();
聽聽聽聽
return
聽
0
;
}
鎴戞棭宸叉病鏈夋劅瑙?br />濡傛灉鎯充綘澶氫竴澶?br />灝變細浼ゆ垜澶氫竴浜?br />鎶涘紑浜嗘墍鏈夋椂闂?br />璁╄嚜宸卞績鎯呮矇娣(wěn)
濂借兘椋炲嚭榪欎笘鐣?br />瓚婅繃浣犳浘璇寸殑鐢?br />縐嶆弧浜嗗悜鏃ヨ懙
鎴戠殑鐪兼唱鎶典笉鍘諱粠鍓?br />no
鏅氫笂鍘誨悆閾佹澘鐑э紝鐜嬫枌鍜屼釜钂欏彜澶уか涓鏍鳳紝鐐逛簡寰堝涓滆タ錛屽悆鍙堝悆涓嶅畬銆?/p>
鍥犱負甯緞濂抽厤鐢?shù)鑴戝Q岃璇嗕簡涓涓彨鍒樻槙鐨勫彲鐖卞皬MM銆?/p>
涓嬪崍鍘昏浜嗗嚑涓湅鍙嬶細鏉版瘺綺掑仛鐢熸剰錛屽繖寰椾笉琛屻傜伆鑰侀紶鍦ㄥ鐮屾埧瀛愩傜劧鍚庯紝鎴戜滑涓璧峰幓浜嗚嚜鐢卞湴甯﹀悆涓滆タ銆傜帇鏂岃繃浜嗕竴浼氬効涔熸潵浜嗐傚悆瀹屼笢瑗匡紝甯伆鑰侀紶鐨勫摜鍝ョ湅鐢?shù)鑴戝Q屽師鏉ョ數(shù)鑴戣嫻佹皳寮篨浜嗭紝涓嬩簡涓秴綰у厰瀛愶紝瑙e喅闂錛岄棯浜恒傚幓浼集瀹剁湅鐖風(fēng)埛銆傜埛鐖蜂笉鍦ㄥ錛屽府灝忕孩濮愮湅鐢?shù)鑴戝Q岀數(shù)鑴戣嫻佹皳寮篨浜嗭紝涓嬩簡涓秴綰у厰瀛愶紝闄や簡涓枃涓婄綉錛岄泤铏庡姪鎵嬩袱涓ぇ嫻佹皳娌¤刀璺戯紝鍏跺畠鐨勯兘璧惰窇浜嗐傞棯浜恒傘傘備笉鐭ラ亾闂埌鍝幓錛屽洖瀹惰ˉ鐫°?/p>
鏅氫笂鐫¢啋錛屽幓鑾夋柦鍓簡涓ご鍙戙傜湅鍒拌檔灝夊拰濂瑰悓瀛︾珶鐒朵篃鍦ㄦ礂澶村彂錛岃繕甯︿簡涓緢PP鐨勬磱濡炪傚壀瀹屽ご鍙戯紝鎵撲簡涓數(shù)璇濈粰鐚村瓙錛屽枬浜嗕竴鍘呭彲涔愶紝鐪嬩簡涓浼氬効琛楋紝鎴戜滑鍐沖畾鍘誨悆鐑ら奔銆傛墦浜嗙數(shù)璇濈粰寰掑紵錛屽緬寮熻窡涓簿姝﹂鐨勫紵瀛愮害浼氾紝鎺ヤ簡寰掑紵榪囨潵鍚冧笢瑗褲傝漿鐪煎埌鍗佺偣銆傚悆瀹屼笢瑗匡紝鎴戝喅瀹氬幓涓婄綉錛屽湪緗戜笂鍜屽笇甯岃璁轟粈涔堟槸BF銆備笅綰褲傚悆浜嗙楗哄瓙錛岄ズ瀛愬簵鑰佹澘寰堥潰鐔燂紝鍚嶅瓧濂藉儚鍙嵎鑺便?/p>
楠戠潃灝忕壞緹婅漿浜嗗嚑鍦堬紝鍐鳳紝鍥炲銆傚惉浜嗘棤鏁版銆婂叏涓栫晫澶辯湢銆嬶紝鎵撳紑鐢?shù)鑴戝Q岃涓嬩粖澶╁仛浜嗕粈涔堜簨鎯呫備竾涓澶卞繂浜嗭紝鍑潃榪欎簺錛屽叴璁鎬細璁拌搗鐐逛粈涔堛?/p>
El Condor Pasa鐨勫師鐗堟嵁浼犳槸鍩轟簬縐橀瞾鑷敱鎴樺+Tupac Amaro鐨勬晠浜嬨?780騫達紝浠栧湪棰嗗涓鍦哄弽鎶楄タ鐝墮浜虹殑璧蜂箟涓瀹籌紝姝誨悗鍙樻垚涓鍙狢ondor錛屾案榪滅勘緲斾簬瀹夌鏂北涓娿傜椴佷漢姘戞毃姝や綋鐜板鑷敱鐨勮拷姹備笉鎭紝鑰屾瓕鍚嶇殑鐩磋瘧灝辨槸"闆勯拱鍦ㄩ"銆?
I\'d rather be a sparrow than a snail
Yes I would, if I could, I surely would, hm-m
I\'d rather be a hammer than a nail
Yes I would, if I only could, I surely would, hm-m
Away, I\'d rather sail away
Like a swan that\'s here and gone
A man gets tied up to the ground
He gives the world its saddest sound
Its saddest sound
I\'d rather be a forest than a street
Yes I would, if I could, I surely would
I\'d rather feel the earth beneath my feet
Yes I would, if I only could, I surely wou
涓嬭澆
t聽_tmain(int聽argc,聽_TCHAR*聽argv[])

{
聽typedef聽int聽(WINAPI聽*myMsg)(聽IN聽HWND聽hWnd,IN聽LPCSTR聽lpText,聽IN聽LPCSTR聽lpCaption,IN聽UINT聽uType);
聽HANDLE聽m_hDLL聽=聽::LoadLibrary("user32.dll");
聽myMsg聽msg聽=聽(myMsg)GetProcAddress((HMODULE)m_hDLL,聽"MessageBoxA");聽
聽(*msg)(NULL,"TEST","TEST",0);
聽
聽return聽0;
}
int聽_tmain(int聽argc,聽_TCHAR*聽argv[])

{
聽聽聽聽MessageBoxA(NULL,"test","test",0);
聽聽聽聽return聽0;
}

涓嶅枩嬈綇瀹胯垗銆備竴鏄洜涓烘病鏈夎嚜宸辯殑絀洪棿錛屼簩鏄洜涓烘渶榪戝張涓嶈兘涓婄綉浜嗐?闅斿瀹胯垗鎶婄數(shù)鑴戝綋浜屾墜鍗栦簡錛屾墍浠ワ紝浠栦滑涔熶笉鍏沖績鑳戒笉鑳戒笂緗戙傚彲鑻︿簡鎴戙?/p>
鍥犱負鑲氬瓙涓嶈垝鏈嶏紝鎶婃垜濉炵粰瀹冪殑涓滆タ閮界暀鐫涓嶆秷鍖栵紝鍛曞悙瀹岋紝綰抽椃錛氭垜涓崍娌″悆浠涔堝憖錛屾庝箞鑳藉悙榪欎箞澶氥傝倸瀛愬憖鑲氬瓙錛屼綘鍙湡鍘嗗銆?/p>
鐫′簡涓瑙夎搗鏉ワ紝澶存檿鏅曠殑銆傛垜搴旇鍘誨悆鐐瑰鏄撴秷鍖栫殑涓滆タ銆?/p>
... ...
聽
#include聽
"
ace/Singleton.h
"
#include聽
"
ace/Mutex.h
"
#include聽
"
ace/Event_Handler.h
"
#include聽
<
ace
/
NT_Service.h
>
#include聽
<
ace
/
Log_Msg.h
>
#include聽
<
iostream
>
using
聽
namespace
聽std;
class
聽MYService:
public
聽ACE_NT_Service
{
聽聽聽聽
bool
聽m_stop;
public
:
聽聽聽聽MYService():ACE_NT_Service(
"
MyACEService_4
"
,
0
,ACE_NT_SERVICE_START_TIMEOUT,
聽聽聽聽聽聽聽聽聽聽聽聽SERVICE_WIN32_OWN_PROCESS聽
|
聽SERVICE_INTERACTIVE_PROCESS),m_stop(
false
)
{
聽聽聽聽聽聽聽聽}
聽聽聽聽
virtual
聽
int
聽svc聽(
void
);
聽聽聽聽
virtual
聽
void
聽handle_control聽(DWORD聽control_code);
聽聽聽聽
virtual
聽
~
MYService()
{}
}
;
typedef聽ACE_Singleton
<
MYService,聽ACE_Mutex
>
聽SERVICE;
int
聽MYService::svc聽(
void
)
{
聽聽聽聽report_status聽(SERVICE_RUNNING);
聽聽聽聽
while
(
!
m_stop)
聽聽聽聽
{
聽聽聽聽聽聽聽聽Sleep(
2000
);
聽聽聽聽聽聽聽聽MessageBox(NULL,
"
aaa
"
,
"
error
"
,
0
);
聽聽聽聽}
聽聽聽聽
return
聽
0
;
}
void
聽MYService::handle_control聽(DWORD聽control_code)
{
聽聽聽聽
if
聽(control_code聽
==
聽SERVICE_CONTROL_SHUTDOWN
聽聽聽聽聽聽聽聽
||
聽control_code聽
==
聽SERVICE_CONTROL_STOP)
聽聽聽聽
{
聽聽聽聽聽聽聽聽report_status聽(SERVICE_STOP_PENDING);
聽聽聽聽聽聽聽聽m_stop聽
=
聽
true
;
聽聽聽聽}
聽聽聽聽ACE_NT_Service::handle_control聽(control_code);
}
ACE_NT_SERVICE_DEFINE聽(MyACEService_4,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽MYService,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽ACE_TEXT聽(
"
MyACEService_4
"
));
int
聽main(
int
聽argc,聽_TCHAR
*
聽argv[])
{
聽聽聽聽
聽聽聽聽ACE::init聽();
聽聽聽聽ACE_NT_SERVICE_RUN聽(MyACEService_4,
聽聽聽聽聽聽聽聽SERVICE::instance聽(),
聽聽聽聽聽聽聽聽ret);
聽聽聽聽
聽聽聽聽ACE::fini聽();

/**/
/*
聽聽聽聽瀹夎鏈嶅姟
聽聽聽聽聽聽聽聽聽ACE::init聽();
聽聽聽聽SERVICE::instance()->insert();
聽聽聽聽ACE::fini聽();
*/
聽聽聽聽
return
聽
0
;
}
| 鏃犻 |
|
聽聽聽 鏄ㄥ鍙堝幓浜掑姩錛?/font>
聽聽 鐩掗キ鍩烘湰娌″姩銆?/font>
聽聽 鍧愬ソ涓嶈涔卞姩錛?/font>
聽聽 绱緱涓嶆兂鍐嶅姩銆?br />
|