锘??xml version="1.0" encoding="utf-8" standalone="yes"?>老巨人导航500精品,欧美日韩亚洲高清,国产一区日韩二区欧美三区http://m.shnenglu.com/xi52qian/xi52qianzh-cnSun, 16 Nov 2025 23:59:03 GMTSun, 16 Nov 2025 23:59:03 GMT60Windows鏍稿績緙栫▼ 絎?绔?榪涚▼http://m.shnenglu.com/xi52qian/archive/2011/03/07/141245.htmlxi52qianxi52qianMon, 07 Mar 2011 01:40:00 GMThttp://m.shnenglu.com/xi52qian/archive/2011/03/07/141245.htmlhttp://m.shnenglu.com/xi52qian/comments/141245.htmlhttp://m.shnenglu.com/xi52qian/archive/2011/03/07/141245.html#Feedback0http://m.shnenglu.com/xi52qian/comments/commentRss/141245.htmlhttp://m.shnenglu.com/xi52qian/services/trackbacks/141245.html榪涚▼鐢變袱閮ㄥ垎緇勬垚錛?/p>
  • 鎿嶄綔緋葷粺綆$悊榪涚▼鐨勫唴鏍稿璞°傚瓨鏀捐榪涚▼ 鐨勭粺璁′俊鎭殑鍦版柟銆?
  • 鍦板潃絀洪棿錛屽寘鍚彲鎵ц妯″潡鍜孌LL妯″潡鐨勪唬鐮佸拰鏁版嵁銆傚姩鎬佸垎閰嶇殑鍐呭瓨錛堢嚎紼嬪爢鏍堝拰鍫嗭級銆?

榪涚▼鏄笉媧繪臣鐨勶紝榪涚▼褰撲腑鑷沖皯瑕佹湁涓涓嚎紼嬶紝姣忎釜綰跨▼瑕佹湁鑷繁鐨勫爢鏍堝拰鑷繁鐨凜PU瀵勫瓨鍣ㄣ侰PU閫氳繃綆楁硶緇欐瘡涓嚎紼嬪垎閰嶆椂闂寸墖鐨勫姙娉曟潵閫犳垚鍋囪薄鏄湪鍚屾椂宸ヤ綔錛堝鏍擱氳繃鑷繁鐨勭畻娉曞疄鐜板悓鏃惰繍琛岋級銆?/p>

4.1 緙栧啓絎竴涓猈indiws搴旂敤紼嬪簭

Windows涓ょ綾誨瀷鐨勭▼搴忥細(xì)

  • CUI紼嬪簭錛屾瘮濡侰MD.EXE絳夌瓑銆侻icrosoft Visual C++榪炴帴寮鍏充負(fù)/SUBSYSTEM:CONDOLE錛堢▼搴忓惎鍔ㄦ椂涓嶈兘鍒涘緩GUI紼嬪簭錛夈?
  • GUI紼嬪簭錛屽浘褰㈢敤鎴風(fēng)▼搴忥紝姣斿Notepad錛學(xué)ord絳夌瓑銆侻icrosoft Visual C++榪炴帴寮鍏充負(fù)/SUBSYSTEM:WINDOWS錛堢▼搴忓惎鍔ㄦ椂涓嶈兘鍒涘緩CUI紼嬪簭錛夈?

娉ㄦ剰錛氫咯鑰呯殑姒傚康鍏跺疄鏄緢妯$硦鐨勶紝CUI鍙互鍒涘緩GUI鍥懼艦鐣岄潰錛屽弽涔婫UI紼嬪簭鍙兘鐢–UI紼嬪簭銆?/p>

Windows榪涘叆鐐瑰嚱鏁幫紙鍖哄垎鍦ㄤ簬CUI鍜孏UI紼嬪簭錛孉NSI鐮佸拰UNICODE鐮侊級

int WINAPI WinMain(
HINSTANCE hinstExe,
HINSTANCE,
PSTR pszCmdLine,
int nCmdShow);

int WINAPI wWinMain(
HINSTANCE hinstExe,
HINSTANCE,
PWSTR pszCmdLine,
int nCmdShow);

int __cdecl main(
int argc,
char *argv[],
char *envp[]);

int __cdecl wmain(
int argc,
wchar_t *argv[],
wchar_t *envp[]);

鍏跺疄Windows紼嬪簭鍚姩鏃舵渶寮濮嬪茍涓嶈皟鐢ㄨ嚜宸卞啓鐨勫叆鍙e嚱鏁幫紝鑰屾槸璋冪敤緋葷粺鐨勫嚑涓叆鍙e嚱鏁幫紝浠ヤ究鍙互璋冪敤malloc鍜宖ree涔嬬被鐨勫嚱鏁幫紝鍒濆鍖栧叏灞鍜岄潤鎬丆++瀵硅薄絳夈?/p>

  • 媯绱㈡寚鍚戞柊榪涚▼鐨勫畬鏁村懡浠よ鐨勬寚閽堛?
  • 媯绱㈡寚鍚戞柊榪涚▼鐨勭幆澧冨彉閲忕殑鎸囬拡銆?
  • 瀵笴/C++榪愯鏈熺殑鍏ㄥ眬鍙橀噺榪涜鍒濆鍖栥傚鏋滃寘鍚玈tdLib.h鏂囦歡錛屼唬鐮佸氨鍙互璁塊棶榪欎簺鍙橀噺銆?
  • 瀵笴榪愯鏈熺殑malloc鍜宑allo鍜屽叾浠栧簳灞傝緭鍏?杈撳嚭渚嬬▼浣跨敤鐨勫唴瀛樻爤榪涜鍒濆鍖栥?
  • 涓烘墍鏈夊叏灞鍜岄潤鎬丆++綾誨璞¤皟鐢ㄦ瀯閫犲嚱鏁般?

  搴旂敤紼嬪簭綾誨瀷                            榪涘叆鐐?nbsp;                                                    宓屽叆鍙墽琛屾枃浠剁殑鍚姩鍑芥暟


ANSI鐮丟UI搴旂敤紼嬪簭                   WinMain                                               WinMainCRTStattup

UNICODE鐮丟UI搴旂敤紼嬪簭           wWinMain                                            wWinMainCRTStattup

ANSI鐮丆UI搴旂敤紼嬪簭                   main                                                       mainCRTStattup

UNICODE鐮丆UI搴旂敤紼嬪簭           wmain                                                    wmainCRTStattup


娉ㄦ剰錛氬簲鐢ㄧ▼搴忎細(xì)鏍規(guī)嵁SUBSYSTEM寮鍏蟲潵鏌ユ壘宓屽叆鍙墽琛屽惎鍔ㄥ嚱鏁幫紝濡傛灉榪涘叆鐐瑰嚱鏁板拰鍚姩鍑芥暟涓嶅尮閰嶅垯鏄劇ず閾炬帴閿欒銆傚彲浠ュ垹闄UBSYSTEM錛圴S Project Settings錛夊紑鍏籌紝榪欐牱搴旂敤紼嬪簭浼?xì)鑷姩闇鎵懼尮閰嶇殑鍑芥暟銆?/p>

榪涘叆鐐瑰嚱鏁拌繑鍥炴椂璋冪敤緋葷粺鐨別xit鍑芥暟錛屽皢榪斿洖鍊間紶閫掔粰瀹冦俥xit鍑芥暟璐熻矗涓嬮潰鎿嶄綔錛?/p>

  • 璋冪敤鐢盻onexit鍑芥暟鐨勮皟鐢ㄨ屾敞鍐岀殑浠諱綍鍑芥暟銆?
  • 涓烘墍鏈夊叏灞鐨勫拰闈欐佺殑C++綾誨璞¤皟鐢ㄦ瀽鏋勫嚱鏁?
  • 璋冪敤鎿嶄綔緋葷粺鐨凟xitProcess錛屽茍灝嗚繑鍥炲間紶閫掔粰浠栵紝鍏抽棴榪涚▼銆?

4.1.1 榪涚▼鐨勫疄渚嬪彞鏌?/p>

WinMain/wWinMain鍑芥暟鐨勭涓涓弬鏁拌〃紺鴻繘紼嬪姞杞界殑鍙墽琛屾枃浠剁殑鍩哄湴鍧/鍙ユ焺銆傚浜庡姞杞借祫婧愮殑璋冪敤閮借浣跨敤姝ゅ彞鏌勶紝姣斿HICON LoadIcon(HINSTANCE, PCTSTR)銆傛湁鐨勫嚱鏁伴渶瑕佷嬌鐢℉MODULE錛屽拰HINSTANCE鏄竴涓剰鎬濓紙鍖哄垎涓昏鍦ㄤ簬16浣嶇殑鎿嶄綔緋葷粺涓級銆?/p>

HMODULE GetModuleHandle(PCTSTR pszModele);

鍑芥暟浣滅敤錛岃繑鍥炲姞杞借皟鐢ㄨ繘紼嬩腑鐨勫彲鎵ц鏂囦歡鎴栬匘LL鐨勫熀鍦板潃/鍙ユ焺錛屽弬鏁版槸鍙墽琛屾枃浠舵垨鑰匘LL鐨勫悕縐般傜粰pszModule璧嬪糔ULL錛屽垯榪斿洖鐨勬槸榪涚▼涓彲鎵ц鏂囦歡鐨勫彞鏌勩?/p>

娉ㄦ剰錛氬鏋滄壘涓嶅埌鍒欒繑鍥濶ULL銆傚鏋滃湪DLL涓紶閫扤ULL錛岃繑鍥炵殑浠嶇劧鏄繘紼嬪姞杞界殑鍙墽琛屾枃浠剁殑鍙ユ焺銆?/p>

4.1.2 榪涚▼鐨勫墠涓涓疄渚嬪彞鏌?/p>

絎簩涓弬鏁伴兘浼犻扤ULL錛屾槸涓?6浣嶇郴緇熸墍淇濈暀鐨勩?/p>

4.1.3 榪涚▼鐨勫懡浠よ

娉ㄦ剰錛氫笉瑕佽瘯鍥句慨鏀瑰懡浠よ鍐呴儴鍐呭瓨鐨勫鹼紝瑕佷嬌鐢ㄤ慨鏀瑰厛鎷瘋礉鍑烘潵銆?/p>

PTSTR GetCommandLine(); // 榪斿洖鍛戒護(hù)琛屽瓧絎︿覆
 
PTSTR CommandLineToArgv(PTSTR pszCmdLine, int *pNumArgs); // 鎷嗗垎鍛戒護(hù)琛屽瓧絎︿覆鍑芥暟

Demo錛?/p>

int nNumargs;
PTSTR *ppArgv = CommandLineToArgv(GetCommandLine(), &nNumargs);
if ('x' == *ppArgv[1]) {
// TODO:
}

// 鎵嬪姩閲婃斁鍐呭瓨錛屼竴鑸笉闇瑕侀噴鏀撅紝緋葷粺浼?xì)杩浗E嬪叧闂椂鍊欒嚜鍔ㄩ噴鏀?/span>
HeapFree(GetProcessHeap, 0, ppArgv);


4.1.4 榪涚▼鐨勭幆澧冨彉閲?/p>

鐜鍧楁槸榪涚▼鍦板潃絀洪棿涓垎閰嶇殑鍐呭瓨鍧楁瘡涓幆澧冨潡閮藉寘鍚竴緇勫瓧絎︿覆,鏍煎紡濡備笅:

VarName1=VarVarlue1\0

VarName2=VarVarlue2\0

VarName3=VarVarlue3\0

鈥?.

VarNameX=VarVarlueX\0

\0

娉ㄦ剰錛?/p>

  • 鎺掑簭蹇呴』鎸夌収瀛楁瘝欏哄簭銆?
  • 鈥?鈥欏彿涓嶈兘鏄彉閲忓悕鐨勪竴閮ㄥ垎銆?
  • 絳夊彿宸﹀彸涓よ竟鐨勭┖鏍煎皢琚畻鍋氬悕縐版垨鑰呭箋?
  • 鏈鍚庡繀欏誨姞涓橽0鈥欒〃紺虹粨鏉熴?
  • 瀛愯繘紼嬪拰鐖惰繘紼嬩笉鍏辯敤鐜鍧楋紝淇敼涓嶄細(xì)褰卞搷鐖?瀛愯繘紼嬨?
DWORD GetEnvironmentVariable(PCTSTR pszName, PTSTR pszValue, DWORD cchValue);


pszName鎸囧彉閲忓悕錛宲szValue鎸囧悜鍙橀噺鍊肩殑緙撳瓨鍖猴紝cchValue緙撳瓨鍖虹殑澶у皬銆傛壘涓嶅埌鍙橀噺鍚嶆垨鑰呰緗殑闀垮害涓嶅瀛樻斁灝辮繑鍥?銆?

 

ExpandEnvironmentStrings(PCSTR pszSrc, PSTR pszDst, DWORD nSize);

鐢ㄦ潵鐢ㄧ幇瀹炲嚭鍙浛鎹㈢殑鐜鍙橀噺鐨勫瓧絎︿覆銆?/p>

BOOL SetEnvironmentVariable(PCTSTR pszName, PCTSTR pszValue);

璁劇疆鐜鍙橀噺鐨勫?濡傛灉涓嶅瓨鍦ㄥ垯鍒涘緩,濡傛灉瀛樺湪鍒欐浛鎹粬鐨勫箋?/p>

4.1.5 榪涚▼鐨勪翰緙樻?/p>

瀛愯繘紼嬬戶鎵跨埗榪涚▼鐨勪翰緙樻с傦紙鍏蜂綋浠涔堟剰鎬濇病鏄庣櫧錛?/p>

4.1.6 榪涚▼鐨勯敊璇ā寮?/p>

榪涚▼鍙互璁劇疆濡備綍澶勭悊涓浜涢敊璇?/p>

UINT SetErrorMode(UINT fuErrorMode);


鍚勪釜妯″紡鐢∣R榪炴帴


      鏍囧織                                                                                                               璇存槑

SEM_FAILCRITICALERRORS                                                                    緋葷粺涓嶆樉紺哄叧閿敊璇彞鏌勬秷鎭錛屽茍灝嗛敊璇繑鍥炵粰璋冪敤榪涚▼

SEM_NOGOFAULTERRORBOX                                                               緋葷粺涓嶆樉紺轟竴鑸繚鎶ゆ晠闅滄秷鎭銆傛湰鏍囧織鍙簲璇ョ敱閲囩敤寮傚父鎯呭喌澶勭悊紼嬪簭鏉ュ鐞嗕竴鑸繚鎶わ紙GP錛夋晠闅滅殑璋冨紡搴旂敤紼嬪紡鏉ヨ瀹?/p>

SEM_NOOPENFILEERRORBOX                                                               褰撶郴緇熸壘涓嶅埌鏂囦歡鏃訛紝瀹冧笉鏄劇ず娑堟伅妗嗐?/p>

SEM_NOALIGNMENTFAULTEXCEPT                                                    緋葷粺鑷姩鎺掗櫎鍐呭瓨娌℃湁瀵瑰叾鐨勬晠闅滐紝騫朵嬌搴旂敤紼嬪簭鐪嬩笉鍒拌繖浜涙晠闅溿傛湰鏍囧織瀵筙86澶勭悊鍣ㄤ笉璧蜂綔鐢ㄣ?/p>


瀛愯繘紼嬬戶鎵跨埗榪涚▼鐨勯敊璇ā寮忥紝濡傛灉涓嶆兂璁╁瓙榪涚▼緇ф壙鐖惰繘紼嬬殑閿欒妯″紡鐨勮瘽錛屽彲浠ュ啀璋冪敤CreateProcess鏃惰瀹欳REATE_DEFAULT_ERROR_MODE鏍囧織銆?

4.1.7 榪涚▼鐨勫綋鍓嶉┍鍔ㄥ櫒鍜岀洰褰?/p>

榛樿鎯呭喌涓嬩笉鎻愪緵鍏ㄨ礬寰勭殑璇濓紝緋葷粺灝變細(xì)鍦ㄥ綋鍓嶉┍鍔ㄥ櫒鍜岀洰褰曚腑鏌ユ壘鏂囦歡錛屾瘮濡侰reateFile錛屽洜涓洪┍鍔ㄥ櫒鍜岀洰褰曟槸姣忎釜榪涚▼鏉ョ淮鎶ょ殑錛屾墍浠ユ煇涓嚎紼嬫敼鍙樹簡鐩綍鍜岄┍鍔ㄥ櫒浼?xì)鏀瑰彉鏁翠釜杩浗E嬬殑鐩綍鍜岄┍鍔ㄥ櫒銆?/p>

涓嬮潰涓や釜鍑芥暟璇誨彇鍜岃緗細(xì)

DWORD GetCurrentDirectory(DWORD cchCurDir, PTSTR pszCurDir);

BOOL SetCurrentDirectory(PCTSTR pszCurDir);

4.1.8 榪涚▼鐨勫綋鍓嶇洰褰?/p>

椹卞姩鍣ㄧ幆澧冨潡鐨勬牸寮?

=C:=C:\Utility\Bin

紼嬪簭鏌ユ壘椹卞姩鍣ㄧ幆澧冨潡錛屽鏋滄病鏈夊垯鎸夐┍鍔ㄥ櫒鍚嶆煡鎵俱?/p>

瀛愯繘紼嬩笉鑳界戶鎵跨埗榪涚▼鐨勯┍鍔ㄥ櫒鍧楋紝濡傛灉鎯崇戶鎵垮繀欏誨啓鍒扮幆澧冨彉閲忎腑鍘匯傦紙濂藉儚鏄繖鏍鳳紝濡傛灉鏈変笉瀵硅楂樹漢鎸囩偣錛夈?/p>

DWORD GetFullPathName(PCTSTR pszFile, DWORD cchPath, PTSTR pszPath, PTSTR *ppszFilePart);

鑾峰彇椹卞姩鍣ㄧ殑褰撳墠鐩綍,姣斿:

TCHAR szCurDir[MAX_PATH];
DWORD GetFullPathName(TEXT("C:"), MAX_PATH, szCurDir, NULL);


