VC++でプロセスを実行させる
size_t ExecuteProcess(std::wstring FullPathToExe, std::wstring Parameters, size_t SecondsToWait)
{
size_t iMyCounter = 0, iReturnVal = 0, iPos = 0;
DWORD dwExitCode = 0;
std::wstring sTempStr = L"";
/* - NOTE - You should check here to see if the exe even exists */
/* Add a space to the beginning of the Parameters */
if (Parameters.size() != 0)
{
if (Parameters[0] != L' ')
{
Parameters.insert(0,L" ");
}
}
/* The first parameter needs to be the exe itself */
sTempStr = FullPathToExe;
iPos = sTempStr.find_last_of(L"\\");
sTempStr.erase(0, iPos +1);
Parameters = sTempStr.append(Parameters);
/* CreateProcessW can modify Parameters thus we allocate needed memory */
wchar_t * pwszParam = new wchar_t[Parameters.size() + 1];
if (pwszParam == 0)
{
return 1;
}
const wchar_t* pchrTemp = Parameters.c_str();
wcscpy_s(pwszParam, Parameters.size() + 1, pchrTemp);
/* CreateProcess API initialization */
STARTUPINFOW siStartupInfo;
PROCESS_INFORMATION piProcessInfo;
memset(&siStartupInfo, 0, sizeof(siStartupInfo));
memset(&piProcessInfo, 0, sizeof(piProcessInfo));
siStartupInfo.cb = sizeof(siStartupInfo);
if (CreateProcessW(const_cast(FullPathToExe.c_str()),
pwszParam, 0, 0, false,
CREATE_DEFAULT_ERROR_MODE, 0, 0,
&siStartupInfo, &piProcessInfo) != false)
{
/* Watch the process. */
dwExitCode = WaitForSingleObject(piProcessInfo.hProcess, (SecondsToWait * 1000));
}
else
{
/* CreateProcess failed */
iReturnVal = GetLastError();
}
/* Free memory */
delete[]pwszParam;
pwszParam = 0;
/* Release handles */
CloseHandle(piProcessInfo.hProcess);
CloseHandle(piProcessInfo.hThread);
return iReturnVal;
}
{
size_t iMyCounter = 0, iReturnVal = 0, iPos = 0;
DWORD dwExitCode = 0;
std::wstring sTempStr = L"";
/* - NOTE - You should check here to see if the exe even exists */
/* Add a space to the beginning of the Parameters */
if (Parameters.size() != 0)
{
if (Parameters[0] != L' ')
{
Parameters.insert(0,L" ");
}
}
/* The first parameter needs to be the exe itself */
sTempStr = FullPathToExe;
iPos = sTempStr.find_last_of(L"\\");
sTempStr.erase(0, iPos +1);
Parameters = sTempStr.append(Parameters);
/* CreateProcessW can modify Parameters thus we allocate needed memory */
wchar_t * pwszParam = new wchar_t[Parameters.size() + 1];
if (pwszParam == 0)
{
return 1;
}
const wchar_t* pchrTemp = Parameters.c_str();
wcscpy_s(pwszParam, Parameters.size() + 1, pchrTemp);
/* CreateProcess API initialization */
STARTUPINFOW siStartupInfo;
PROCESS_INFORMATION piProcessInfo;
memset(&siStartupInfo, 0, sizeof(siStartupInfo));
memset(&piProcessInfo, 0, sizeof(piProcessInfo));
siStartupInfo.cb = sizeof(siStartupInfo);
if (CreateProcessW(const_cast
pwszParam, 0, 0, false,
CREATE_DEFAULT_ERROR_MODE, 0, 0,
&siStartupInfo, &piProcessInfo) != false)
{
/* Watch the process. */
dwExitCode = WaitForSingleObject(piProcessInfo.hProcess, (SecondsToWait * 1000));
}
else
{
/* CreateProcess failed */
iReturnVal = GetLastError();
}
/* Free memory */
delete[]pwszParam;
pwszParam = 0;
/* Release handles */
CloseHandle(piProcessInfo.hProcess);
CloseHandle(piProcessInfo.hThread);
return iReturnVal;
}
Androidのカメラ関連のアプリケーションを起動する時”予期せずに停止しました”というエラーに
SurfaceHolder.callback()インタフェース中のpublic void surfaceDestroyed(SurfaceHolder holder){}に、setPreviewSize()を実行したい場合、Android1.6は、自由にwidthとheightを指定できるけど、Android2.0からCamera.Parameters.getSupportedPictureSizes()にカーバしてるサイズしか使えないです。サンプルコードは、次のように:
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// set up the camera parameters and begin the preview
// for Android 1.6
//Camera.Parameters parameters = camera.getParameters();
//parameters.setPreviewSize(w, h);
//camera.setParameters(parameters);
// for Android 2.0+
this._setPreviewSize(w, h);
camera.startPreview();
}
private void _setPreviewSize(int w, int h) {
Camera.Parameters params = camera.getParameters();
List supportedSizes = params.getSupportedPictureSizes();
if (supportedSizes == null) return;
for(Camera.Size size : supportedSizes) {
if(size.width <= w && size.height <= h) {
params.setPreviewSize(size.width, size.height);
camera.setParameters(params);
break;
}
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// set up the camera parameters and begin the preview
// for Android 1.6
//Camera.Parameters parameters = camera.getParameters();
//parameters.setPreviewSize(w, h);
//camera.setParameters(parameters);
// for Android 2.0+
this._setPreviewSize(w, h);
camera.startPreview();
}
private void _setPreviewSize(int w, int h) {
Camera.Parameters params = camera.getParameters();
List
if (supportedSizes == null) return;
for(Camera.Size size : supportedSizes) {
if(size.width <= w && size.height <= h) {
params.setPreviewSize(size.width, size.height);
camera.setParameters(params);
break;
}
}
}