#include <Windows.h>
#include <tchar.h>
#include <stdio.h>
#define MyAlloc(size) HeapAlloc(GetProcessHeap(),0,size)
#define MyFree(lpMem) HeapFree(GetProcessHeap(),0,lpMem)
typedef struct _PROCESS_INFO{
DWORD dwPid;
HANDLE hProcess;
DWORD dwPrioClass;
DWORD dwHandleCount;
DWORD dwAffinityMask;
SIZE_T dwWorkingSetSizeMax;
SIZE_T dwWorkingSetSizeMin;
LPWSTR szwCommandLine;
STARTUPINFO sit;
}PROCESS_INFO,*LPPROCESS_INFO;
HANDLE hMySelf;
DWORD GetProcessInfo(LPPROCESS_INFO lppi);
int WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
PROCESS_INFO pi;
INT argc;
WCHAR **argv;
DWORD i;
DWORD dwBufferSize = lstrlen(lpCmdLine)+MAX_PATH+1024;
LPSTR szShowBuffer = (LPSTR)MyAlloc(dwBufferSize);
hMySelf = hInstance;
wsprintf(szShowBuffer,"啟動參數\n執行個體句柄:%.8X,指令行參數:%s,顯示選項:%.8X",hInstance,lpCmdLine,nCmdShow);
MessageBox(NULL,szShowBuffer,"WinMain函數參數",MB_OK);
GetProcessInfo(&pi);
argv = CommandLineToArgvW(pi.szwCommandLine,&argc);
*szShowBuffer = NULL;
for(i=0;i<argc;i++){
DWORD dwBufferSize = lstrlenW(*argv)+1;
LPSTR szMBArgv = MyAlloc(dwBufferSize);
WideCharToMultiByte(CP_ACP,NULL,*argv,-1,szMBArgv,dwBufferSize,NULL,NULL);
argv++;
lstrcat(szShowBuffer,"\n");
lstrcat(szShowBuffer,szMBArgv);
MyFree(szMBArgv);
}
MessageBox(NULL,szShowBuffer,"參數",MB_OK);
MyFree(szShowBuffer);
return 0;
}
DWORD GetProcessInfo(LPPROCESS_INFO lppi){
lppi->dwPid = GetCurrentProcessId();
lppi->hProcess = GetCurrentProcess();
lppi->dwPrioClass = GetPriorityClass(hMySelf);
GetProcessAffinityMask(hMySelf,&lppi->dwAffinityMask,NULL);
GetProcessWorkingSetSize(hMySelf,&lppi->dwWorkingSetSizeMin,&lppi->dwWorkingSetSizeMax);
lppi->szwCommandLine = GetCommandLineW();
GetStartupInfo(&lppi->sit);
本文轉hackfreer51CTO部落格,原文連結:http://blog.51cto.com/pnig0s1992/628807,如需轉載請自行聯系原作者