4.1.9 緋葷粺鐗堟湰

DWORD GetVersion();姝ゅ嚱鏁板瓨鍦ㄩ珮鍦頒綅鐨勬販璁築UG錛屾墍浠ュ敖閲忎笉瑕佷嬌鐢ㄣ?/p>

BOOL GetVersion(POSVERSIONINFOEX pVersionInfomation);
typedef struct _OSVERSIONINFOEXA {
    DWORD dwOSVersionInfoSize;    // 鍦ㄨ皟鐢℅etVersionEx鍑芥暟涔嬪墠錛屽繀蹇呴』緗負(fù)sizeof(OSVERSIONINFOEX)
    DWORD dwMajorVersion;         // 涓葷郴緇熺殑涓昏鐗堟湰鍙?/span>
     DWORD dwMinorVersion;         // 涓葷郴緇熺殑嬈¤鐗堟湰鍙?/span>
     DWORD dwBuildNumber;          // 褰撳墠緋葷粺鐨勬瀯寤哄彿
     DWORD dwPlatformId;           // 璇嗗埆褰撳墠緋葷粺鐨勫鉤鍙般傚彲浠ヤ嬌VER_PLATFORM_WIN32(WIN32),VER_PLATFORM_WIN32_WINDOWS(WINDOWS 95/WINDOWS 98),VER_PLATFORM_WIN32_NT(WINDOWS NT/WINDOWS 2000)鎴朧ER_PLATFORM_WIN32_CEHH(WINDOWS CE)
    CHAR   szCSDVersion[ 128 ];     // Maintenance string for PSS usage 鏈煙鍖呭惈浜嗛檮鍔犳枃鏈紝鐢ㄤ簬鎻愪緵鍏充簬宸茬粡瀹夎鐨勬搷浣滅郴緇熺殑璇︾粏淇℃伅
     WORD   wServicePackMajor;       // 鏈鏂板畨瑁呯殑鏈嶅姟紼嬪簭鍖呯殑涓昏鐗堟湰鍙?/span>
     WORD   wServicePackMinor;       // 鏈鏂板畨瑁呯殑鏈嶅姟紼嬪簭鍖呯殑嬈¤鐗堟湰鍙?/span>
     WORD   wSuiteMask;              // 鐢ㄤ簬鏍囪瘑緋葷粺涓婂瓨鍦ㄩ偅涓▼搴忕粍錛圴ER_SUITE_SMALLBUSINESS,VER_SUITE_ENTERPRISE,VER_SUITE_BACKOFFICE,VER_SUITE_COMMUNICATIONS,VER_SUITE_TERMINAL,VER_SUITE_SMALLBUSINESS_RESTRICTED,VER_SUITE_EMBEDDEDNT鍜孷ER_SUITE_DATACENTER錛?/span>
     BYTE  wProductType;             // 鐢ㄤ簬鏍囪瘑瀹夎浜嗕笅闈㈢殑鍝釜鎿嶄綔緋葷粺錛歏ER_NT_WORKSTATION,VER_NT_SERVER鎴朧ER_NT_DOMAIN_CONTROLLER
    BYTE  wReserved;                // 鐣欎綔灝嗘潵浣跨敤
} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;

榪欎釜鏄墿灞曠増鏈?/div>
 
4.2 CreateProcess鍑芥暟
緇堜簬鐪嬪埌姝i浜唦澶х瑧
BOOL CreateProcess(
    LPCSTR lpApplicationName,
    LPSTR lpCommandLine,
    LPSECURITY_ATTRIBUTES lpProcessAttributes,
    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    BOOL bInheritHandles,
    DWORD dwCreationFlags,
    LPVOID lpEnvironment,
    LPCSTR lpCurrentDirectory,
    LPSTARTUPINFOA lpStartupInfo,
    LPPROCESS_INFORMATION lpProcessInformation
    );

  1. 榪涚▼鍚姩鏃訛紝棣栧厛鍒涘緩涓涓繘紼嬪唴鏍稿璞★紝璇ュ唴鏍稿璞′笉鏄繘紼嬶紝鏄竴涓鐞嗚繘紼嬪瓨鍌ㄨ繘紼嬩俊鎭殑灝忓瀷鏁版嵁緇撴瀯銆傦紙璁℃暟涓?錛?
  2. 鍒涘緩涓涓櫄鎷熷湴鍧絀洪棿錛屽姞杞藉彲鎵ц鏂囦歡鍜孌LL銆?
  3. 涓鴻繘紼嬪垱寤轟釜涓葷嚎紼嬬殑鍐呮牳瀵硅薄錛屽拰榪涚▼鍐呮牳瀵硅薄涓鏍鳳紝鏄敤鏉ョ鐞嗗拰瀛樺偍綰跨▼淇℃伅鐨勫皬鍨嬫暟鎹粨鏋勩傦紙璁℃暟涓?錛?
  4. 璋冪敤C/C++榪愯鏈熷惎鍔ㄤ唬鐮侊紝涓葷嚎紼嬪紑濮嬭繍琛岋紝鏈緇堣皟鐢ㄥ惎鍔ㄥ嚱鏁幫紝鎴愬姛榪斿洖TRUE錛堟湭鑳芥紜姞杞紻LL涔熻繑鍥濼RUE錛屾墍浠ョ埗榪涚▼鏃犳硶鏌ョ湅錛夈?

4.2.1 pszApplicationName鍜宲szCommandLine

pszCommandLine鍙傛暟錛氱敤鏉ュ垱寤鴻繘紼嬬殑鍛戒護(hù)琛屽弬鏁般傛煡鐪嬬涓涓爣璁幫紝濡傛灉娌℃湁鈥?exe鈥濅細(xì)鑷姩娣誨姞鈥?exe鈥濅笂鍘匯傦紙濡傛灉pszApplicationName鍙傛暟NULL錛?/p>

  1. 鍖呭惈璋冪敤榪涚▼鐨勨?exe鈥濇枃浠剁殑鐩綍銆?
  2. 璋冪敤榪涚▼鐨勫綋鍓嶇洰褰曘?
  3. windows緋葷粺鐩綍
  4. windows鐩綍
  5. PATH鐜鍙橀噺涓垪鍑虹殑鐩綍銆?

濡傛灉pszApplicationName鍙傛暟涓嶄負(fù)NULL錛岀郴緇熷皢鍦ㄥ綋鍓嶇洰褰曚腑鏌ユ壘.exe鏂囦歡錛堜笉浼?xì)鑷姩娣诲姞鈥?exe鈥濓級錛屽鏋滄壘涓嶅埌灝嗗け璐ワ紝姝ゆ椂pszCommandLine浣滀負(fù)鍙傛暟浼犻掔粰鍙墽琛岀▼搴忕殑榪涚▼銆?/p>

4.2.2 psaProcess,psaThread鍜宐inHeritHandles

psaProcess,psaThread鏄繘紼嬪拰榪涚▼涓葷嚎紼嬪唴鏍稿璞$殑瀹夊叏灞炴с傞粯璁ゅ間負(fù)NULL銆?/p>

binHeritHandles璁劇疆涓篢RUE琛ㄧず鐖惰繘紼嬪湪鍒涘緩瀛愯繘紼嬪彲浠ョ戶鎵垮畨鍏ㄥ睘鎬ф爣蹇楅噷璁劇疆涓篢RUE鐨勪換浣曞彲緇ф壙鐨勫唴鏍稿璞°傚鏋滆緗負(fù)FALSE瀛愯繘紼嬪皢涓嶇戶鎵夸換浣曞唴鏍稿璞°?/p>

4.2.3 fdwCreate

鐢ㄤ簬鏍囪瘑鏍囧織錛屽畾涔夎鍒欏浣曞垱寤烘柊榪涚▼銆傛垜涓鑸啓榛樿鍊糔ULL銆傚叿浣撶殑澶浜嗭紝璇鋒煡鐪婱SDN鍚э紝涓嶆兂鍐欎簡銆?/p>

4.2.4 pvEnvironment

璁劇疆瀛愯繘紼嬩嬌鐢ㄧ殑鐜鍐呭瓨鍧楋紝涓鑸粯璁ゅ間負(fù)NULL錛岃〃紺哄瓙榪涚▼緇ф壙鐖惰繘紼嬬殑鐜鍧椼?/p>

PVOID GetEnvironmentString(); // 鑾峰彇褰撳墠鍐呭瓨鍧楃殑鍦板潃
BOOL FreeEnvironmentStrings(PTSTR pszEnvironmentBlock); // 涓嶇敤鐨勬椂鍊欒皟鐢ㄦ鍑芥暟閲婃斁鍐呭瓨鍧?/span>


4.2.5 pszCurDir

璁懼畾宸ヤ綔鐩綍鍜岄┍鍔ㄥ櫒鍙鳳紝濡傛灉涓篘ULL鍒欏拰搴旂敤紼嬪簭鐨勭洰褰曠浉鍚岋紝濡傛灉璁劇疆姣斿浠モ橽0鈥欑粨灝劇殑鍖呭惈椹卞姩鍣ㄥ悕鐨勮礬寰勩?/p>

4.2.6 psiStartInfo

typedef struct _STARTUPINFO {
    DWORD   cb;             //錛堜袱鑰呭吋鏈夛紝鎺у埗鍙板拰紿楀彛紼嬪簭錛?
    LPSTR   lpReserved;     // 錛堜袱鑰呭吋鏈夛級淇濈暀錛屽繀欏誨垵濮嬪寲涓篘ULL
    LPSTR   lpDesktop;      // 錛堜袱鑰呭吋鏈夛級鐢ㄤ簬鏍囪瘑鍚姩搴旂敤紼嬪簭鎵鍦ㄧ殑妗岄潰鐨勫悕瀛椼傚鏋滆妗岄潰瀛樺湪錛屾柊榪涚▼渚夸笌鎸囧畾鐨勬闈㈢浉鍏寵仈銆傚鏋滄闈笉瀛樺湪錛屼究鍒涘緩涓涓甫鏈夐粯璁ゅ睘鎬х殑妗岄潰錛屽茍浣跨敤涓烘柊榪涚▼鎸囧畾鐨勫悕瀛椼傚鏋渓pDesktop鏄疦ULL錛堣繖鏄渶甯歌鐨勬儏鍐碉級錛岄偅涔堣榪涚▼灝嗕笌褰撳墠妗岄潰鐩稿叧鑱斻?/span>
    LPSTR   lpTitle;        // 錛堟帶鍒跺彴錛夌敤浜庤瀹氭帶鍒跺彴紿楀彛鍚嶇О銆傚鏋渓pTitle鏄疦ULL錛屽垯鍙墽琛屾枃浠剁殑鍚嶅瓧灝嗙敤浣滅獥鍙e悕
    DWORD   dwX;            // x,y鍧愭爣錛屽彧鏈夊綋瀛愯繘紼嬬敤CW_USEDEFAULT浣滀負(fù)CreateWindows鐨剎鍙傛暟鏉ュ垱寤哄畠鐨勭涓涓噸鍙犵獥鍙f椂錛屾墠浣跨敤榪欎袱涓潗鏍囥傝嫢鏄垱寤烘帶鍒跺彴紿楀彛鐨勫簲鐢ㄧ▼搴忥紝榪欎簺鎴愬憳鐢ㄤ簬鎸囨槑鎺у埗鍙扮獥鍙g殑宸︿笂瑙掋?/span>
    DWORD   dwY;          
    DWORD   dwXSize;        //錛堜袱鑰呭吋鏈夛級璁懼畾紿楀彛瀹藉害鍜岄暱搴︼紝鍙湁瀛愯繘紼嬬敤WM_USEDEFAULT浣滀負(fù)CreateWIndows鐨刵Width鍙傛暟鏉ュ垱寤哄畠鐨勭涓涓噸鍙犵獥鍙f椂鎵嶆槸鐢ㄨ繖涓箋傛帶鍒跺彴灝辨槸鎺у埗鍙扮殑瀹藉拰闀?/span>
    DWORD   dwYSize;
    DWORD   dwXCountChars;  //錛堟帶鍒跺彴錛夌敤浜庤瀹氬瓙搴旂敤紼嬪簭鎺у埗鍙扮殑闀垮害鍜屽搴︼紙瀛楃琛ㄧず錛?/span>
    DWORD   dwYCountChars;
    DWORD   dwFillAttribute;// 錛堟帶鍒跺彴錛夌敤浜庤瀹氬瓙搴旂敤紼嬪簭鐨勬帶鍒跺彴鑳屽獎棰滆壊鍜屾枃鏈?/span>
    DWORD   dwFlags;        // 錛堜袱鑰呭吋鏈夛級鍙傝涓嬩竴孌?/span>
    WORD    wShowWindow;    // (紿楀彛)鐢ㄤ簬璁懼畾瀛愬簲鐢ㄧ▼搴忓垵嬈¤皟鐢⊿howWindow灝哠W_SHOWDEFAULT浣滀負(fù)nCmdShow鍙傛暟浼犻掓椂錛岃搴旂敤紼嬪簭鐨勭涓涓噸鍙犵獥鍙e簲璇ュ浣曞嚭鐜般傛湰鎴愬憳鍙互鏄氬父鐢ㄤ簬ShowWindow鍑芥暟鐨勪換浣曚竴涓猄W_*鏍囪瘑絎?/span>
    WORD    cbReserved2;    // 淇濈暀錛屽繀欏誨垵濮嬪寲涓?
    LPBYTE  lpReserved2;    // 淇濈暀錛屽繀欏誨垵濮嬪寲涓篘ULL
    HANDLE  hStdInput;      // (鎺у埗鍙?鐢ㄤ簬璁懼畾鎺у埗鍙拌緭鍏ュ拰杈撳嚭鐢ㄧ殑緙撳瓨鐨勫彞鏌勩傞粯璁よ緗甴StdInput鏄敭鐩樼紦瀛橈紝hStdOutput鍜宧StdError紿楀彛鐨勭紦瀛樸?/span>
    HANDLE  hStdOutput;     // 
    HANDLE  hStdError;
} STARTUPINFO, *LPSTARTUPINFO;


璁劇疆鏌愪簺鍊鹼紝澶ч儴鍒嗛渶瑕侀粯璁ゅ鹼紝蹇呴』鍒濆鍖栦負(fù)0閮姐?/p>

STARTUPINFO si = {sizeof(si)};

dwFlags鏍囧織錛岀敤浜庝慨鏀瑰浣曟潵鍒涘緩瀛愯繘紼嬨?/p>


鏍囧織
STARTF_USESIZE                                                                              浣跨敤dwXSize鍜宒wYSize鎴愬憳

STARTF_USESHOWWINDOW                                                         浣跨敤wShowWIndow鎴愬憳

STARTF_USEPOSITION                                                                    浣跨敤dwX鍜宒wY鎴愬憳

STARTF_USECOUNTCHARS                                                            浣跨敤dwXCountChars鍜宒wYCountChars鎴愬憳

STARTF_USEFILLATTRIBUTE                                                           浣跨敤dwFillAttribute鎴愬憳

STARTF_USESTDHANDLES                                                             浣跨敤hStdInput,hStdOutput鍜宧StdError鎴愬憳

STARTF_RUN_FULLSCREEN                                                            寮哄埗鍐峹86璁$畻鏈轟笂榪愯鐨勬帶鍒跺彴搴旂敤紼嬪簭浠ュ叏灞忓箷鏂瑰紡鍚姩榪愯

STARTF_FORCEONFEEDBACK                                                        鍏夋爣璁劇疆涓烘矙婕忥紝榪囦簡2縐掑鏋滆繘紼嬫病鍚姩GUI錛孋reateProcess紼嬪簭灝嗗厜鏍囪緗負(fù)綆ご錛?縐掑唴鏄劇ず涓涓獥鍙o紝鎴愬姛璋冪敤GetMessage鍒欏弽澶嶇澶達(dá)紝濡傛灉娌℃湁鎴愬姛錛岀瓑寰?縐?鍙樹負(fù)綆ご

STARTF_FORCEOFFFEEDBACK                                                                                      


4.2.7 ppiProcInfo

typedef struct _PROCESS_INFORMATION {
    HANDLE hProcess;
    HANDLE hThread;
    DWORD dwProcessId;
    DWORD dwThreadId;
} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;

榪斿洖鐨勫垎鍒槸錛屽瓙榪涚▼榪涚▼鍙ユ焺錛屽瓙榪涚▼涓富綰跨▼鐨勭嚎紼嬪彞鏌勶紝瀛愯繘紼婭D錛屽瓙榪涚▼涓富綰跨▼鐨処D銆?/p>

娉ㄦ剰錛?/p>

  1. hProcess鍜宧Thread琚祴鍊煎悗錛屽唴鏍稿璞$殑璁℃暟鍣ㄥ垎鍒+1銆?
  2. 緋葷粺涓烘瘡涓繘紼嬪拰綰跨▼鍒嗛厤鐨処D鍊奸兘鏄笉鍚岀殑錛屼絾鏄綋鏌愯繘紼嬮鍑哄悗錛屾柊榪涚▼寰堝彲鑳戒細(xì)浣跨敤閫鍑鴻繘紼嬬殑ID銆?

 

4.3 緇堟榪涚▼鐨勮繍琛?/p>

4.3.1 涓葷嚎紼嬬殑榪涘叆鐐瑰嚱鏁拌繑鍥?/p>

鏈濂藉己鍔涙帹鑽愪嬌鐢ㄨ繖縐嶆柟寮忋?/p>

  1. 璋冪敤C++鏋愭瀯鍑芥暟銆?
  2. 閲婃斁鍫嗘爤鍐呭瓨銆?
  3. 灝嗚繘紼嬮鍑轟唬鐮侊紙榪涚▼鍐呮牳瀵硅薄涓淮鎶わ級璁劇疆涓鴻繘鍏ョ偣鍑芥暟榪斿洖鍊箋?
  4. 緋葷粺灝嗚繘紼嬪唴鏍稿璞$殑榪斿洖鍊煎噺鍘?銆?

