osrelate.cpp
来自「◆◆◆ 《投掷飞镖记分工具》◆◆◆ 操作系统 : Windows Mobil」· C++ 代码 · 共 128 行
CPP
128 行
#include "StdAfx.h"
#include "PublicFunc.h"
TCHAR* hwFormatMessage ( DWORD dwErrorCode )
{
static TCHAR szError[256] = {0};
FormatMessage (
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
dwErrorCode,
MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
szError,
LENGTH(szError),
NULL);
return szError;
}
//
// 等待线程退出
//
BOOL WaitForThreadEnd ( HANDLE *phThread, DWORD dwWaitTime /*=5000*/ )
{
BOOL bRet = TRUE;
ASSERT ( phThread );
if ( !(*phThread) ) return TRUE;
if ( ::WaitForSingleObject ( *phThread, dwWaitTime ) == WAIT_TIMEOUT )
{
bRet = FALSE;
::TerminateThread ( *phThread, 0 );
}
::CloseHandle ( *phThread );
(*phThread) = NULL;
return bRet;
}
/********************************************************************************
* Function Type : Global
* Parameter : lpProgram - 存放当前执行程序所在的路径字符串的缓冲
* dwSize - 缓冲大小
* Return Value : 字符个数
* Description : 得到当前执行程序所在的路径
*********************************************************************************/
int GetProgramDir ( LPTSTR lpProgram, DWORD dwSize )
{
ASSERT ( lpProgram );
ZeroMemory(lpProgram,dwSize);
GetModuleFileName(NULL,(LPTSTR)lpProgram,dwSize);
LPTSTR p = (LPTSTR)strrchr_hw((LPCTSTR)lpProgram, _T('\\'));
if(!p) return 0;
p[1] = _T('\0');
int nLength = (int)(p - lpProgram)/sizeof(TCHAR);
return nLength;
}
CString GetProgramDir()
{
TCHAR szProgram[MAX_PATH] = {0};
GetProgramDir ( szProgram, sizeof(szProgram) );
return szProgram;
}
//
// 创建一个进程,返回进程句柄
//
HANDLE hwCreateProcess ( LPCTSTR lpszFileName, LPCTSTR lpszParameter )
{
PROCESS_INFORMATION proc_info;
STARTUPINFO startup_info;
startup_info.cb = sizeof(STARTUPINFO);
startup_info.lpReserved = NULL;
startup_info.lpDesktop = NULL;
startup_info.lpTitle = NULL;
#ifdef WINCE
startup_info.dwFlags = 0;
#else
startup_info.dwFlags = STARTF_USESHOWWINDOW;
#endif
startup_info.wShowWindow = SW_NORMAL;
startup_info.cbReserved2 = 0;
startup_info.lpReserved2 = NULL;
CString csCommandLine;
if ( lpszParameter && lstrlen(lpszParameter) > 0 )
csCommandLine.Format ( _T("\"%s\" %s"), lpszFileName, lpszParameter?lpszParameter:_T("") );
else
csCommandLine.Format ( _T("\"%s\""), lpszFileName );
csCommandLine.TrimLeft (); csCommandLine.TrimRight ();
if ( !CreateProcess(NULL,csCommandLine.GetBuffer(0),NULL,NULL,TRUE,
#ifdef WINCE
0x04000000,
#else
CREATE_DEFAULT_ERROR_MODE,
#endif
NULL,NULL,&startup_info,&proc_info) )
{
return NULL;
}
return proc_info.hProcess;
}
/********************************************************************************
* Function Type : Global
* Parameter : lpszFileName - 程序名
* dwTimeout - 超时时间(秒)
: =0 - 直接返回
* >0 - 秒数
* Return Value : NO_ERROR - 执行成功
* -1 - 执行错误
* -2 - 执行超时
* -3 - 取进程返回代码时错误
* Description : 执行一个程序并等待执行完毕
*********************************************************************************/
int ExecuteProcAndWaitEnd(LPCTSTR lpszFileName, LPCTSTR lpszParameter, DWORD dwTimeout /* = 0 */, LPDWORD lpExitCode/*=NULL*/)
{
HANDLE hProcess = hwCreateProcess ( lpszFileName, lpszParameter );
if ( !hProcess ) return -1;
if(dwTimeout > 0 && WaitForSingleObject ( hProcess, dwTimeout*1000 ) != 0)
{
return -2;
}
if ( lpExitCode )
{
if ( !GetExitCodeProcess ( hProcess, lpExitCode ) )
return -3;
}
return NO_ERROR;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?