利用程序的返回值实现控制台程序的界面控制
2007-12-11 11:57
531 查看
最近在做和buildbot(一个持续集成工具)相关的程序 ,buildbot有一个特性,就是控制台程序全部不会谈出cmd,只是在后台运行,比如我开一个线程在后台跑,读取串口的数据,然后进行相关的处理,我如果想关闭这个串口,结束这项操作怎么告诉后台的程序呢?如果是正常情况,从键盘输入特定的字符串,或者ctrl+c就可以停止了,但是由于buildbot的自身特性,如果要实现这个功能,可能需要更改许多它本身的结构,这样不合理,而且难度较大,浪费时间。
通过研究我发现,虽然buildbot不能弹出控制台,却能弹出窗口(dialog),那么可不可以利用这点来对后台程序进行控制呢?
于是我写了一个messagebox的程序,如下
// DownLoadTool.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "DownLoadTool.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/**//////////////////////////////////////////////////////////////////////////////
// The one and only application object
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
...{
int nRetCode = 0;
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
...{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
...{
// TODO: code your application's behavior here.
switch(argc)
...{
case 2:
if (strcmp(argv[1],"disable")==0)
...{
nRetCode = 1;
break;
}
if (AfxMessageBox(argv[1],MB_YESNO, MB_ICONINFORMATION )==IDNO)
nRetCode = 1;
break;
case 3:
if (AfxMessageBox(argv[1],MB_YESNO, MB_ICONINFORMATION )==IDNO)
nRetCode = 1;
else
nRetCode = system(argv[2]);
break;
case 4:
if (atoi(argv[3])==1)
nRetCode = 1;
else
...{
if (AfxMessageBox(argv[1],MB_YESNO, MB_ICONINFORMATION )==IDYES)
nRetCode = system(argv[2]);
}
break;
default:
cout<<"MessageBox [description] [program] [disabledialog(=1,disable)]"<<endl;
nRetCode = 1;
break;
}
}
return nRetCode;
}
这个程序负责弹出一个messagebox,由参数传入messagebox的提示信息及需要启动的程序,如果启动了其他程序,则返回其他程序的返回值,如果没有启动其他程序,则返回yes(0)no(1)
在python程序和批处理(bat)中可以分别利用os.system()函数和errorlevel来判断该程序的执行情况,这样,就可以控制后台运行的程序了
通过研究我发现,虽然buildbot不能弹出控制台,却能弹出窗口(dialog),那么可不可以利用这点来对后台程序进行控制呢?
于是我写了一个messagebox的程序,如下
// DownLoadTool.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "DownLoadTool.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/**//////////////////////////////////////////////////////////////////////////////
// The one and only application object
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
...{
int nRetCode = 0;
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
...{
// TODO: change error code to suit your needs
cerr << _T("Fatal Error: MFC initialization failed") << endl;
nRetCode = 1;
}
else
...{
// TODO: code your application's behavior here.
switch(argc)
...{
case 2:
if (strcmp(argv[1],"disable")==0)
...{
nRetCode = 1;
break;
}
if (AfxMessageBox(argv[1],MB_YESNO, MB_ICONINFORMATION )==IDNO)
nRetCode = 1;
break;
case 3:
if (AfxMessageBox(argv[1],MB_YESNO, MB_ICONINFORMATION )==IDNO)
nRetCode = 1;
else
nRetCode = system(argv[2]);
break;
case 4:
if (atoi(argv[3])==1)
nRetCode = 1;
else
...{
if (AfxMessageBox(argv[1],MB_YESNO, MB_ICONINFORMATION )==IDYES)
nRetCode = system(argv[2]);
}
break;
default:
cout<<"MessageBox [description] [program] [disabledialog(=1,disable)]"<<endl;
nRetCode = 1;
break;
}
}
return nRetCode;
}
这个程序负责弹出一个messagebox,由参数传入messagebox的提示信息及需要启动的程序,如果启动了其他程序,则返回其他程序的返回值,如果没有启动其他程序,则返回yes(0)no(1)
在python程序和批处理(bat)中可以分别利用os.system()函数和errorlevel来判断该程序的执行情况,这样,就可以控制后台运行的程序了
相关文章推荐
- 在Access中利用Jquery技术实现专业的界面和权限控制的通用程序
- 利用css里expression来实现界面对象的批量控制
- 利用css里expression来实现界面对象的批量控制
- VC2010 MFC中实现printf调试功能,即MFC程序利用控制台输出调试信息
- 利用浏览器实现程序界面与实现的分离
- VC2010 MFC中实现printf调试功能,即MFC程序利用控制台输出调试信息
- 利用css里expression来实现界面对象的批量控制
- 利用css里expression来实现界面对象的批量控制
- 利用css里expression来实现界面对象的批量控制
- 利用css里expression来实现界面对象的批量控制
- VC2010 MFC中实现printf调试功能,即MFC程序利用控制台输出调试信息。
- 控制台程序实现利用CRM组织服务和SqlConnection对数据库中数据的增删改查操作
- 利用css里expression来实现界面对象的批量控制
- 利用css里expression来实现界面对象的批量控制
- 利用css里expression来实现界面对象的批量控制
- 利用css里expression来实现界面对象的批量控制
- 利用css里expression来实现界面对象的批量控制
- 利用css里expression来实现界面对象的批量控制
- 利用css里expression来实现界面对象的批量控制
- 利用css里expression来实现界面对象的批量控制