4.3.2 ExitProcess鍑芥暟

閬垮厤浣跨敤榪欎釜鏂規(guī)硶銆?/p>

VOID ExitProcess(UINT fuExitCode);

緇堟榪涚▼榪愯錛屽茍灝嗛鍑虹爜璁劇疆涓篺uExitCode銆?/p>

娉ㄦ剰錛?/p>

  1. 璋冪敤ExitProcess鍚庯紝鎵鏈夌殑浠g爜閮藉皢涓嶄細(xì)鎵ц錛屽叧闂繘紼嬨?
  2. 璋冪敤ExitProcess鍚庯紝涓嶄細(xì)閲婃斁C++鏋愭瀯鍑芥暟璧勬簮錛屾湁緋葷粺娓呯悊榪涚▼鏃跺欑洿鎺ラ噴鏀懼唴瀛樸?
  3. 榪涚▼鐨勪富綰跨▼鐩存帴return閫鍑哄悗錛屽惎鍔ㄥ嚱鏁頒腑涔熶細(xì)璋冪敤ExitProcess鍑芥暟錛岃繘紼嬬粓姝紝鍏朵粬綰跨▼涔熶細(xì)鍏抽棴銆?
  4. 榪涚▼鐨勪富綰跨▼璋冪敤_endThreadex鎴栬匛ndThread鍑芥暟鍏抽棴涓葷嚎紼嬪悗錛岃繘紼嬫病鏈夎鍏抽棴錛屽瓙綰跨▼緇х畫榪愯銆?

 

4.3.3 TerminiateProcess鍑芥暟

鑳戒笉鐢ㄥ氨鍒敤銆?/p>

BOOL TerminiateProcess(HANDLE hProcess, UINT fuExitCode;)

鍏抽棴鎸囧畾涓篽Process鍙ユ焺鐨勮繘紼嬶紝鎺ㄥ嚭浠g爜涓篺uExitCode銆?/p>

娉ㄦ剰錛?/p>

  1. 鍏抽棴榪涚▼灝嗕涪澶辨墍鏈夐渶瑕佷繚瀛樺埌紜洏鐨勬暟鎹紝鍥犱負(fù)榪涚▼鍏抽棴鏃跺欐渶鍚庝細(xì)鑷繁閲婃斁鍐呭瓨璧勬簮錛屽叧闂唴鏍稿璞$殑鍙ユ焺鍊鹼紝鎵浠ヤ笉浼?xì)閫犳垚鍐呭瓨娉勯湶銆?
  2. 姝ゅ嚱鏁版槸涓紓姝ュ嚱鏁幫紝瀹冭繑鍥炵殑鏃跺欐棤娉曠煡閬擄紝闇瑕佸叧闂殑榪涚▼鏄惁宸茬粡琚己鍒跺叧闂簡銆?

4.3.4 榪涚▼緇堟榪愯鏃跺嚭鐜扮殑鎯呭喌

  1. 榪涚▼涓墿浣欑殑鎵鏈夌嚎紼嬪叏閮ㄧ粓姝㈣繍琛屻?
  2. 閲婃斁璇ヨ繘紼嬪紩鐢ㄧ殑GDI鍜岀敤鎴峰璞★紝鍐呮牳瀵硅薄琚叧闂紙鍒殑榪涚▼鏈夊紩鐢ㄥ垯璁℃暟鍣ㄥ噺1錛屽鏋滄病鏈夊紩鐢ㄥ垯鍏抽棴鍐呮牳瀵硅薄錛夈?
  3. 鎺ㄥ嚭浠g爜灝嗕粠STILL_ACTIVE錛堝悗闈㈢珷鑺傜嚎紼嬪皢浠嬬粛璇ョ粨鏋勶級鏀逛負(fù)浼犻掔粰ExitProcess鍜孴erminiateProcess浠g爜銆?
  4. 鍐呮牳瀵硅薄鐘舵佸彉涓烘敹鍒伴氱煡鐘舵侊紙綰跨▼涓粙緇嶏級錛屽叾浠栫嚎紼嬫寕璧鳳紝鐭ラ亾榪涚▼緇堟銆?
  5. 榪涚▼鍐呮牳瀵硅薄璁℃暟鍑忓幓1錛屾垨鑰呭叧闂?

娉ㄦ剰錛?/p>

榪涚▼鍐呮牳瀵硅薄鐨勫鍛藉彲鑳借繙榪滃ぇ浜庤繘紼嬫湰韜紝鐖惰繘紼嬩繚鐣欏瓙榪涚▼鍐呮牳瀵硅薄鍙互鏌ョ湅瀹冪殑鎺ㄥ嚭浠g爜璋冪敤涓嬮潰鍑芥暟錛?/p>

BOOL GetExitCodeProcess(HANDLE hProcess, PDWORD pdwExitCode);


鍙互璋冪敤榪欎釜鍑芥暟鏉ュ垽鏂瓙榪涚▼鏄惁鍏抽棴,濡傛灉瀛愯繘紼嬫病鏈夊叧闂?瀹冪殑STILL_ACTIVE鏍囪瘑絎﹀畾涔変負(fù)0x103銆備絾鏄繖涔堜綔鏁堢巼涓嶆槸寰堥珮銆?/p>

 

4.4 瀛愯繘紼?/p>

娌′粈涔堝ソ璇寸殑錛屽墠闈㈢殑閮借浜嗭紝鐢–loseHandle鍏抽棴瀛愯繘紼嬪拰瀛愯繘紼嬩腑涓葷嚎紼嬬殑鍙ユ焺鍊兼潵鍒囨柇鐖惰繘紼嬪拰瀛愯繘紼嬬殑鎵鏈夎仈緋匯?/p>

 

4.5 姣忓眬緋葷粺涓繍琛岀殑榪涚▼

鍒╃敤ToolHelp鍑芥暟鏃忔潵寮鍙戠鐞嗘搷浣滅郴緇熶笂鐨勮繘紼嬨傛墦綆楄嚜宸變篃鍐欎釜璇曡瘯銆?/p>

 

鏈枃绔犵殑鍐呭鏄湰浜哄涔?fàn)Windows鏍稿績緙栫▼絎洓绔犲悗鐨勬葷粨錛屾湁閿欒璇峰ぇ瀹剁籂姝o紝杞澆娉ㄦ槑鍑哄:

http://www.cnblogs.com/xi52qian/



xi52qian 2011-03-07 09:40 鍙戣〃璇勮
]]>Windows鏍稿績緙栫▼ 絎?绔?榪涚▼http://m.shnenglu.com/xi52qian/archive/2011/03/04/141121.htmlxi52qianxi52qianFri, 04 Mar 2011 08:45:00 GMThttp://m.shnenglu.com/xi52qian/archive/2011/03/04/141121.htmlhttp://m.shnenglu.com/xi52qian/comments/141121.htmlhttp://m.shnenglu.com/xi52qian/archive/2011/03/04/141121.html#Feedback0http://m.shnenglu.com/xi52qian/comments/commentRss/141121.htmlhttp://m.shnenglu.com/xi52qian/services/trackbacks/141121.html榪涚▼鐢變袱閮ㄥ垎緇勬垚錛?/p>
  • 鎿嶄綔緋葷粺綆$悊榪涚▼鐨勫唴鏍稿璞°傚瓨鏀捐榪涚▼ 鐨勭粺璁′俊鎭殑鍦版柟銆?
  • 鍦板潃絀洪棿錛屽寘鍚彲鎵ц妯″潡鍜孌LL妯″潡鐨勪唬鐮佸拰鏁版嵁銆傚姩鎬佸垎閰嶇殑鍐呭瓨錛堢嚎紼嬪爢鏍堝拰鍫嗭級銆?

榪涚▼鏄笉媧繪臣鐨勶紝榪涚▼褰撲腑鑷沖皯瑕佹湁涓涓嚎紼嬶紝姣忎釜綰跨▼瑕佹湁鑷繁鐨勫爢鏍堝拰鑷繁鐨凜PU瀵勫瓨鍣ㄣ侰PU閫氳繃綆楁硶緇欐瘡涓嚎紼嬪垎閰嶆椂闂寸墖鐨勫姙娉曟潵閫犳垚鍋囪薄鏄湪鍚屾椂宸ヤ綔錛堝鏍擱氳繃鑷繁鐨勭畻娉曞疄鐜板悓鏃惰繍琛岋級銆?/p>

4.1 緙栧啓絎竴涓猈indiws搴旂敤紼嬪簭

Windows涓ょ綾誨瀷鐨勭▼搴忥細(xì)

  • CUI紼嬪簭錛屾瘮濡侰MD.EXE絳夌瓑銆侻icrosoft Visual C++榪炴帴寮鍏充負(fù)/SUBSYSTEM:CONDOLE錛堢▼搴忓惎鍔ㄦ椂涓嶈兘鍒涘緩GUI紼嬪簭錛夈?
  • GUI紼嬪簭錛屽浘褰㈢敤鎴風(fēng)▼搴忥紝姣斿Notepad錛學(xué)ord絳夌瓑銆侻icrosoft Visual C++榪炴帴寮鍏充負(fù)/SUBSYSTEM:WINDOWS錛堢▼搴忓惎鍔ㄦ椂涓嶈兘鍒涘緩CUI紼嬪簭錛夈?

娉ㄦ剰錛氫咯鑰呯殑姒傚康鍏跺疄鏄緢妯$硦鐨勶紝CUI鍙互鍒涘緩GUI鍥懼艦鐣岄潰錛屽弽涔婫UI紼嬪簭鍙兘鐢–UI紼嬪簭銆?/p>

Windows榪涘叆鐐瑰嚱鏁幫紙鍖哄垎鍦ㄤ簬CUI鍜孏UI紼嬪簭錛孉NSI鐮佸拰UNICODE鐮侊級

int WINAPI WinMain(
HINSTANCE hinstExe,
HINSTANCE,
PSTR pszCmdLine,
int nCmdShow);

int WINAPI wWinMain(
HINSTANCE hinstExe,
HINSTANCE,
PWSTR pszCmdLine,
int nCmdShow);

int __cdecl main(
int argc,
char *argv[],
char *envp[]);

int __cdecl wmain(
int argc,
wchar_t *argv[],
wchar_t *envp[]);

鍏跺疄Windows紼嬪簭鍚姩鏃舵渶寮濮嬪茍涓嶈皟鐢ㄨ嚜宸卞啓鐨勫叆鍙e嚱鏁幫紝鑰屾槸璋冪敤緋葷粺鐨勫嚑涓叆鍙e嚱鏁幫紝浠ヤ究鍙互璋冪敤malloc鍜宖ree涔嬬被鐨勫嚱鏁幫紝鍒濆鍖栧叏灞鍜岄潤鎬丆++瀵硅薄絳夈?/p>

  • 媯绱㈡寚鍚戞柊榪涚▼鐨勫畬鏁村懡浠よ鐨勬寚閽堛?
  • 媯绱㈡寚鍚戞柊榪涚▼鐨勭幆澧冨彉閲忕殑鎸囬拡銆?
  • 瀵笴/C++榪愯鏈熺殑鍏ㄥ眬鍙橀噺榪涜鍒濆鍖栥傚鏋滃寘鍚玈tdLib.h鏂囦歡錛屼唬鐮佸氨鍙互璁塊棶榪欎簺鍙橀噺銆?
  • 瀵笴榪愯鏈熺殑malloc鍜宑allo鍜屽叾浠栧簳灞傝緭鍏?杈撳嚭渚嬬▼浣跨敤鐨勫唴瀛樻爤榪涜鍒濆鍖栥?
  • 涓烘墍鏈夊叏灞鍜岄潤鎬丆++綾誨璞¤皟鐢ㄦ瀯閫犲嚱鏁般?

  搴旂敤紼嬪簭綾誨瀷                            榪涘叆鐐?nbsp;                                                    宓屽叆鍙墽琛屾枃浠剁殑鍚姩鍑芥暟


ANSI鐮丟UI搴旂敤紼嬪簭                   WinMain                                               WinMainCRTStattup

UNICODE鐮丟UI搴旂敤紼嬪簭           wWinMain                                            wWinMainCRTStattup

ANSI鐮丆UI搴旂敤紼嬪簭                   main                                                       mainCRTStattup

UNICODE鐮丆UI搴旂敤紼嬪簭           wmain                                                    wmainCRTStattup


娉ㄦ剰錛氬簲鐢ㄧ▼搴忎細(xì)鏍規(guī)嵁SUBSYSTEM寮鍏蟲潵鏌ユ壘宓屽叆鍙墽琛屽惎鍔ㄥ嚱鏁幫紝濡傛灉榪涘叆鐐瑰嚱鏁板拰鍚姩鍑芥暟涓嶅尮閰嶅垯鏄劇ず閾炬帴閿欒銆傚彲浠ュ垹闄UBSYSTEM錛圴S Project Settings錛夊紑鍏籌紝榪欐牱搴旂敤紼嬪簭浼?xì)鑷姩闇鎵懼尮閰嶇殑鍑芥暟銆?/p>

榪涘叆鐐瑰嚱鏁拌繑鍥炴椂璋冪敤緋葷粺鐨別xit鍑芥暟錛屽皢榪斿洖鍊間紶閫掔粰瀹冦俥xit鍑芥暟璐熻矗涓嬮潰鎿嶄綔錛?/p>

  • 璋冪敤鐢盻onexit鍑芥暟鐨勮皟鐢ㄨ屾敞鍐岀殑浠諱綍鍑芥暟銆?
  • 涓烘墍鏈夊叏灞鐨勫拰闈欐佺殑C++綾誨璞¤皟鐢ㄦ瀽鏋勫嚱鏁?
  • 璋冪敤鎿嶄綔緋葷粺鐨凟xitProcess錛屽茍灝嗚繑鍥炲間紶閫掔粰浠栵紝鍏抽棴榪涚▼銆?

4.1.1 榪涚▼鐨勫疄渚嬪彞鏌?/p>

WinMain/wWinMain鍑芥暟鐨勭涓涓弬鏁拌〃紺鴻繘紼嬪姞杞界殑鍙墽琛屾枃浠剁殑鍩哄湴鍧/鍙ユ焺銆傚浜庡姞杞借祫婧愮殑璋冪敤閮借浣跨敤姝ゅ彞鏌勶紝姣斿HICON LoadIcon(HINSTANCE, PCTSTR)銆傛湁鐨勫嚱鏁伴渶瑕佷嬌鐢℉MODULE錛屽拰HINSTANCE鏄竴涓剰鎬濓紙鍖哄垎涓昏鍦ㄤ簬16浣嶇殑鎿嶄綔緋葷粺涓級銆?/p>

HMODULE GetModuleHandle(PCTSTR pszModele);

鍑芥暟浣滅敤錛岃繑鍥炲姞杞借皟鐢ㄨ繘紼嬩腑鐨勫彲鎵ц鏂囦歡鎴栬匘LL鐨勫熀鍦板潃/鍙ユ焺錛屽弬鏁版槸鍙墽琛屾枃浠舵垨鑰匘LL鐨勫悕縐般傜粰pszModule璧嬪糔ULL錛屽垯榪斿洖鐨勬槸榪涚▼涓彲鎵ц鏂囦歡鐨勫彞鏌勩?/p>

娉ㄦ剰錛氬鏋滄壘涓嶅埌鍒欒繑鍥濶ULL銆傚鏋滃湪DLL涓紶閫扤ULL錛岃繑鍥炵殑浠嶇劧鏄繘紼嬪姞杞界殑鍙墽琛屾枃浠剁殑鍙ユ焺銆?/p>

4.1.2 榪涚▼鐨勫墠涓涓疄渚嬪彞鏌?/p>

絎簩涓弬鏁伴兘浼犻扤ULL錛屾槸涓?6浣嶇郴緇熸墍淇濈暀鐨勩?/p>

4.1.3 榪涚▼鐨勫懡浠よ

娉ㄦ剰錛氫笉瑕佽瘯鍥句慨鏀瑰懡浠よ鍐呴儴鍐呭瓨鐨勫鹼紝瑕佷嬌鐢ㄤ慨鏀瑰厛鎷瘋礉鍑烘潵銆?/p>

PTSTR GetCommandLine(); // 榪斿洖鍛戒護(hù)琛屽瓧絎︿覆
 
PTSTR CommandLineToArgv(PTSTR pszCmdLine, int *pNumArgs); // 鎷嗗垎鍛戒護(hù)琛屽瓧絎︿覆鍑芥暟

Demo錛?/p>

int nNumargs;
PTSTR *ppArgv = CommandLineToArgv(GetCommandLine(), &nNumargs);
if ('x' == *ppArgv[1]) {
// TODO:
}

// 鎵嬪姩閲婃斁鍐呭瓨錛屼竴鑸笉闇瑕侀噴鏀撅紝緋葷粺浼?xì)杩浗E嬪叧闂椂鍊欒嚜鍔ㄩ噴鏀?/span>
HeapFree(GetProcessHeap, 0, ppArgv);


4.1.4 榪涚▼鐨勭幆澧冨彉閲?/p>

鐜鍧楁槸榪涚▼鍦板潃絀洪棿涓垎閰嶇殑鍐呭瓨鍧楁瘡涓幆澧冨潡閮藉寘鍚竴緇勫瓧絎︿覆,鏍煎紡濡備笅:

VarName1=VarVarlue1\0

VarName2=VarVarlue2\0

VarName3=VarVarlue3\0

鈥?.

VarNameX=VarVarlueX\0

\0

娉ㄦ剰錛?/p>

  • 鎺掑簭蹇呴』鎸夌収瀛楁瘝欏哄簭銆?
  • 鈥?鈥欏彿涓嶈兘鏄彉閲忓悕鐨勪竴閮ㄥ垎銆?
  • 絳夊彿宸﹀彸涓よ竟鐨勭┖鏍煎皢琚畻鍋氬悕縐版垨鑰呭箋?
  • 鏈鍚庡繀欏誨姞涓橽0鈥欒〃紺虹粨鏉熴?
  • 瀛愯繘紼嬪拰鐖惰繘紼嬩笉鍏辯敤鐜鍧楋紝淇敼涓嶄細(xì)褰卞搷鐖?瀛愯繘紼嬨?
