// 這個程式展示如何用程式自動新增,刪除,判斷環境變數的範例 // 注意: SetEnvironmentVariable 只為反映在目前的 process 的設定上, 不會影響其他的 process // 井民全 //#define _UNICODE // for c run-time function //#define UNICODE // for windows function #include // for lstrcat #include // for _T void ShowError(); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ // 判斷系統是否已經存在 TestDir 環境變數 // (若 ReadedChar =0 則表示目前 TestDir 不在環境變數中) TCHAR pszValue[100]; DWORD ReadedChar=GetEnvironmentVariable(_T("MyProjectDir"),pszValue,100); if(ReadedChar == 0){ MessageBox(NULL,_T("目前 MyProjectDir 不在環境變數中"),_T("測試環境變數是否已經存在"),MB_OK); } // 新增一筆資料範例 BOOL bSucc=SetEnvironmentVariable(_T("MyProjectDir"),_T("c:\\test")); // 設定 MyProjectDir="c:\test" if(bSucc){ MessageBox(NULL,_T("MyProjectDir 設定成功"),_T("環境變數使用範例"),MB_OK); }else{ ShowError(); } // 將 MyProjectDir 變數的值取出來 ReadedChar=GetEnvironmentVariable(_T("MyProjectDir"),pszValue,100); if(ReadedChar != 0) MessageBox(NULL,pszValue,_T("環境變數讀取成功"),MB_OK); else{ ShowError(); } // 刪除MyProjectDir變數範例 bSucc=SetEnvironmentVariable(_T("MyProjectDir"),NULL); ReadedChar=GetEnvironmentVariable(_T("MyProjectDir"),pszValue,100);// 讀出來看看 if(ReadedChar==0) MessageBox(NULL,_T("變數 MyProjectDir已經被刪除了"),_T("Delete Environment Value"),MB_OK); return 0; } // 若有任何的錯誤, 你可以呼叫下面這個 functin // 幫你組合出錯誤訊息 void ShowError(){ LPVOID lpMsgBuf; /* 中文訊息 FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS, NULL,GetLastError(),MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf,0,NULL ); */ // 英文訊息 (比較方便到 Yahoo 查別人如何解決) FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |FORMAT_MESSAGE_FROM_SYSTEM |FORMAT_MESSAGE_IGNORE_INSERTS, NULL,GetLastError(),MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf,0,NULL ); MessageBox( NULL, (LPCTSTR)lpMsgBuf, "Error", MB_OK | MB_ICONINFORMATION ); LocalFree( lpMsgBuf ); }