一個進程通常是一個運行的程序的實例
一個進程要能完成某些功能
int WINAPI _tWinMain
(
HINSTANCE hInstanceExe
HINSTANCE
PTSTR pszCmdLine
int nCmdShow
);
int _tmain
(
int argc
TCHAR *argv[]
TCHAR *envp[]
);
但是操作系統不會調用你寫的進入點函數!它是調用C/C++啟動函數
當你的進入點函數退出時
但是由於安全原因
二
下面是這些代碼
#include<windows
extern
void DumpModule()
{
HMODULE hModule = GetModuleHandle(NULL);
printf(
printf(
hModule = NULL;
GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS
(PCTSTR)DumpModule
printf(
}
int main(int argc
{
DumpModule();
return
}
上面代碼可以看出
三
int nNumArgs; PWSTR *ppArgv = CommandLineToArgvW(GetCommandLineW()
// 使用參數 if (*ppArgv[
{
}
// 釋放內存塊(那個函數是在內部分配內存塊的) HeapFree(GetProcessHeap()
四
void DumpEnvStrings()
{
PTSTR pEnvBlock = GetEnvironmentStrings();
// Parse the block with the following format:
// =::=::\
// =
// var=value\
//
// var=value\
// Note that some other strings might begin with
// Here is an example when the application is started from a network share
// [
// [
// [
// TCHAR szName[MAX_PATH];
TCHAR szValue[MAX_PATH];
PTSTR pszCurrent = pEnvBlock;
HRESULT hr = S_OK;
PCTSTR pszPos = NULL;
int current =
while (pszCurrent != NULL)
{
// 跳過無意義字符串如
if (*pszCurrent != TEXT(
{
// 查找
pszPos = _tcschr(pszCurrent
// 現在指針指向值的第一個字符
pszPos++;
// 復制變量名
size_t cbNameLength =
// 不包含
(size_t)pszPos
hr = StringCbCopyN(szName
if (FAILED(hr))
{
break;
}
// Copy the variable value with the last NULL character
// and allow truncation because this is for UI only
hr = StringCchCopyN(szValue
if (SUCCEEDED(hr))
{
_tprintf(TEXT(
}
else
// something wrong happened; check for truncation
if (hr == STRSAFE_E_INSUFFICIENT_BUFFER)
{
_tprintf(TEXT(
}
else
{
// This should never occur
_tprintf(
TEXT(
);
break;
}
}
else
{
_tprintf(TEXT(
}
// Next variable please
current++;
// Move to the end of the string
while (*pszCurrent != TEXT(
pszCurrent++;
pszCurrent++;
// Check if it was not the last string
if (*pszCurrent == TEXT(
break;
};
// 不要忘記了要釋放內存
FreeEnvironmentStrings(pEnvBlock);
}
第二種獲取環境變量的方法只用於CUI程序
void DumpEnvVariables(PTSTR pEnvBlock[])
{
int current =
PTSTR* pElement = (PTSTR*)pEnvBlock;
PTSTR pCurrent = NULL;
while (pElement != NULL)
{
pCurrent =
if (pCurrent == NULL)
{
// 沒有環境變量了
pElement = NULL;
}
else
{
_tprintf(TEXT(
current++;
pElement++;
}
}
}
在環境變量的這種表示中
如果您的程序還需要獲取環境變量的功能
{
PTSTR pszValue = NULL;
// 獲取存儲值所需要的緩沖區大小
DWORD dwResult = GetEnvironmentVariable(pszVariableName
if (dwResult !=
{
DWORD size = dwResult * sizeof(TCHAR);
pszValue = (PTSTR)malloc(size);
GetEnvironmentVariable(pszVariableName
_tprintf(TEXT(
free(pszValue); }
else {
_tprintf(TEXT(
}
}
如果在環境變量中包含一些其它的環境變量值
五
// 准備OSVERSIONINFOEX結構 OSVERSIONINFOEX osver = {
osver
osver
osver
osver
//准備條件掩碼 DWORDLONG dwlConditionMask =
// 必須初始化成
VER_SET_CONDITION(dwlConditionMask
//進行版本測試 if (VerifyVersionInfo(&osver
dwlConditionMask))
{
//該版本是Vista
}
else
{
//該系統不是Vista系統
}
From:http://tw.wingwit.com/Article/program/net/201311/12334.html