DWORD GetEnvironmentVariable(PCTSTR pszName, PTSTR pszValue, DWORD cchValue);


pszName鎸囧彉閲忓悕錛宲szValue鎸囧悜鍙橀噺鍊肩殑緙撳瓨鍖猴紝cchValue緙撳瓨鍖虹殑澶у皬銆傛壘涓嶅埌鍙橀噺鍚嶆垨鑰呰緗殑闀垮害涓嶅瀛樻斁灝辮繑鍥?銆?

 

ExpandEnvironmentStrings(PCSTR pszSrc, PSTR pszDst, DWORD nSize);

鐢ㄦ潵鐢ㄧ幇瀹炲嚭鍙浛鎹㈢殑鐜鍙橀噺鐨勫瓧絎︿覆銆?/p>

BOOL SetEnvironmentVariable(PCTSTR pszName, PCTSTR pszValue);

璁劇疆鐜鍙橀噺鐨勫?濡傛灉涓嶅瓨鍦ㄥ垯鍒涘緩,濡傛灉瀛樺湪鍒欐浛鎹粬鐨勫箋?/p>

4.1.5 榪涚▼鐨勪翰緙樻?/p>

瀛愯繘紼嬬戶鎵跨埗榪涚▼鐨勪翰緙樻с傦紙鍏蜂綋浠涔堟剰鎬濇病鏄庣櫧錛?/p>

4.1.6 榪涚▼鐨勯敊璇ā寮?/p>

榪涚▼鍙互璁劇疆濡備綍澶勭悊涓浜涢敊璇?/p>

UINT SetErrorMode(UINT fuErrorMode);


鍚勪釜妯″紡鐢∣R榪炴帴


      鏍囧織                                                                                                               璇存槑

SEM_FAILCRITICALERRORS                                                                    緋葷粺涓嶆樉紺哄叧閿敊璇彞鏌勬秷鎭錛屽茍灝嗛敊璇繑鍥炵粰璋冪敤榪涚▼

SEM_NOGOFAULTERRORBOX                                                               緋葷粺涓嶆樉紺轟竴鑸繚鎶ゆ晠闅滄秷鎭銆傛湰鏍囧織鍙簲璇ョ敱閲囩敤寮傚父鎯呭喌澶勭悊紼嬪簭鏉ュ鐞嗕竴鑸繚鎶わ紙GP錛夋晠闅滅殑璋冨紡搴旂敤紼嬪紡鏉ヨ瀹?/p>

SEM_NOOPENFILEERRORBOX                                                               褰撶郴緇熸壘涓嶅埌鏂囦歡鏃訛紝瀹冧笉鏄劇ず娑堟伅妗嗐?/p>

SEM_NOALIGNMENTFAULTEXCEPT                                                    緋葷粺鑷姩鎺掗櫎鍐呭瓨娌℃湁瀵瑰叾鐨勬晠闅滐紝騫朵嬌搴旂敤紼嬪簭鐪嬩笉鍒拌繖浜涙晠闅溿傛湰鏍囧織瀵筙86澶勭悊鍣ㄤ笉璧蜂綔鐢ㄣ?/p>


瀛愯繘紼嬬戶鎵跨埗榪涚▼鐨勯敊璇ā寮忥紝濡傛灉涓嶆兂璁╁瓙榪涚▼緇ф壙鐖惰繘紼嬬殑閿欒妯″紡鐨勮瘽錛屽彲浠ュ啀璋冪敤CreateProcess鏃惰瀹欳REATE_DEFAULT_ERROR_MODE鏍囧織銆?

4.1.7 榪涚▼鐨勫綋鍓嶉┍鍔ㄥ櫒鍜岀洰褰?/p>

榛樿鎯呭喌涓嬩笉鎻愪緵鍏ㄨ礬寰勭殑璇濓紝緋葷粺灝變細(xì)鍦ㄥ綋鍓嶉┍鍔ㄥ櫒鍜岀洰褰曚腑鏌ユ壘鏂囦歡錛屾瘮濡侰reateFile錛屽洜涓洪┍鍔ㄥ櫒鍜岀洰褰曟槸姣忎釜榪涚▼鏉ョ淮鎶ょ殑錛屾墍浠ユ煇涓嚎紼嬫敼鍙樹簡鐩綍鍜岄┍鍔ㄥ櫒浼?xì)鏀瑰彉鏁翠釜杩浗E嬬殑鐩綍鍜岄┍鍔ㄥ櫒銆?/p>

涓嬮潰涓や釜鍑芥暟璇誨彇鍜岃緗細(xì)

DWORD GetCurrentDirectory(DWORD cchCurDir, PTSTR pszCurDir);

BOOL SetCurrentDirectory(PCTSTR pszCurDir);

4.1.8 榪涚▼鐨勫綋鍓嶇洰褰?/p>

椹卞姩鍣ㄧ幆澧冨潡鐨勬牸寮?

=C:=C:\Utility\Bin

紼嬪簭鏌ユ壘椹卞姩鍣ㄧ幆澧冨潡錛屽鏋滄病鏈夊垯鎸夐┍鍔ㄥ櫒鍚嶆煡鎵俱?/p>

瀛愯繘紼嬩笉鑳界戶鎵跨埗榪涚▼鐨勯┍鍔ㄥ櫒鍧楋紝濡傛灉鎯崇戶鎵垮繀欏誨啓鍒扮幆澧冨彉閲忎腑鍘匯傦紙濂藉儚鏄繖鏍鳳紝濡傛灉鏈変笉瀵硅楂樹漢鎸囩偣錛夈?/p>

DWORD GetFullPathName(PCTSTR pszFile, DWORD cchPath, PTSTR pszPath, PTSTR *ppszFilePart);

鑾峰彇椹卞姩鍣ㄧ殑褰撳墠鐩綍,姣斿:

TCHAR szCurDir[MAX_PATH];
DWORD GetFullPathName(TEXT("C:"), MAX_PATH, szCurDir, NULL);


4.1.9 緋葷粺鐗堟湰

DWORD GetVersion();姝ゅ嚱鏁板瓨鍦ㄩ珮鍦頒綅鐨勬販璁築UG錛屾墍浠ュ敖閲忎笉瑕佷嬌鐢ㄣ?/p>

BOOL GetVersion(POSVERSIONINFOEX pVersionInfomation);
typedef struct _OSVERSIONINFOEXA {
    DWORD dwOSVersionInfoSize;    // 鍦ㄨ皟鐢℅etVersionEx鍑芥暟涔嬪墠錛屽繀蹇呴』緗負(fù)sizeof(OSVERSIONINFOEX)
    DWORD dwMajorVersion;         // 涓葷郴緇熺殑涓昏鐗堟湰鍙?/span>
     DWORD dwMinorVersion;         // 涓葷郴緇熺殑嬈¤鐗堟湰鍙?/span>
     DWORD dwBuildNumber;          // 褰撳墠緋葷粺鐨勬瀯寤哄彿
     DWORD dwPlatformId;           // 璇嗗埆褰撳墠緋葷粺鐨勫鉤鍙般傚彲浠ヤ嬌VER_PLATFORM_WIN32(WIN32),VER_PLATFORM_WIN32_WINDOWS(WINDOWS 95/WINDOWS 98),VER_PLATFORM_WIN32_NT(WINDOWS NT/WINDOWS 2000)鎴朧ER_PLATFORM_WIN32_CEHH(WINDOWS CE)
    CHAR   szCSDVersion[ 128 ];     // Maintenance string for PSS usage 鏈煙鍖呭惈浜嗛檮鍔犳枃鏈紝鐢ㄤ簬鎻愪緵鍏充簬宸茬粡瀹夎鐨勬搷浣滅郴緇熺殑璇︾粏淇℃伅
     WORD   wServicePackMajor;       // 鏈鏂板畨瑁呯殑鏈嶅姟紼嬪簭鍖呯殑涓昏鐗堟湰鍙?/span>
     WORD   wServicePackMinor;       // 鏈鏂板畨瑁呯殑鏈嶅姟紼嬪簭鍖呯殑嬈¤鐗堟湰鍙?/span>
     WORD   wSuiteMask;              // 鐢ㄤ簬鏍囪瘑緋葷粺涓婂瓨鍦ㄩ偅涓▼搴忕粍錛圴ER_SUITE_SMALLBUSINESS,VER_SUITE_ENTERPRISE,VER_SUITE_BACKOFFICE,VER_SUITE_COMMUNICATIONS,VER_SUITE_TERMINAL,VER_SUITE_SMALLBUSINESS_RESTRICTED,VER_SUITE_EMBEDDEDNT鍜孷ER_SUITE_DATACENTER錛?/span>
     BYTE  wProductType;             // 鐢ㄤ簬鏍囪瘑瀹夎浜嗕笅闈㈢殑鍝釜鎿嶄綔緋葷粺錛歏ER_NT_WORKSTATION,VER_NT_SERVER鎴朧ER_NT_DOMAIN_CONTROLLER
    BYTE  wReserved;                // 鐣欎綔灝嗘潵浣跨敤
} OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;

榪欎釜鏄墿灞曠増鏈?/div>
 
4.2 CreateProcess鍑芥暟
緇堜簬鐪嬪埌姝i浜唦澶х瑧
BOOL CreateProcess(
    LPCSTR lpApplicationName,
    LPSTR lpCommandLine,
    LPSECURITY_ATTRIBUTES lpProcessAttributes,
    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    BOOL bInheritHandles,
    DWORD dwCreationFlags,
    LPVOID lpEnvironment,
    LPCSTR lpCurrentDirectory,
    LPSTARTUPINFOA lpStartupInfo,
    LPPROCESS_INFORMATION lpProcessInformation
    );

  1. 榪涚▼鍚姩鏃訛紝棣栧厛鍒涘緩涓涓繘紼嬪唴鏍稿璞★紝璇ュ唴鏍稿璞′笉鏄繘紼嬶紝鏄竴涓鐞嗚繘紼嬪瓨鍌ㄨ繘紼嬩俊鎭殑灝忓瀷鏁版嵁緇撴瀯銆傦紙璁℃暟涓?錛?
  2. 鍒涘緩涓涓櫄鎷熷湴鍧絀洪棿錛屽姞杞藉彲鎵ц鏂囦歡鍜孌LL銆?
  3. 涓鴻繘紼嬪垱寤轟釜涓葷嚎紼嬬殑鍐呮牳瀵硅薄錛屽拰榪涚▼鍐呮牳瀵硅薄涓鏍鳳紝鏄敤鏉ョ鐞嗗拰瀛樺偍綰跨▼淇℃伅鐨勫皬鍨嬫暟鎹粨鏋勩傦紙璁℃暟涓?錛?
  4. 璋冪敤C/C++榪愯鏈熷惎鍔ㄤ唬鐮侊紝涓葷嚎紼嬪紑濮嬭繍琛岋紝鏈緇堣皟鐢ㄥ惎鍔ㄥ嚱鏁幫紝鎴愬姛榪斿洖TRUE錛堟湭鑳芥紜姞杞紻LL涔熻繑鍥濼RUE錛屾墍浠ョ埗榪涚▼鏃犳硶鏌ョ湅錛夈?

4.2.1 pszApplicationName鍜宲szCommandLine

pszCommandLine鍙傛暟錛氱敤鏉ュ垱寤鴻繘紼嬬殑鍛戒護(hù)琛屽弬鏁般傛煡鐪嬬涓涓爣璁幫紝濡傛灉娌℃湁鈥?exe鈥濅細(xì)鑷姩娣誨姞鈥?exe鈥濅笂鍘匯傦紙濡傛灉pszApplicationName鍙傛暟NULL錛?/p>

  1. 鍖呭惈璋冪敤榪涚▼鐨勨?exe鈥濇枃浠剁殑鐩綍銆?
  2. 璋冪敤榪涚▼鐨勫綋鍓嶇洰褰曘?
  3. windows緋葷粺鐩綍
  4. windows鐩綍
  5. PATH鐜鍙橀噺涓垪鍑虹殑鐩綍銆?

濡傛灉pszApplicationName鍙傛暟涓嶄負(fù)NULL錛岀郴緇熷皢鍦ㄥ綋鍓嶇洰褰曚腑鏌ユ壘.exe鏂囦歡錛堜笉浼?xì)鑷姩娣诲姞鈥?exe鈥濓級錛屽鏋滄壘涓嶅埌灝嗗け璐ワ紝姝ゆ椂pszCommandLine浣滀負(fù)鍙傛暟浼犻掔粰鍙墽琛岀▼搴忕殑榪涚▼銆?/p>

4.2.2 psaProcess,psaThread鍜宐inHeritHandles

psaProcess,psaThread鏄繘紼嬪拰榪涚▼涓葷嚎紼嬪唴鏍稿璞$殑瀹夊叏灞炴с傞粯璁ゅ間負(fù)NULL銆?/p>

binHeritHandles璁劇疆涓篢RUE琛ㄧず鐖惰繘紼嬪湪鍒涘緩瀛愯繘紼嬪彲浠ョ戶鎵垮畨鍏ㄥ睘鎬ф爣蹇楅噷璁劇疆涓篢RUE鐨勪換浣曞彲緇ф壙鐨勫唴鏍稿璞°傚鏋滆緗負(fù)FALSE瀛愯繘紼嬪皢涓嶇戶鎵夸換浣曞唴鏍稿璞°?/p>

4.2.3 fdwCreate

鐢ㄤ簬鏍囪瘑鏍囧織錛屽畾涔夎鍒欏浣曞垱寤烘柊榪涚▼銆傛垜涓鑸啓榛樿鍊糔ULL銆傚叿浣撶殑澶浜嗭紝璇鋒煡鐪婱SDN鍚э紝涓嶆兂鍐欎簡銆?/p>

4.2.4 pvEnvironment

璁劇疆瀛愯繘紼嬩嬌鐢ㄧ殑鐜鍐呭瓨鍧楋紝涓鑸粯璁ゅ間負(fù)NULL錛岃〃紺哄瓙榪涚▼緇ф壙鐖惰繘紼嬬殑鐜鍧椼?/p>

PVOID GetEnvironmentString(); // 鑾峰彇褰撳墠鍐呭瓨鍧楃殑鍦板潃
BOOL FreeEnvironmentStrings(PTSTR pszEnvironmentBlock); // 涓嶇敤鐨勬椂鍊欒皟鐢ㄦ鍑芥暟閲婃斁鍐呭瓨鍧?/span>


4.2.5 pszCurDir

璁懼畾宸ヤ綔鐩綍鍜岄┍鍔ㄥ櫒鍙鳳紝濡傛灉涓篘ULL鍒欏拰搴旂敤紼嬪簭鐨勭洰褰曠浉鍚岋紝濡傛灉璁劇疆姣斿浠モ橽0鈥欑粨灝劇殑鍖呭惈椹卞姩鍣ㄥ悕鐨勮礬寰勩?/p>

4.2.6 psiStartInfo

typedef struct _STARTUPINFO {
    DWORD   cb;             //錛堜袱鑰呭吋鏈夛紝鎺у埗鍙板拰紿楀彛紼嬪簭錛?
    LPSTR   lpReserved;     // 錛堜袱鑰呭吋鏈夛級淇濈暀錛屽繀欏誨垵濮嬪寲涓篘ULL
    LPSTR   lpDesktop;      // 錛堜袱鑰呭吋鏈夛級鐢ㄤ簬鏍囪瘑鍚姩搴旂敤紼嬪簭鎵鍦ㄧ殑妗岄潰鐨勫悕瀛椼傚鏋滆妗岄潰瀛樺湪錛屾柊榪涚▼渚夸笌鎸囧畾鐨勬闈㈢浉鍏寵仈銆傚鏋滄闈笉瀛樺湪錛屼究鍒涘緩涓涓甫鏈夐粯璁ゅ睘鎬х殑妗岄潰錛屽茍浣跨敤涓烘柊榪涚▼鎸囧畾鐨勫悕瀛椼傚鏋渓pDesktop鏄疦ULL錛堣繖鏄渶甯歌鐨勬儏鍐碉級錛岄偅涔堣榪涚▼灝嗕笌褰撳墠妗岄潰鐩稿叧鑱斻?/span>
    LPSTR   lpTitle;        // 錛堟帶鍒跺彴錛夌敤浜庤瀹氭帶鍒跺彴紿楀彛鍚嶇О銆傚鏋渓pTitle鏄疦ULL錛屽垯鍙墽琛屾枃浠剁殑鍚嶅瓧灝嗙敤浣滅獥鍙e悕
    DWORD   dwX;            // x,y鍧愭爣錛屽彧鏈夊綋瀛愯繘紼嬬敤CW_USEDEFAULT浣滀負(fù)CreateWindows鐨剎鍙傛暟鏉ュ垱寤哄畠鐨勭涓涓噸鍙犵獥鍙f椂錛屾墠浣跨敤榪欎袱涓潗鏍囥傝嫢鏄垱寤烘帶鍒跺彴紿楀彛鐨勫簲鐢ㄧ▼搴忥紝榪欎簺鎴愬憳鐢ㄤ簬鎸囨槑鎺у埗鍙扮獥鍙g殑宸︿笂瑙掋?/span>
    DWORD   dwY;          
    DWORD   dwXSize;        //錛堜袱鑰呭吋鏈夛級璁懼畾紿楀彛瀹藉害鍜岄暱搴︼紝鍙湁瀛愯繘紼嬬敤WM_USEDEFAULT浣滀負(fù)CreateWIndows鐨刵Width鍙傛暟鏉ュ垱寤哄畠鐨勭涓涓噸鍙犵獥鍙f椂鎵嶆槸鐢ㄨ繖涓箋傛帶鍒跺彴灝辨槸鎺у埗鍙扮殑瀹藉拰闀?/span>
    DWORD   dwYSize;
    DWORD   dwXCountChars;  //錛堟帶鍒跺彴錛夌敤浜庤瀹氬瓙搴旂敤紼嬪簭鎺у埗鍙扮殑闀垮害鍜屽搴︼紙瀛楃琛ㄧず錛?/span>
    DWORD   dwYCountChars;
    DWORD   dwFillAttribute;// 錛堟帶鍒跺彴錛夌敤浜庤瀹氬瓙搴旂敤紼嬪簭鐨勬帶鍒跺彴鑳屽獎棰滆壊鍜屾枃鏈?/span>
    DWORD   dwFlags;        // 錛堜袱鑰呭吋鏈夛級鍙傝涓嬩竴孌?/span>
    WORD    wShowWindow;    // (紿楀彛)鐢ㄤ簬璁懼畾瀛愬簲鐢ㄧ▼搴忓垵嬈¤皟鐢⊿howWindow灝哠W_SHOWDEFAULT浣滀負(fù)nCmdShow鍙傛暟浼犻掓椂錛岃搴旂敤紼嬪簭鐨勭涓涓噸鍙犵獥鍙e簲璇ュ浣曞嚭鐜般傛湰鎴愬憳鍙互鏄氬父鐢ㄤ簬ShowWindow鍑芥暟鐨勪換浣曚竴涓猄W_*鏍囪瘑絎?/span>
    WORD    cbReserved2;    // 淇濈暀錛屽繀欏誨垵濮嬪寲涓?
    LPBYTE  lpReserved2;    // 淇濈暀錛屽繀欏誨垵濮嬪寲涓篘ULL
    HANDLE  hStdInput;      // (鎺у埗鍙?鐢ㄤ簬璁懼畾鎺у埗鍙拌緭鍏ュ拰杈撳嚭鐢ㄧ殑緙撳瓨鐨勫彞鏌勩傞粯璁よ緗甴StdInput鏄敭鐩樼紦瀛橈紝hStdOutput鍜宧StdError紿楀彛鐨勭紦瀛樸?/span>
    HANDLE  hStdOutput;     // 
    HANDLE  hStdError;
} STARTUPINFO, *LPSTARTUPINFO;


璁劇疆鏌愪簺鍊鹼紝澶ч儴鍒嗛渶瑕侀粯璁ゅ鹼紝蹇呴』鍒濆鍖栦負(fù)0閮姐?/p>

STARTUPINFO si = {sizeof(si)};

dwFlags鏍囧織錛岀敤浜庝慨鏀瑰浣曟潵鍒涘緩瀛愯繘紼嬨?/p>


鏍囧織


STARTF_USESIZE                                                                              浣跨敤dwXSize鍜宒wYSize鎴愬憳

STARTF_USESHOWWINDOW                                                         浣跨敤wShowWIndow鎴愬憳

STARTF_USEPOSITION                                                                    浣跨敤dwX鍜宒wY鎴愬憳

STARTF_USECOUNTCHARS                                                            浣跨敤dwXCountChars鍜宒wYCountChars鎴愬憳

STARTF_USEFILLATTRIBUTE                                                           浣跨敤dwFillAttribute鎴愬憳

STARTF_USESTDHANDLES                                                             浣跨敤hStdInput,hStdOutput鍜宧StdError鎴愬憳

STARTF_RUN_FULLSCREEN                                                            寮哄埗鍐峹86璁$畻鏈轟笂榪愯鐨勬帶鍒跺彴搴旂敤紼嬪簭浠ュ叏灞忓箷鏂瑰紡鍚姩榪愯

STARTF_FORCEONFEEDBACK                                                        鍏夋爣璁劇疆涓烘矙婕忥紝榪囦簡2縐掑鏋滆繘紼嬫病鍚姩GUI錛孋reateProcess紼嬪簭灝嗗厜鏍囪緗負(fù)綆ご錛?縐掑唴鏄劇ず涓涓獥鍙o紝鎴愬姛璋冪敤GetMessage鍒欏弽澶嶇澶達(dá)紝濡傛灉娌℃湁鎴愬姛錛岀瓑寰?縐?鍙樹負(fù)綆ご

STARTF_FORCEOFFFEEDBACK                                                                                      


4.2.7 ppiProcInfo

typedef struct _PROCESS_INFORMATION {
    HANDLE hProcess;
    HANDLE hThread;
    DWORD dwProcessId;
    DWORD dwThreadId;
} PROCESS_INFORMATION, *PPROCESS_INFORMATION, *LPPROCESS_INFORMATION;

榪斿洖鐨勫垎鍒槸錛屽瓙榪涚▼榪涚▼鍙ユ焺錛屽瓙榪涚▼涓富綰跨▼鐨勭嚎紼嬪彞鏌勶紝瀛愯繘紼婭D錛屽瓙榪涚▼涓富綰跨▼鐨処D銆?/p>

娉ㄦ剰錛?/p>

  1. hProcess鍜宧Thread琚祴鍊煎悗錛屽唴鏍稿璞$殑璁℃暟鍣ㄥ垎鍒+1銆?
  2. 緋葷粺涓烘瘡涓繘紼嬪拰綰跨▼鍒嗛厤鐨処D鍊奸兘鏄笉鍚岀殑錛屼絾鏄綋鏌愯繘紼嬮鍑哄悗錛屾柊榪涚▼寰堝彲鑳戒細(xì)浣跨敤閫鍑鴻繘紼嬬殑ID銆?/li>

 

4.3 緇堟榪涚▼鐨勮繍琛?/p>

4.3.1 涓葷嚎紼嬬殑榪涘叆鐐瑰嚱鏁拌繑鍥?/p>

鏈濂藉己鍔涙帹鑽愪嬌鐢ㄨ繖縐嶆柟寮忋?/p>

  1. 璋冪敤C++鏋愭瀯鍑芥暟銆?
  2. 閲婃斁鍫嗘爤鍐呭瓨銆?
  3. 灝嗚繘紼嬮鍑轟唬鐮侊紙榪涚▼鍐呮牳瀵硅薄涓淮鎶わ級璁劇疆涓鴻繘鍏ョ偣鍑芥暟榪斿洖鍊箋?
  4. 緋葷粺灝嗚繘紼嬪唴鏍稿璞$殑榪斿洖鍊煎噺鍘?銆?/li>

4.3.2 ExitProcess鍑芥暟

閬垮厤浣跨敤榪欎釜鏂規(guī)硶銆?/p>

VOID ExitProcess(UINT fuExitCode);

緇堟榪涚▼榪愯錛屽茍灝嗛鍑虹爜璁劇疆涓篺uExitCode銆?/p>

娉ㄦ剰錛?/p>

  1. 璋冪敤ExitProcess鍚庯紝鎵鏈夌殑浠g爜閮藉皢涓嶄細(xì)鎵ц錛屽叧闂繘紼嬨?
  2. 璋冪敤ExitProcess鍚庯紝涓嶄細(xì)閲婃斁C++鏋愭瀯鍑芥暟璧勬簮錛屾湁緋葷粺娓呯悊榪涚▼鏃跺欑洿鎺ラ噴鏀懼唴瀛樸?
  3. 榪涚▼鐨勪富綰跨▼鐩存帴return閫鍑哄悗錛屽惎鍔ㄥ嚱鏁頒腑涔熶細(xì)璋冪敤ExitProcess鍑芥暟錛岃繘紼嬬粓姝紝鍏朵粬綰跨▼涔熶細(xì)鍏抽棴銆?
  4. 榪涚▼鐨勪富綰跨▼璋冪敤_endThreadex鎴栬匛ndThread鍑芥暟鍏抽棴涓葷嚎紼嬪悗錛岃繘紼嬫病鏈夎鍏抽棴錛屽瓙綰跨▼緇х畫榪愯銆?/li>

 

4.3.3 TerminiateProcess鍑芥暟

鑳戒笉鐢ㄥ氨鍒敤銆?/p>

BOOL TerminiateProcess(HANDLE hProcess, UINT fuExitCode;)

鍏抽棴鎸囧畾涓篽Process鍙ユ焺鐨勮繘紼嬶紝鎺ㄥ嚭浠g爜涓篺uExitCode銆?/p>

娉ㄦ剰錛?/p>

  1. 鍏抽棴榪涚▼灝嗕涪澶辨墍鏈夐渶瑕佷繚瀛樺埌紜洏鐨勬暟鎹紝鍥犱負(fù)榪涚▼鍏抽棴鏃跺欐渶鍚庝細(xì)鑷繁閲婃斁鍐呭瓨璧勬簮錛屽叧闂唴鏍稿璞$殑鍙ユ焺鍊鹼紝鎵浠ヤ笉浼?xì)閫犳垚鍐呭瓨娉勯湶銆?
  2. 姝ゅ嚱鏁版槸涓紓姝ュ嚱鏁幫紝瀹冭繑鍥炵殑鏃跺欐棤娉曠煡閬擄紝闇瑕佸叧闂殑榪涚▼鏄惁宸茬粡琚己鍒跺叧闂簡銆?/li>

4.3.4 榪涚▼緇堟榪愯鏃跺嚭鐜扮殑鎯呭喌

  1. 榪涚▼涓墿浣欑殑鎵鏈夌嚎紼嬪叏閮ㄧ粓姝㈣繍琛屻?
  2. 閲婃斁璇ヨ繘紼嬪紩鐢ㄧ殑GDI鍜岀敤鎴峰璞★紝鍐呮牳瀵硅薄琚叧闂紙鍒殑榪涚▼鏈夊紩鐢ㄥ垯璁℃暟鍣ㄥ噺1錛屽鏋滄病鏈夊紩鐢ㄥ垯鍏抽棴鍐呮牳瀵硅薄錛夈?
  3. 鎺ㄥ嚭浠g爜灝嗕粠STILL_ACTIVE錛堝悗闈㈢珷鑺傜嚎紼嬪皢浠嬬粛璇ョ粨鏋勶級鏀逛負(fù)浼犻掔粰ExitProcess鍜孴erminiateProcess浠g爜銆?
  4. 鍐呮牳瀵硅薄鐘舵佸彉涓烘敹鍒伴氱煡鐘舵侊紙綰跨▼涓粙緇嶏級錛屽叾浠栫嚎紼嬫寕璧鳳紝鐭ラ亾榪涚▼緇堟銆?
  5. 榪涚▼鍐呮牳瀵硅薄璁℃暟鍑忓幓1錛屾垨鑰呭叧闂?/li>

娉ㄦ剰錛?/p>

榪涚▼鍐呮牳瀵硅薄鐨勫鍛藉彲鑳借繙榪滃ぇ浜庤繘紼嬫湰韜紝鐖惰繘紼嬩繚鐣欏瓙榪涚▼鍐呮牳瀵硅薄鍙互鏌ョ湅瀹冪殑鎺ㄥ嚭浠g爜璋冪敤涓嬮潰鍑芥暟錛?/p>

BOOL GetExitCodeProcess(HANDLE hProcess, PDWORD pdwExitCode);


鍙互璋冪敤榪欎釜鍑芥暟鏉ュ垽鏂瓙榪涚▼鏄惁鍏抽棴,濡傛灉瀛愯繘紼嬫病鏈夊叧闂?瀹冪殑STILL_ACTIVE鏍囪瘑絎﹀畾涔変負(fù)0x103銆備絾鏄繖涔堜綔鏁堢巼涓嶆槸寰堥珮銆?/p>

 

4.4 瀛愯繘紼?/p>

娌′粈涔堝ソ璇寸殑錛屽墠闈㈢殑閮借浜嗭紝鐢–loseHandle鍏抽棴瀛愯繘紼嬪拰瀛愯繘紼嬩腑涓葷嚎紼嬬殑鍙ユ焺鍊兼潵鍒囨柇鐖惰繘紼嬪拰瀛愯繘紼嬬殑鎵鏈夎仈緋匯?/p>

 

4.5 姣忓眬緋葷粺涓繍琛岀殑榪涚▼

鍒╃敤ToolHelp鍑芥暟鏃忔潵寮鍙戠鐞嗘搷浣滅郴緇熶笂鐨勮繘紼嬨傛墦綆楄嚜宸變篃鍐欎釜璇曡瘯銆?/p>

 

鏈枃绔犵殑鍐呭鏄湰浜哄涔?fàn)Windows鏍稿績緙栫▼絎洓绔犲悗鐨勬葷粨錛屾湁閿欒璇峰ぇ瀹剁籂姝o紝杞澆娉ㄦ槑鍑哄:

http://www.cnblogs.com/xi52qian/



xi52qian 2011-03-04 16:45 鍙戣〃璇勮
]]>C++ Primer 絎?0绔?鎬葷粨http://m.shnenglu.com/xi52qian/archive/2011/03/03/141023.htmlxi52qianxi52qianThu, 03 Mar 2011 00:37:00 GMThttp://m.shnenglu.com/xi52qian/archive/2011/03/03/141023.htmlhttp://m.shnenglu.com/xi52qian/comments/141023.htmlhttp://m.shnenglu.com/xi52qian/archive/2011/03/03/141023.html#Feedback0http://m.shnenglu.com/xi52qian/comments/commentRss/141023.htmlhttp://m.shnenglu.com/xi52qian/services/trackbacks/141023.html澶存枃浠?<iostream>
涓. 瀵圭粓绔殑鎿嶄綔
鐩稿叧澶存枃浠?include <iostream>
1. 杈撳叆istream
2. 杈撳嚭ostream
3. iostream緇ф壙istream鍜宱stream 鎵浠ュ畠鍏鋒湁杈撳叆杈撳嚭鍔熻兘銆?
涓轟簡鏂逛究榪欎釜搴撳畾涔変簡涓嬪垪涓変釜鏍囧噯嫻佸璞★細(xì)
1. cin  浠h〃鏍囧噯杈撳叆istream綾誨璞′竴鑸湴cin浣挎垜浠兘澶熶粠鐢ㄦ埛緇堢璇誨叆鏁版嵁銆?
2. cout 浠h〃鏍囧噯杈撳嚭ostream綾誨璞′竴鑸湴cout浣挎垜浠兘澶熷悜鐢ㄦ埛緇堢鍐欐暟鎹?
3. cerr 浠h〃鏍囧噯閿欒ostream綾誨璞′竴鑸湴cerr鏄鍑虹▼搴忛敊璇秷鎭殑鍦版柟銆?
鍙﹀,杈撳嚭涓昏鐢遍噸杞界殑宸︾Щ鎿嶄綔絎?lt;< 鏉ュ畬鎴愮被浼煎湴杈撳叆涓昏鐢遍噸杞界殑鍙崇Щ鎿嶄綔絎?gt;>鏉ュ畬鎴愩?
Demo1錛?

#include <iostream>
#include <string>
int main() {
    string in_string;
    // 鍚戠敤鎴風(fēng)粓绔啓瀛楃涓?/span>
    std::cout << "Please enter your name: ";
    // 鎶婄敤鎴瘋緭鍏ョ殑璇誨彇鍒?in_string 涓?/span>
    std::cin >> in_string;
    if ( in_string.empty() )
    // 浜х敓涓涓敊璇秷鎭緭鍑哄埌鐢ㄦ埛緇堢
    std::cerr << "error: input string is empty!\n";
    else std::cout << "hello, " << in_string << "!\n";
}

浜? 瀵規(guī)枃浠剁殑鎿嶄綔
鐩稿叧澶?include <fstream>
1. ifstream 浠巌stream 媧劇敓鎶婁竴涓枃浠剁粦鍒扮▼搴忎笂浠庢枃浠惰鍙栨暟鎹敤鏉ヨ緭鍏ャ?
2. ofstream 浠巓stream 媧劇敓鎶婁竴涓枃浠剁粦鍒扮▼搴忎笂鐢ㄦ潵鍚戞枃浠跺啓鍏ユ暟鎹?
3. fstream 浠巌ostream 媧劇敓鎶婁竴涓枃浠剁粦鍒扮▼搴忎笂鐢ㄦ潵杈撳叆鍜岃緭鍑恒?
娉細(xì)鐢變簬鍦╢stream 澶存枃浠朵腑涔熷寘鍚簡iostream 澶存枃浠舵墍浠ユ垜浠笉闇瑕佸悓鏃跺寘鍚繖涓や釜鏂?
浠禖++瀵逛簬鏂囦歡鐨勮緭鍏ヨ緭鍑轟篃鏀寔鍚屾牱鐨勮緭鍏ュ拰杈撳嚭鎿嶄綔絎︺?
Demo2錛?

#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
int main()
{
    string ifile;
    cout << "Please enter file to sort: ";
    cin >> ifile;
    // 鏋勯犱竴涓?ifstream 杈撳叆鏂囦歡瀵硅薄
    ifstream infile( ifile.c_str() );
    if( ! infile ) {
        cerr << "error: unable to open input file: " << ifile << endl;
        return -1;
    }
    string ofile = ifile + ".sort";
    // 鏋勯犱竴涓?ofstream 杈撳嚭鏂囦歡瀵硅薄
    ofstream outfile( ofile.c_str() );
    if( !outfile ) {
      cerr << "error: unable to open output file: " << ofile << endl;
      return -2;
    }
    string buffer;
    vector<string> text;
    int cnt = 1;
    while ( infile >> buffer ) {
        text.push_back( buffer );
        cout << buffer << ( cnt++ % 8 ? " " : "\n" );
    }
    sort( text.begin(), text.end() );
    // ok: 鎶婃帓搴忓悗鐨勮瘝鎵撳嵃鍒?outfile
    vector<string>::iterator iter = text.begin();
    for ( cnt = 1; iter != text.end(); ++iter, ++cnt )
        outfile << *iter << (cnt%8 ? " " : "\n" );
    return 0;
}

涓? 瀵瑰瓧絎︽祦鎿嶄綔
鐩稿叧鐨勫ご鏂囦歡#include <sstream>
1 istringstream 浠巌stream 媧劇敓浠庝竴涓瓧絎︿覆涓鍙栨暟鎹?
2 ostringstream 浠巓stream 媧劇敓鍐欏叆鍒頒竴涓瓧絎︿覆涓?
3 stringstream 浠巌ostream 媧劇敓浠庡瓧絎︿覆涓鍙栨垨鑰呭啓鍏ュ埌瀛楃涓蹭腑銆?
Demo3錛?

#include <sstream>
string program_name( "our_program" );
string version( "0.01" );
// ...
string mumble( int *array, int size )
{
    if ( ! array ) {
        ostringstream out_message;
        out_message << "error: "
        << program_name << "--" << version
        << ": " << __FILE__ << ": " << __LINE__
        <<" -- ptr is set to 0; "
        << " must address some array.\n";
        // 榪斿洖搴曞眰 string 瀵硅薄
        return out_message.str();
}

鍥? wchar_t鍨?
鏀寔wchar_t綾誨瀷鐨勬祦璇誨啓鎿嶄綔
wcin wcout wcerr wiostream 絳夌瓑....

20.1 杈撳嚭鎿嶄綔絎?lt;<
1. 鏀寔鎵鏈夌殑鍐呯疆鏁版嵁綾誨瀷 鍖呮嫭string 錛宑onst char* 鍜宑omplex銆備互鍙?qiáng)鍑芥暟鐨勮皟鐢ㄣ?
2. endl絳変環(huán)浜庤緭鍑烘崲琛屾搷浣滅錛岀劧鍚庡啀鍒鋒柊緙撳瓨鍖恒俢out << '\n' << flush;
3. <<鍙互榪炴帴浣跨敤,鍥犱負(fù)operator<<鐨勮繑鍥炲兼槸ostream&銆?
4. cout << p << &i << endl;浼?xì)杈撳嚭鎸囬拡鐨勫湴鍧錛坧鏄痠nt *,i鏄痠nt錛夈傚鏋滄槸const char * pcStr涓嶄細(xì)杈撳嚭鎸囬拡鍦板潃鍊鹼紝
杈撳嚭鐨勬槸瀛楃涓層傝漿鎹負(fù)cout << static_cast<void *>(const_cast<char *>(pcStr));
5. <<榪愮畻絎︾殑浼樺厛綰ч珮浜?:鎵浠ュ拰?:浣跨敤鏃舵敞鎰忓姞鎷彿銆?
6. ostream_iterator鍜宑out鐨勪嬌鐢ㄣ?
Demo4錛?

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
string pooh_pals[] = {
"Tigger", "Piglet", "Eeyore", "Rabbit"
};
int main()
{
    vector<string> ppals( pooh_pals, pooh_pals+4 );
    vector<string>::iterator iter = ppals.begin();
    vector<string>::iterator iter_end = ppals.end();
    cout << "These are Pooh's pals: ";
    // 鎶婃瘡涓厓绱犳嫹璐濆埌 cout ...
    ostream_iterator< string > output( cout, " " );
    copy( iter, iter_end, output );
    cout << endl;
}

7. cout << 閬囧埌鈥榎0鈥欎細(xì)瀹氬埗杈撳嚭銆?

20.2 杈撳叆鎿嶄綔絎?gt;>
1. while(cin >> 鍙橀噺)鐨勬椂鍊欐湁涓ょ鎯呭喌浼?xì)璁╁惊鐜仠姝㈠Q坒alse錛夛細(xì)
(1) 璇誨埌鏂囦歡緇撴潫鍦ㄨ繖縐嶆儏鍐典笅鎴戜滑宸茬粡姝g‘鍦拌瀹屾枃浠朵腑鎵鏈夌殑鍊箋?
(2) 閬囧埌涓涓棤鏁堢殑鍊兼瘮濡?.14159灝忔暟鐐規(guī)槸闈炴硶鐨?e-1瀛楃鏂囧瓧e鏄潪娉曠殑鎴栬呬竴鑸殑浠繪剰瀛楃涓叉枃瀛楀湪璇誨叆涓涓棤鏁堝肩殑
鎯呭喌涓媔stream瀵硅薄琚斁緗埌涓縐嶉敊璇殑鐘舵佷腑騫朵笖瀵逛簬鍊肩殑鎵鏈夎鍏ュ姩浣滈兘灝嗗仠姝€?
2. 棰勫畾涔夌殑杈撳叆鎿嶄綔絎﹀彲浠ユ帴鍙椾換浣曠殑鍐呯疆鏁版嵁綾誨瀷鍖呮嫭C 椋庢牸瀛楃鐢變互鍙?qiáng)鏍囧噯搴搒tring鍜宑omplex 綾葷被鍨嬨?
3. 緙虹渷鎯呭喌涓嬭緭鍏ユ搷浣滅涓㈠純浠諱綍涓棿絀虹櫧絀烘牸鍒惰〃絎︽崲琛岀璧扮焊浠ュ強(qiáng)鍥炶濺銆?
Demo5:

#include <iostream>
#include <string>
int main()
{
    int item_number;
    string item_name;
    double item_price;
    cout << "Please enter the item_number, item_name, and price: " << endl;
    cin >> item_number;
    cin >> item_name;
    cin >> item_price;
    cout << "The values entered are: item# "
        << item_number << " "
        << item_name << " @$"
        << item_price << endl;
}

4. 濡傛灉甯屾湜璇誨叆絀虹櫧絎﹀彿鍙互鍒╃敤cin.get()鏂規(guī)硶涓涓釜璇誨叆錛屾垨鑰呰緗畇kipws鍜宯oskipws閫夐」錛堝悗闈粙緇嶏級銆?
5. isream_iterator鍜宑in鍏寵仈浣跨敤銆?
Demo6:
#include <algorithm>
#include <string>
#include <vector>
#include <iostream>
int main()
{
    istream_iterator< string > in( cin ), eos ;
    vector< string > text ;
    // 浠庢爣鍑嗚緭鍏ュ悜 text 鎷瘋礉鍊?/span>
    copy( in , eos , back_inserter( text ) ) ;
    sort( text.begin() , text.end() ) ;
    // 鍒犻櫎鎵鏈夐噸澶嶇殑鍊?/span>
    vector< string >::iterator it ;
    it = unique( text.begin() , text.end() ) ;
    text.erase( it , text.end() ) ;
    // 鏄劇ず緇撴灉 vector
    int line_cnt = 1 ;
    for ( vector< string >::iterator iter = text.begin();
    iter != text.end() ; ++iter , ++line_cnt )
    cout << *iter
        << ( line_cnt % 9 ? " " : "\n" ) ;
    cout << endl;
}

20.2.1 瀛楃涓茶緭鍏?
1. setw鍑芥暟錛氶槻姝㈣鍏ュ瓧絎︿覆鐩婂錛坈har[4],杈撳叆4涓互涓婂瓧鑺傦級錛寃hile ( cin >> setw( bufSize ) >> buf )
榪欓噷bufSize鏄瓧絎︽暟緇刡uf鐨勯暱搴etw()鎶婇暱搴︾瓑浜庢垨澶т簬bufSize 鐨勫瓧絎︿覆鍒嗘垚鏈澶ч暱搴︿負(fù)bufSize - 1鐨勪袱涓?
鎴栧涓瓧絎︿覆錛屽湪姣忎釜鏂頒覆鐨勬湯灝炬斁涓涓┖瀛楃涓轟簡浣跨敤setw()瑕佹眰紼嬪簭鍖呭惈iomanip澶存枃浠?include <iomanip>銆?
2. 鐢╯tring娌℃湁char *閭d簺闀垮害鍜屽唴瀛樻孩鍑洪棶棰橈紝鏇村鏄撲嬌鐢ㄣ?/p>

20.3 鍏朵粬杈撳叆杈撳嚭鎿嶄綔絎?
涓. istream鐨勬垚鍛榞et()涓嬈¤鍏ヤ竴涓瓧鑺傘傚睘浜巌stream
1. get(char& ch)浠庤緭鍏ユ祦涓彁鍙栦竴涓瓧絎﹀寘鎷┖鐧藉瓧絎﹀茍灝嗗畠瀛樺偍鍦╟h涓畠榪斿洖琚簲鐢ㄧ殑istream瀵硅薄銆?
涓庝箣瀵瑰簲鐨勬槸ostream鐨刾ut()鏂規(guī)硶錛屾瘡嬈¤鍏ヤ竴涓瓧鑺傦紝鐒跺悗榪斿洖ostream銆?
2. get()鐨勭浜屼釜鐗堟湰涔熶粠杈撳叆嫻佽鍏ヤ竴涓瓧絎﹀尯鍒槸瀹冭繑鍥炶瀛楃鍊艱屼笉鏄搴旂敤鐨刬stream 瀵硅薄瀹冪殑榪斿洖綾誨瀷
鏄痠nt 鑰屼笉鏄痗har 鍥犱負(fù)瀹冧篃榪斿洖鏂囦歡灝劇殑鏍囧織end-of-file璇ユ爣蹇楅氬父鐢?1 鏉ヨ〃紺轟互渚夸笌瀛楃闆嗗尯鍒嗗紑涓烘祴璇曡繑鍥?
鍊兼槸鍚︿負(fù)鏂囦歡灝炬垜浠皢瀹冧笌iostream 澶存枃浠朵腑瀹氫箟鐨勫父閲廍OF 鍋氭瘮杈冦?
Demo7:

#include <iostream>
int main()
{
    int ch;
    // 鎴栦嬌鐢?
    // while (( ch = cin.get() ) && ch != EOF)
    while (( ch = cin.get()) != EOF)
    cout.put(ch);
    return 0;
}

3. get(char *sink, streamsize size, char delimiter='\n')
(1) sink 浠h〃涓涓瓧絎︽暟緇勭敤鏉ュ瓨鏀捐璇誨彇鍒扮殑瀛楃銆?
(2) size 浠h〃鍙互浠巌stream 涓鍏ョ殑瀛楃鐨勬渶澶ф暟鐩?
(3) delimiter 琛ㄧず濡傛灉閬囧埌瀹冨氨緇撴潫璇誨彇瀛楃鐨勫姩浣渄elimiter 瀛楃鏈韓涓嶄細(xì)琚鍏ヨ屾槸鐣欏湪istream 涓綔涓篿stream 鐨?
涓嬩竴涓瓧絎︿竴縐嶅父瑙佺殑閿欒鏄湪鎵ц絎簩涓猤et()涔嬪墠蹇樹簡鍘繪帀delimiter銆?

浜? ignore( streamsize length = 1, int delim = traits::eof )鍑芥暟: 灞炰簬istream
鎴戜滑鐢╥stream 鎴愬憳鍑芥暟ignore()鏉ュ幓鎺塪elimiter
緙虹渷鎯呭喌涓嬫崲琛岀琚敤浣渄elimiter銆?/p>

涓? gcount()鍑芥暟: 灞炰簬istream
瀹冭繑鍥炵敱鏈鍚庣殑get()鎴杇etline()璋冪敤瀹為檯鎻愬彇鐨勫瓧絎︽暟銆?
Demo8:

#include <iostream>
int main()
{
    const int max_line = 1024;
    char line[ max_line ];
    while ( cin.get( line, max_line ))
    {
        // 鏈澶ц鍙栨暟閲?max_line - 1, 涔熷彲浠ヤ負(fù) null
        int get_count = cin.gcount();
        cout << "characters actually read: "
        << get_count << endl;
        // 澶勭悊姣忎竴琛?/span>
        // 濡傛灉閬囧埌鎹㈣絎?/span>
        // 鍦ㄨ涓嬩竴琛屼箣鍓嶅幓鎺夊畠
        if ( get_count & max_line-1 )
            cin.ignore();
     }
}

鍥? getline(char *sink, streamsize size, char delimiter='\n')灞炰簬istream

浜? write( const char *sink, streamsize length )灞炰簬ostream
鎻愪緵浜嗗彟澶栦竴縐嶆柟娉曞彲浠ヨ緭鍑哄瓧絎︽暟緇勨濆畠涓嶆槸杈撳嚭鐩村埌緇堟絀哄瓧絎︿負(fù)姝㈢殑鎵鏈夊瓧絎︹滆屾槸杈撳嚭鏌愪釜闀垮害鐨勫瓧絎﹀簭鍒楀寘鎷唴鍚殑
絀哄瓧絎﹀畠鐨勫嚱鏁般俵ength 鎸囧畾瑕佹樉紺虹殑瀛楃涓暟write()榪斿洖褰撳墠琚皟鐢ㄧ殑ostream 綾誨璞°?/p>

鍏? read( char* addr, streamsize size )灞炰簬istream
read()浠庤緭鍏ユ祦涓彁鍙杝ize 涓繛緇殑瀛楄妭騫跺皢鍏舵斁鍦ㄥ湴鍧浠巃ddr 寮濮嬬殑鍐呭瓨涓璯count()榪斿洖鐢辨渶鍚庝竴涓猺ead()璋冪敤鎻愬彇鐨勫瓧
鑺傛暟鑰宺ead()榪斿洖褰撳墠琚皟鐢ㄧ殑istream 綾誨璞°?
Demo9:

#include <iostream>
int main()
{
    const lineSize = 1024;
    int lcnt = 0; // 璇誨叆澶氬皯琛?/span>
    int max = -1; // 鏈闀胯鐨勯暱搴?/span>
    char inBuf[ lineSize ];
    // 璇誨彇 1024 涓瓧絎︽垨鑰呴亣鍒版崲琛岀
    while (cin.getline( inBuf, lineSize ))
    {
         // 瀹為檯璇誨叆澶氬皯瀛楃
         int readin = cin.gcount();
         // 緇熻: 琛屾暟鏈闀胯
         ++lcnt;
         if ( readin > max )
             max = readin;
         cout << "Line #" << lcnt
             << "\tChars read: " << readin << endl;
         cout.write( inBuf, readin).put('\n').put('\n');
     }
     cout << "Total lines read: " << lcnt << endl;
     cout << "Longest line read: " << max << endl;
}

涓? getline( istream &is, string str, char delimiter );                         
榪欎釜getline()瀹炰緥鐨勮涓哄涓嬭鍏ユ渶澶ф暟鐩負(fù)str::max_size-1 涓瓧絎﹀鏋滆緭鍏ュ簭鍒楄秴鍑鴻繖涓檺鍒跺垯璇繪搷浣滃け璐?
騫朵笖istream 瀵硅薄琚緗負(fù)閿欒鐘舵佸惁鍒欏綋璇誨埌delimiter 瀹冭浠巌stream 涓涪寮冧絾娌℃湁琚彃鍏ュ埌string 涓垨閬?
鍒版枃浠剁粨鏉熺鏃惰緭鍏ョ粨鏉熴?/p>

鍏? putback( char c ); 灝嗗瓧絎︽斁鍥?iostream銆?/p>

涔? unget();寰鍥為噸緗笅涓涓?istream 欏廣?/p>

鍗? peek(); 榪斿洖涓嬩竴涓瓧絎︽垨 EOF錛屼絾涓嶈鎻愬彇鍑烘潵銆?
Demo10:

char ch, next, lookahead;
while ( cin.get( ch ))
{
    switch (ch) {
    case '/':
     // 鏄敞閲婅鍚? 鐢?peek() 鐪嬩竴鐪?
     // 鏄殑? ignore() 浣欎笅鐨勮
     next = cin.peek();
     if ( next == '/' )
         cin.ignore( lineSize, '\n' );
     break;
     case '>':
     // 鏌ユ壘 >>=
     next = cin.peek();
     if ( next == '>' ) {
         lookahead = cin.get();
         next = cin.peek();
     if ( next != '=' )
     cin.putback( lookahead );
}

20.4 閲嶈澆杈撳嚭鎿嶄綔絎?lt;<
杈撳嚭鎿嶄綔絎︽槸涓涓弻鐩搷浣滅瀹冭繑鍥炰竴涓猳stream 寮曠敤閲嶈澆瀹氫箟鐨勯氱敤妗嗘灦濡備笅
// 閲嶈澆 output 鎿嶄綔絎︾殑閫氱敤妗嗘灦
ostream&
operator <<( ostream& os, const ClassType &object )
{
// 鍑嗗瀵硅薄鐨勭壒瀹氶昏緫
// 鎴愬憳鐨勫疄闄呰緭鍑?
os << // ...
// 榪斿洖 ostream 瀵硅薄
return os;
}
娉細(xì)鍥犱負(fù)絎竴涓疄鍙傛槸涓涓猳stream 寮曠敤鎵浠ヨ緭鍑烘搷浣滅蹇呴』瀹氫箟涓洪潪鎴愬憳鍑芥暟錛屽綋杈撳嚭鎿嶄綔絎﹁姹傝闂潪鍏湁鎴愬憳
鏃跺繀欏誨皢瀹冨0鏄庝負(fù)璇ョ被鐨勫弸鍏冦?/p>

20.5 閲嶈澆杈撳叆鎿嶄綔絎?gt;>
1 鐢變簬涓嶆紜殑鏍煎紡鑰屽鑷村け璐stream 搴旇鎶婄姸鎬佹爣璁頒負(fù)fail銆俿etstate( ios_base::failbit )銆?
2 瀵逛簬閿欒鐘舵佷腑鐨刬ostream 鎻掑叆鍜屾彁鍙栨搷浣滄病鏈夊獎鍝嶃?
Demo11:

#include <iostream>
#include "WordCount.h"
/* 蹇呴』淇敼 WordCount, 鎸囧畾杈撳叆鎿嶄綔絎︿負(fù)鍙嬪厓
class WordCount {
    friend ostream& operator<<( ostream&, const WordCount& );
    friend istream& operator>>( istream&, WordCount& );
*/
istream&
operator>>( istream &is, WordCount &wd )
{
/* WordCount 瀵硅薄琚鍏ョ殑鏍煎紡:
 * <2> string
 * <7,3> <12,36>
 */
int ch;
/* 璇誨叆灝忎簬絎﹀彿, 濡傛灉涓嶅瓨鍦?
 * 鍒欒緗?istream 涓哄け璐ョ姸鎬佸茍閫鍑?
 */
if ((ch = is.get()) != '<' )
{
    is.setstate( ios_base::failbit );
    return is;
}
 // 璇誨叆澶氬皯涓?/span>
 int occurs;
 is >> occurs;
 // 鍙?>; 涓嶆鏌ラ敊璇?/span>
 while ( is && (ch = is.get()) != '>' );
 is >> wd._word;
 // 璇誨叆浣嶇疆
 // 姣忎釜浣嶇疆鐨勬牸寮? < line, col >
 for ( int ix = 0; ix < occurs; ++ix )
 {
  int line, col;
  // 鎻愬彇鍊?/span>
  while (is && (ch = is.get())!= '<' );
  is >> line;
  while (is && (ch = is.get())!= ',' );
  is >> col;
  while (is && (ch = is.get())!= '>' );
  wd.occurList.push_back( Location( line, col ));
 }
 return is;
}

20.6 鏂囦歡杈撳叆鍜岃緭鍑?
鍖呭惈澶存枃浠?include <fstream>
1. ofstream鐨勬瀯閫犲嚱鏁拌鍒跺畾鎵撳紑妯″紡
杈撳嚭妯″紡ios_base::out 鎴栭檮鍔犳ā寮廼os_base::app 絳夌瓑銆傚湪緙虹渷鎯呭喌涓媜stream鏂囦歡浠ヨ緭鍑烘ā寮忔墦寮銆?
娉細(xì)濡傛灉鍦ㄨ緭鍑烘ā寮忎笅鎵撳紑宸茬粡瀛樺湪鐨勬枃浠跺垯鎵鏈夊瓨鍌ㄥ湪璇ユ枃浠朵腑鐨勬暟鎹兘灝嗚涓㈠純濡傛灉鎴戜滑甯屾湜澧炲姞鑰屼笉鏄浛鎹㈢幇
鏈夋枃浠朵腑鐨勬暟鎹垯搴旇浠ラ檮鍔犳ā寮忔墦寮鏂囦歡浜庢槸鏂板啓鍒版枃浠朵腑鐨勬暟鎹皢娣誨姞鍒版枃浠跺熬閮ㄥ湪榪欎袱縐嶆ā寮忎笅濡傛灉鏂囦歡涓嶅瓨
鍦ㄧ▼搴忛兘浼?xì)鍒涘晦Z竴涓柊鏂囦歡銆?
2. 鍒ゆ柇鏄惁鎵撳紑if (!outFile /*ofstream瀵硅薄*/)
3. 鍥犱負(fù)ofstream媧劇敓浜巓stream錛屾墍浠fstream鎷ユ湁ostream鐨勬搷浣滐紝姣斿put()絳夌瓑銆?
4. 鑷畾涔?lt;<鎿嶄綔杈撳叆鍒皁fstream涓?
5. 鐢╥fstream璇誨叆涓涓枃浠訛紝媧劇敓浜巌stream錛屾墍鏈夋嫢鏈塱stream鐨勬搷浣滐紝姣斿get()絳夌瓑銆?
6. close()鍑芥暟鏂紑鍜屾枃浠剁殑鍏寵仈銆?
7. fstream媧劇敓浜巌ostream錛屽畠鍏鋒湁瀵規(guī)枃浠剁殑璇誨啓鎿嶄綔銆?
8. seekg鍜宻eekp鏍囪褰撳墠浣嶇疆錛実鏄湪璇繪枃浠朵腑浣跨敤錛宲鍐嶅啓鏂囦歡涓嬌鐢ㄣ?
娉細(xì)絎簩涓弬鏁版爣紺哄畾浣嶆爣璁?
(1) ios_base::beg 鏂囦歡鐨勫紑濮?
(2) ios_base::cur 鏂囦歡鐨勫綋鍓嶄綅緗?
(3) ios_base::end 鏂囦歡鐨勭粨灝?
9. tellg()鎴杢ellp()榪斿洖褰撳墠浣嶇疆錛実鍜宲鎰忎箟鍚宻eekg鍜宻eekp銆傝繑鍥炲兼槸ios_base::pos_type銆?
10. clear()鍑芥暟:娓呴櫎鐘舵併?/p>

20.7 鏉′歡鐘舵?
涓. 鏉′歡鐘舵?
1 濡傛灉涓涓祦閬囧埌鏂囦歡緇撴潫絎﹀垯eof()榪斿洖true銆?
2 濡傛灉璇曞浘鍋氫竴涓棤鏁堢殑鎿嶄綔姣斿seeking 閲嶅畾浣嶆搷浣滆秴鍑轟簡鏂囦歡灝懼垯bad()榪斿洖true錛屼竴鑸湴榪欒〃紺鴻嫻佺敱浜庢煇縐?
鏈畾涔夌殑鏂瑰紡鑰岃鐮村潖浜嗐?
3 濡傛灉鎿嶄綔涓嶆垚鍔熸瘮濡傛墦寮涓涓枃浠舵祦瀵硅薄澶辮觸鎴栭亣鍒頒竴縐嶆棤鏁堢殑杈撳叆鏍煎紡鍒檉ail()
榪斿洖true 渚嬪
ifstream iFile( filename, ios_base::in );
if ( iFile.fail() ) // 涓嶈兘鎵撳紑
error_message( ... );
4 濡傛灉鍏朵粬鏉′歡閮戒笉涓簍rue 鍒檊ood()榪斿洖true

浜? 鏀瑰彉鐘舵?
1. clear()鍑芥暟錛岀姸鎬佸彉涓烘樉紺恒?
2. setstate()鍑芥暟錛屾坊鍔犵姸鎬併傚弬鏁拌緗負(fù)錛?
ios_base::badbit
ios_base::eofbit
ios_base::failbit
ios_base::goodbit
3. rdstate()鑾峰彇鎴愬憳鐘舵侊紝榪斿洖鍊糹os_base::iostate銆?/p>

20.8 string 嫻?
1. 鍖呮嫭澶存枃浠?include <sstream>
2. str()榪斿洖涓巓stringstream 綾誨璞$浉鍏寵仈鐨剆tring 瀵硅薄銆?/p>

20.9 鏍煎紡鐘舵?
鎿?浣?絎?nbsp;                   鍚?涔?
boolalpha               鎶妕rue 鍜宖alse 琛ㄧず涓哄瓧絎︿覆
*noboolalpha            鎶妕rue 鍜宖alse 琛ㄧず涓? 1
showbase                浜х敓鍓嶇紑鎸囩ず鏁板肩殑榪涘埗鍩烘暟
*noshowbase             涓嶄駭鐢熻繘鍒跺熀鏁板墠緙
showpoint               鎬繪槸鏄劇ず灝忔暟鐐?
*noshowpoint            鍙湁褰撳皬鏁伴儴鍒嗗瓨鍦ㄦ椂鎵嶆樉紺哄皬鏁扮偣
Showpos                 鍦ㄩ潪璐熸暟鍊間腑鏄劇ず+
*noshowpos              鍦ㄩ潪璐熸暟鍊間腑涓嶆樉紺?
*skipws                 杈撳叆鎿嶄綔絎﹁煩榪囩┖鐧藉瓧絎?
noskipws                杈撳叆鎿嶄綔絎︿笉璺寵繃絀虹櫧瀛楃
uppercase               鍦ㄥ崄鍏繘鍒朵笅鏄劇ず0X 縐戝璁℃暟娉曚腑鏄劇ずE
*nouppercase            鍦ㄥ崄鍏繘鍒朵笅鏄劇ず0x 縐戝璁℃暟娉曚腑鏄劇ずe
*dec                    浠ュ崄榪涘埗鏄劇ず
hex                     浠ュ崄鍏繘鍒舵樉紺?
oct                     浠ュ叓榪涘埗鏄劇ず
left                    灝嗗~鍏呭瓧絎﹀姞鍒版暟鍊肩殑鍙寵竟
right                   灝嗗~鍏呭瓧絎﹀姞鍒版暟鍊肩殑宸﹁竟
Internal                灝嗗~鍏呭瓧絎﹀姞鍒扮鍙峰拰鏁板肩殑涓棿
*fixed                  浠ュ皬鏁板艦寮忔樉紺烘誕鐐規(guī)暟
scientific              浠ョ瀛﹁鏁版硶褰㈠紡鏄劇ず嫻偣鏁?
flush                   鍒鋒柊ostream 緙撳啿鍖?
ends                    鎻掑叆絀哄瓧絎︾劧鍚庡埛鏂皁stream 緙撳啿鍖?
endl                    鎻掑叆鎹㈣絎︾劧鍚庡埛鏂皁stream 緙撳啿鍖?
ws                      鍚冩帀 絀虹櫧瀛楃
// 浠ヤ笅榪欎簺瑕佹眰 #include <iomanip>
setfill(ch)            鐢╟h 濉厖絀虹櫧瀛楃
setprecision(n)        灝嗘誕鐐圭簿搴﹁緗負(fù)n
setw(w)                鎸夌収w 涓瓧絎︽潵璇繪垨鑰呭啓鏁板?
setbase(b)             浠ヨ繘鍒跺熀鏁癰 杈撳嚭鏁存暟鍊?
娉?琛ㄧず緙虹渷鐨勬祦鐘舵?/p>

20.10 寮虹被鍨嬪簱
iostream搴撴槸寮虹被鍨嬬殑渚嬪璇曞浘浠庝竴涓猳stream 璇繪暟鎹垨鑰呭啓鏁版嵁鍒頒竴涓猧stream閮戒細(xì)鍦ㄧ紪璇戞椂鍒昏鎹曡幏鍒板茍鏍囪涓虹被鍨嬭繚渚嬨?/p>

xi52qian 2011-03-03 08:37 鍙戣〃璇勮
]]>
Windows鏍稿績緙栫▼ 絎?绔?鍐呮牳瀵硅薄http://m.shnenglu.com/xi52qian/archive/2011/03/03/141022.htmlxi52qianxi52qianThu, 03 Mar 2011 00:35:00 GMThttp://m.shnenglu.com/xi52qian/archive/2011/03/03/141022.htmlhttp://m.shnenglu.com/xi52qian/comments/141022.htmlhttp://m.shnenglu.com/xi52qian/archive/2011/03/03/141022.html#Feedback1http://m.shnenglu.com/xi52qian/comments/commentRss/141022.htmlhttp://m.shnenglu.com/xi52qian/services/trackbacks/141022.html3.1 浠涔堟槸鍐呮牳瀵硅薄

鍐呮牳瀵硅薄灝辨槸鍐呮牳涓殑涓鍧楀唴瀛橈紝鏄竴涓粨鏋勶紝騫朵笖鍙兘鐢卞唴鏍稿璞¤闂紝搴旂敤紼嬪簭鍙兘閫氳繃璋冪敤Windows鎻愪緵鐨勫嚱鏁版潵鎿嶄綔鍐呮牳瀵硅薄銆傛瘡涓唴鏍稿璞¢兘鏈夌浉鍚岀殑閮ㄥ垎姣斿瀹夊叏灞炴у拰浣跨敤璁℃暟鍣ㄣ?/p>

3.1.1 鍐呮牳瀵硅薄鐨勪嬌鐢ㄨ鏁?/p>

鍐呮牳瀵硅薄涓殑浣跨敤璁℃暟鍜岃繘紼嬫棤鍏籌紝褰撹繘紼嬬涓嬈″垱寤烘煇涓唴鏍稿璞℃椂鍊欎嬌鐢ㄨ鏁板彉涓?錛屽綋鍙︿竴涓繘紼嬩篃璋冪敤姝ゅ唴鏍稿璞℃椂璁℃暟鍙樹負(fù)2銆傚綋榪涚▼閲婃斁鏃舵垨鑰呭叧闂唴鏍稿璞℃椂錛圕loseHandle錛夛紝鍐呮牳鐨勪嬌鐢ㄨ鏁板噺鍘?錛屽鏋滀嬌鐢ㄨ鏁頒笉涓?鐨勮瘽錛屽唴鏍鎬笉浼?xì)閲婃斁姝ゅ唴鏍稿璞°?/p>

3.2.2 瀹夊叏鎬?/p>

鍐呮牳瀵硅薄鑳藉寰楀埌瀹夊叏鎻忚堪絎︾殑淇濇姢錛屽畨鍏ㄦ弿榪扮瀹氫箟浜嗚皝鑳藉鍒涘緩錛岃闂拰浣跨敤璇ュ璞★紝涓鑸湪鏈嶅姟鍣ㄤ唬鐮佷腑浣跨敤錛屽鎴風(fēng)鍙互蹇界暐銆?/p>

鎵鏈夊垱寤哄唴鏍稿璞$殑鍑芥暟鐨勫弬鏁伴兘鏈変竴涓寚鍚慡ECURITY_ATTRIBUTES緇撴瀯鐨勬寚閽堛?/p>

typedef struct _SECURITY_ATTRIBUTES {
    DWORD nLength;
    LPVOID lpSecurityDescriptor;
    BOOL bInheritHandle;
} SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
鍙湁lpSecurityDescriptor鎴愬憳鍜屽畨鍏ㄥ睘鎬ф湁鍏熾備竴鑸鍙傛暟浼犻扤ULL錛岃〃紺洪粯璁ょ殑瀹夊叏鎻忚堪銆?/font>
濡傛灉闇瑕侊細(xì)
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = FALSE;
HANDLE h = CreateMutex(&sa, FALSE, "XI");
鍏朵綑榪涚▼鍙敤鐢∣penMutex鍑芥暟鎵撳紑錛屽鏋滄潈闄愬彲浠ュ氨榪斿洖鍙ユ焺錛屽鏋滃け璐ヨ繑鍥濶ULL錛孏etLastError琚緗負(fù)ERROR_ACCESS_DENIED銆?/div>
Windows闄や簡鍐呮牳瀵硅薄涔嬪榪樻湁GDI鍜岀敤鎴峰璞★紝鍖哄垎瀹冧滑鐨勭畝鍗曞姙娉曞氨鏄紝鍒涘緩鍑芥暟涓甫鏈夊畨鍏ㄦ弿榪扮鍙傛暟鐨勫氨鏄唴鏍稿璞°?/div>
 
3.2 榪涚▼鐨勫唴鏍稿璞″彞鏌勮〃

绱㈠紩                         鍐呮牳瀵硅薄鍐呭瓨鍧楀緱鎸囬拡                             璁塊棶灞忚斀錛堟爣蹇椾綅鐨凞WORD錛?nbsp;                     鏍囧織錛堟爣蹇椾綅鐨凞WORD錛?/p>


1                               0x????????                                                0x????????                                                        0x????????
2                               0x????????                                                0x????????                                                        0x????????
鈥?nbsp;                              鈥?nbsp;                                                              鈥?nbsp;                                                                      鈥?/div>
3.2.1 鍒涘緩鍐呮牳瀵硅薄

璋冪敤Create&鍑芥暟鏃忔潵鍒涘緩鐩稿簲鐨勫唴鏍稿璞★紝榪斿洖鐨勬槸鍐呮牳瀵硅薄鐨勫彞鏌勶紙涔熸湁涓娉曞氨鏄彞鏌勮〃鐨勭儲寮曪級,濡傛灉鍒涘緩澶辮觸涓鑸細(xì)榪斿洖0錛圢ULL錛夛紝涔熸湁鐨勪細(xì)榪斿洖INVALID_HANDLE_VALUE=-1錛屾瘮濡侰reateFile澶辮觸鍚庝細(xì)榪斿洖鍚庤咃紝澶辮觸鐨勫師鍥犳湁鍙兘鏄唴瀛樹笉瓚蟲垨鑰呮槸瀹夊叏闂絳夌瓑銆傚叾浠栧鍐呮牳鎿嶄綔鐨勫嚱鏁伴兘闇瑕佹鍙ユ焺鍊間綔涓哄弬鏁頒紶閫掕繘鍘伙紝濡傛灉浼犻掍竴涓棤鏁堢殑鍙ユ焺榪涘幓錛岄偅涔圙etLastError鍑芥暟鐨勫煎皢琚疆涓?錛圗RROR_INVALID_HANDLE錛夈?/p>

3.2.2 鍏抽棴鍐呮牳瀵硅薄

BOOL CloseHandle(HANDLE hobj);

璋冪敤姝ゅ嚱鏁幫紝緋葷粺浼?xì)浜嗘竻鐞啒q涚▼鐨勫彞鏌勮〃涓殑瀵瑰簲欏圭洰錛屽鏋滀嬌鐢ㄨ鏁板櫒涓?錛屽唴鏍擱噴鏀捐鍐呮牳瀵硅薄鐨勮祫婧愶紝濡傛灉浣跨敤璁℃暟鍣ㄤ笉涓?錛岃鏄庡叾浠栬繘紼嬭繕鍦ㄤ嬌鐢ㄦ鍐呮牳瀵硅薄錛屽垯涓嶉噴鏀捐祫婧愩?/p>

褰撹繘紼嬪繕璁拌皟鐢–loseHandle鍑芥暟錛屽彲鑳介犳垚鍐呭瓨娉勯湶錛屼絾鏄綋榪涚▼緇撴潫鐨勬椂鍊欒祫婧愪竴鏍蜂細(xì)琚噴鏀俱?/p>

濡傛灉浼犻掔殑鍙傛暟鏃犳晥錛屽垯鍑芥暟榪斿洖FALSE錛屽茍涓擥etLastError鍑芥暟鐨勫艱璁劇疆鎴怑RROR_INVALID_HANDLE銆傚鏋滄槸DEBUG闃舵錛屽垯榪斿洖閿欒淇℃伅銆?/p>

 
3.3 璺ㄨ秺榪涚▼杈圭晫鍏變韓鍐呮牳瀵硅薄
3.3.1 瀵硅薄鍙ユ焺鐨勭戶鎵挎?/div>
  1. 鍦ㄧ埗榪涚▼鍒涘緩瀛愯繘紼嬬殑鏃跺欙紝灝嗗弬鏁癝ECURITY_ATTRIBUTES緇撴瀯鐨処nherithandle瀛楁璁劇疆涓篢RUE鐨勮瘽錛屽啀鐖惰繘紼嬪彞鏌勮〃涓爣紺鴻鍐呮牳瀵硅薄鐨勯」鐨勬爣蹇椾綅鐨勫煎皢浼?xì)鍙樻垚TRUE錛屾爣紺鴻鍐呮牳瀵硅薄鏄彲浠ヨ瀛愯繘紼嬬戶鎵跨殑錛屽叿鏈夊彲緇ф壙鎬э紙浠呬粎鏍囩ず 璇ュ彞鏌勫煎叿鏈夊彲緇ф壙鎬э紝鑰屽唴鏍稿璞℃病鏈夊彲緇ф壙鎬э級銆?
  2. 灝咰reateProcess鐨勫弬鏁癰Inherithandle鍙傛暟鐨勫艱緗負(fù)TRUE錛屾爣紺哄垱寤虹殑榪涚▼鍙互緇ф壙鏈夌戶鎵挎х殑鐖惰繘紼嬪彞鏌勩?
  3. 瀛愯繘紼嬪垱寤哄悗涓嶄細(xì)鍏堝姞杞界▼搴忥紝瀹冨厛鎼滅儲鐖惰繘紼嬬殑鍙ユ焺琛ㄥ皢鏈夌戶鎵挎х殑欏圭洰鍘熷皝涓嶅姩鐨勬嫹璐濈粰鑷繁錛堢儲寮曚篃娌℃湁鍙橈紝鎵浠ュ彞鏌勫間篃涓嶅彉錛夈?
  4. 鐖惰繘紼嬪彲浠ユ湁3縐嶆柟寮忓皢鍙ユ焺鍊間紶閫掔粰瀛愯繘紼嬶紝鍙傛暟浼犻掞紝榪涚▼闂撮氫俊鍜岀幆澧冨彉閲忥紙GetEnvironmentVariavle鍑芥暟瑙f瀽錛夈?
BOOL
WINAPI
CreateProcess(
    __in_opt    LPCSTR lpApplicationName,
    __inout_opt LPSTR lpCommandLine,
    __in_opt    LPSECURITY_ATTRIBUTES lpProcessAttributes,
    __in_opt    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    __in        BOOL bInheritHandles,
    __in        DWORD dwCreationFlags,
    __in_opt    LPVOID lpEnvironment,
    __in_opt    LPCSTR lpCurrentDirectory,
    __in        LPSTARTUPINFOA lpStartupInfo,
    __out       LPPROCESS_INFORMATION lpProcessInformation
    );
娉ㄦ剰錛?/font>
瀛愯繘紼嬪啀鍒涘緩鍏跺瓙榪涚▼錛屽鏋滄弧瓚充笂闈㈡柟寮忥紝鍙互緇х畫緇ф壙銆?/font>
濡傛灉鐖惰繘紼嬪啀鍒涘緩瀛愯繘紼嬪悗錛屽啀鍒涘緩鍙ユ焺錛屽瓙榪涚▼涓嶄細(xì)琚戶鎵褲?/font>
3.3.2 鏀瑰彉鍙ユ焺鏍囧織
BOOL SetHandleInformation(HANDLE hObject, DWORD dwMask, DWORD dwFlags);
鏀瑰彉鍙ユ焺鐨勬爣蹇楋紝鐩墠鍙敼鍙樼殑鏍囧織鏈変袱縐?/div>
#define HANDLE_FLAG_INHERIT   0x00000001  // 緇ф壙鏍囧織
#define HANDLE_FLAG_PROJECT_FROM_CLOSE   0x00000001 // 淇濇姢涓嶅厑璁稿叧闂彞鏌勬爣蹇?/div>
鍙互鐢∣R鎿嶄綔鍚屾椂璁劇疆2涓爣蹇椼傜涓涓弬鏁版槸瑕佽緗殑鍙ユ焺鍊鹼紝絎簩涓氨鏄鏀瑰彉鐨勬爣蹇楋紝絎笁涓弬鏁版槸灝嗘爣蹇楁敼緙栨垚浠涔堝箋?/div>
BOOL GetHandleInformation(HANDLE hObkect, PDWORD pdwFlags);
鑾峰彇褰撳墠鍙ユ焺鐨勬爣蹇楃殑鍊箋?/div>
// 璁劇疆鍙ユ焺鍊煎彲緇ф壙錛?/span>
SetHandleInformation(hObject, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT);
// 璁劇疆鍙ユ焺涓嶅彲緇ф壙錛?/span>
SetHandleInformation(hObject, HANDLE_FLAG_INHERIT, 0);
// 璁劇疆鍙ユ焺鍊間笉鍙叧闂紝鍙椾繚鎶わ細(xì)
SetHandleInformation(hObject, HANDLE_FLAG_PROJECT_FROM_CLOSE, HANDLE_FLAG_PROJECT_FROM_CLOSE);
// 璁劇疆鍙ユ焺鍊煎彲鍏抽棴錛屼笉鍙椾繚鎶わ細(xì)
SetHandleInformation(hObject, HANDLE_FLAG_PROJECT_FROM_CLOSE, 0);
3.3.3 鍛藉悕瀵硅薄
鍒涘緩鍐呮牳瀵硅薄鍑芥暟鏃廋reate&涓殑鏈鍚庝竴涓弬鏁版槸pszName錛岃鍙傛暟鏄鏋滀紶閫扤ULL錛岃〃紺烘槸鍖垮悕鍐呮牳瀵硅薄錛屽彲浠ラ氳繃鍏朵粬淇╃鏂瑰紡鏉ヤ嬌鐢ㄥ叾浠栬繘紼嬬殑鍐呮牳瀵硅薄銆傚綋pszName鍙傛暟浼犻掍互鈥橽0鈥欙紙鏈澶氶暱搴︿負(fù)MAX_PATH 260瀛楃錛夌粨灝劇殑瀛楃涓叉椂錛岃〃紺哄惎鐢ㄥ懡鍚嶅璞★紝姣斿榪涚▼A璋冪敤CreateMutex(NULL, FALSE, 鈥淴I鈥?鐨勬椂鍊欙紝浠栧皢鍒涘緩鍐呮牳瀵硅薄鍚嶅瓧涓衡淴I鈥濓紝涔嬪悗鏌愪竴鏃跺埢濡傛灉榪涚▼B涔熻皟鐢–reateMutex(NULL, FALSE, 鈥淴I鈥?鍑芥暟浠栧皢緇忚繃浠ヤ笅鍑犳錛?/div>
  1. 鍒ゆ柇鍐呮牳瀵硅薄鍚嶇О鏄惁鐩稿悓銆?
  2. 鍒ゆ柇鍐呮牳瀵硅薄綾誨瀷鏄惁鐩稿悓錛屽鏋滃悕瀛楃浉鍚屼絾鏄被鍨嬩笉鐩稿悓鍒機(jī)reate&鍑芥暟鏃忚繑鍥濶ULL錛孏etLastError鍑芥暟鍊間負(fù)6錛圗RROR_INVALID_HANDLE錛夈?
  3. 鍒ゆ柇瀹夊叏鎬э紝榪斿洖鍚?姝ワ紝GetLastError鍊煎悓2姝ャ?
  4. 濡傛灉楠岃瘉閫氳繃鍒欒繑鍥炲彞鏌勶紙榪斿洖鍙ユ焺鐨勫煎拰璇ュ唴鏍稿璞″叾浠栧彞鏌勭殑鍊間笉涓瀹氱浉鍚岋級錛孏etLastError鐨勫肩瓑浜嶦RROR_ALREADY_EXISTS銆?

涔熷彲浠ョ敤Open&鍑芥暟鏃忔潵鎵撳紑宸茬粡鍒涘緩鐨勫彞鏌勶紝鎴愬姛鍚嶨etLastError涔熶笉浼?xì)琚畡〗傚叿浣撳涓?/p>

HANDLE Open&(DWORD, BOOL, PCSTR);

絎竴涓弬鏁幫細(xì)琛ㄧず璁塊棶鏉冮檺銆?/p>

絎簩涓弬鏁幫細(xì)琛ㄧず鏂板垱寤虹殑鍙ユ焺鏄惁鏈夌戶鎵挎э紙娉ㄦ剰涓嶆槸鍐呮牳瀵硅薄錛侊級銆?/p>

絎笁涓弬鏁幫細(xì)涓嶈兘浼犻扤ULL銆傚鏋滆鍙ユ焺涓嶅瓨鍦ㄥ垯榪斿洖NULL錛孏etLastError琚緗負(fù)2錛圗RROR_FILE_NOT_FOUND錛夈?/p>

3.3.4 緇堢鏈嶅姟鍣ㄧ殑鍚嶅瓧絀洪棿

Globad錛孡ocal錛孲ession紼嬪簭淇濈暀鍏抽敭瀛楋紝鍏蜂綋鐨勬病寮勬槑鐧斤紝鐞嗚В鐨勫氨鏄褰撴湇鍔″櫒鐨勬椂鍊欙紝瀹㈡埛绔彲浠ヨ闂互榪欎簺鍚嶅瓧寮澶寸殑鍐呮牳瀵硅薄銆?/p>

3.3.5 澶嶅埗瀵硅薄鍙ユ焺

BOOL DuplicateHandle(
HANDLE hSourceProcessHandle,
HANDLE hSourceHandle,
HANDLE TargetProcessHandle,
PHANDLE phTargetHandle,
DWORD dwDesiredAccess,
BOOL bInheritHandle,
DWORD dwOptions);

鎵цDuplicateHandle鍑芥暟鐨勮繘紼嬩負(fù)ProcessC錛屽師榪涚▼涓篜rocessS錛岀洰鏍囪繘紼嬩負(fù)ProcessT銆傚垯hSourceProcessHandle涓鴻繘紼婸rocessS鐨勮繘紼嬪彞鏌勶紝TargetProcessHandle涓鴻繘紼婸rocessT鐨勮繘紼嬪彞鏌勶紝ProcessC灝嗗彞鏌刪SourceHandle浠嶱rocessC鎷瘋礉鍒癙rocessT涓紝鍊煎瓨鍦╬hTargetHandle涓紝dwDesiredAccess鏂板彞鏌勭殑鍙嶉棶鏉冮檺錛宐InheritHandle鏂板彞鏌勭殑緇ф壙鎬э紝鍙傛暟dwOptions鏈変袱縐嶇被鍨嬪垎鍒槸錛?/p>

DUPLICATE_SAME_ACCESS蹇界暐鍙傛暟dwDesiredAccess錛屾柊鍙ユ焺鍜屽師榪涚▼鍙ユ焺鍏鋒湁鐩稿悓鐨勫弽闂潈闄愩?/p>

DUPLICATE_CLOSE_SOURCE鍏抽棴ProcessS涓殑鎷瘋礉鍙ユ焺錛屽唴鏍稿璞$殑璁℃暟涓嶅彉銆?/p>

HANDLE hObjProcessS = CreateMutex(NULL, FALSE, NULL);
HANDLE hProcessT = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessIdT);
HANDLE hObjProcessT;
DuplicateHandle(GetCurrentProcess(), hObjProcessS, hProcessT , &hObjProcessT, 0, FALSE, DUPLICATE_SAME_ACCESS);
CloseHandle(hObjProcessS);
CloseHandle(hProcessT);
娉ㄦ剰錛?
涓鑸珼uplicateHandle鍑芥暟娌℃湁鍦ㄤ笁涓繘紼嬩腑浣跨敤錛屽洜涓哄緢闅劇煡閬撳師榪涚▼鐨勫彞鏌勫箋?
瑕佷嬌鐢↖PC鏈哄埗閫氱煡鐩爣榪涚▼錛屾柊鍙ユ焺宸茬粡鎷瘋礉榪囧幓銆?


xi52qian 2011-03-03 08:35 鍙戣〃璇勮
]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
              亚洲精品久久久久久久久久久久久 | 欧美成熟视频| 亚洲国产精品久久久久秋霞不卡| 免费日韩av| 欧美日韩国产首页| 久久九九精品99国产精品| 久久一区二区三区四区| 夜夜夜久久久| 久久久国产91| 亚洲视频电影在线| 久久亚洲图片| 午夜在线观看免费一区| 巨胸喷奶水www久久久免费动漫| 亚洲视频导航| 欧美成年人网站| 欧美在线资源| 欧美区二区三区| 久久久久免费视频| 亚洲精品视频一区| 国产午夜精品福利| 亚洲激情小视频| 国产亚洲亚洲| 一本久道久久久| 国产日韩欧美制服另类| 亚洲人成在线观看网站高清| 国产三级精品在线不卡| 亚洲精品在线观| 亚洲高清免费| 先锋影音一区二区三区| 在线视频一区二区| 欧美**人妖| 久久婷婷国产麻豆91天堂| 国产精品久久一卡二卡| 亚洲黄一区二区三区| 一区二区在线观看av| 午夜精品久久久久久99热软件| 一本大道久久a久久精二百| 久久久综合香蕉尹人综合网| 欧美一区二区女人| 欧美性开放视频| 亚洲精品久久久久久下一站 | 欧美在线中文字幕| 国产精品久久激情| 亚洲精品国精品久久99热一| 亚洲日韩欧美视频一区| 久久久久久久性| 久久久久久久激情视频| 国产婷婷色综合av蜜臀av | 亚洲国语精品自产拍在线观看| 久久国产精品高清| 欧美在现视频| 国产精品一二三| 亚洲综合另类| 欧美诱惑福利视频| 黄色精品一区| 亚洲欧美日韩一区二区在线 | 另类综合日韩欧美亚洲| 美女日韩欧美| 亚洲国产激情| 欧美成人在线免费视频| 亚洲日本视频| 亚洲视频观看| 国产精品视频免费在线观看| 羞羞色国产精品| 久久久欧美精品sm网站| 黄色亚洲在线| 久久影院午夜论| 亚洲国产精品女人久久久| 亚洲精品国偷自产在线99热| 欧美福利视频在线观看| 一本色道久久综合亚洲精品小说 | 欧美激情a∨在线视频播放| 亚洲六月丁香色婷婷综合久久| 99精品热视频| 国产精品久久久久久五月尺| 午夜一区二区三区不卡视频| 另类综合日韩欧美亚洲| 亚洲欧洲偷拍精品| 欧美视频一区二| 亚洲男人第一av网站| 牛牛影视久久网| 日韩一级在线观看| 国产精品国产福利国产秒拍| 欧美一级视频免费在线观看| 蜜桃视频一区| 一区二区高清视频在线观看| 国产精品你懂得| 巨胸喷奶水www久久久免费动漫| 亚洲人成网站在线播| 欧美一区成人| 亚洲福利视频一区| 国产伦精品一区二区三区四区免费| 欧美在线看片| 亚洲人成网站999久久久综合| 99在线视频精品| 韩国女主播一区二区三区| 欧美日韩p片| 久久av在线| 亚洲卡通欧美制服中文| 久久精品一区二区三区不卡牛牛 | 久久久免费精品| 亚洲精品亚洲人成人网| 久久久精品国产免费观看同学| 亚洲精品乱码久久久久久久久 | 99国产精品99久久久久久| 久久免费视频在线观看| 亚洲无吗在线| 亚洲国产精品电影| 国产欧美日韩综合| 欧美日韩精品免费| 美女被久久久| 欧美亚洲三区| 亚洲视频免费观看| 亚洲国产精品一区二区第四页av| 久久久亚洲影院你懂的| 午夜精品久久久久久久99黑人| 欧美一级专区免费大片| 欧美日韩亚洲国产精品| 久久精品人人做人人爽| 亚洲视频一区二区在线观看| 欧美高清视频一区二区三区在线观看| 国模一区二区三区| 亚洲欧美日韩中文在线制服| 欧美/亚洲一区| 最新国产の精品合集bt伙计| 欧美伊人久久久久久午夜久久久久| 亚洲黄色av| 韩国v欧美v日本v亚洲v| 国产精品久久久久久久久久免费| 免费视频最近日韩| 久久综合色天天久久综合图片| 亚洲影院免费观看| 宅男噜噜噜66国产日韩在线观看| 91久久精品视频| 亚洲缚视频在线观看| 欧美 日韩 国产精品免费观看| 久久久www| 久久久精品动漫| 久久免费午夜影院| 久久免费精品视频| 免费h精品视频在线播放| 久久综合给合| 免费久久99精品国产| 最新国产乱人伦偷精品免费网站 | 亚洲精品一区二区三区樱花| 欧美成人午夜激情在线| 久久久一本精品99久久精品66| 久久精品九九| 麻豆免费精品视频| 免费亚洲婷婷| 亚洲国产成人精品久久久国产成人一区| 嫩草成人www欧美| 欧美激情第9页| 亚洲国内精品在线| 日韩视频一区二区| 亚洲深夜影院| 欧美在线免费视频| 久久久国际精品| 欧美.com| 国产精品久久久久久久7电影 | 最新中文字幕亚洲| a4yy欧美一区二区三区| 亚洲一区二区在线播放| 午夜亚洲影视| 久久综合五月| 欧美黄色小视频| 久久久国产精品一区二区三区| 久久精品国产亚洲一区二区| 亚洲精品资源| 亚洲第一在线综合网站| 免费成人在线视频网站| 美女国产一区| 日韩一级黄色片| 99精品久久免费看蜜臀剧情介绍| 亚洲午夜国产成人av电影男同| 一区二区三区免费观看| 欧美在线日韩在线| 久久久久久9999| 国产精品成人一区二区三区吃奶| 欧美日韩在线观看视频| 红桃视频亚洲| 日韩视频在线你懂得| 日韩午夜激情电影| 欧美一级在线视频| 母乳一区在线观看| 国产精品国产三级国产aⅴ浪潮 | 国内一区二区在线视频观看 | 男男成人高潮片免费网站| 亚洲欧美日韩国产中文在线| 久久精品国产一区二区三区免费看| 欧美在线免费观看亚洲| 欧美美女操人视频| 欧美视频一区二区三区在线观看 | 久久riav二区三区| 美腿丝袜亚洲色图| 一区二区三区国产在线观看| 羞羞答答国产精品www一本| 欧美国产精品专区| 欧美jizz19性欧美| 国产日韩专区|