定时关机的小软件
来源:互联网 发布:linux命令 cp r 编辑:程序博客网 时间:2024/04/30 21:36
最近舍友突然说到shutdown -s -t 7200 这个自动关机的命令,突然想到把它写成一个小程序,就不用麻烦的去算秒了,下面是一段的代码。主要是创建了一个管道(参考网上代码的)将命令写入cmd,同时将cmd上的回复读出。这个是用MFC写的,下面是主要的代码。有点简陋,勿怪。
void CShutDownCmdDlg::CString2string(CString cstr, std::string& str)
{
DWORD dwNum=::WideCharToMultiByte(CP_ACP,NULL,cstr,-1,NULL,0,NULL,FALSE);
char* temp = new char[dwNum];
::WideCharToMultiByte(CP_ACP,NULL,cstr,-1,temp,dwNum,NULL,FALSE);
str = std::string(temp);
}
bool CShutDownCmdDlg::SisDigit(std::string & str)
{
for(int i = 0; i < str.length();i++)
{
if(!isdigit(str.at(i)))
{
return false;
}
}
return true;
}
int CShutDownCmdDlg::GetDigit(std::string & str)
{
int num = 0;
for(int i = 0; i < str.length();i++)
{
num *=10;
num += (str.at(i) - '0');
}
return num;
}
void CShutDownCmdDlg::OnClickedButtonok()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData();
CString h,m;
EHour.GetWindowTextW(h);
EMin.GetWindowTextW(m);
CString2string(h,hour);
CString2string(m,min);
if(!SisDigit(hour)||!SisDigit(min))
{
updateEditSta(_T("请保证输入的数据是数字!"));
return;
}
int num = 0;
num = GetDigit(hour)*3600;
num += GetDigit(min)*60;
CString snum;
snum.Format(_T("%d"),num);
updateEditSta(_T("将于")+snum+_T("s后关机。"));
CString cs = _T("c:\\windows\\system32\\cmd.exe /c ");
CString mcmd = _T("shutdown -s -t ");
mcmd += snum;
cs += mcmd;
LPTSTR lpsz = (LPTSTR)(LPCTSTR)cs;
UpdateData(FALSE);
SECURITY_ATTRIBUTES sa;
HANDLE hRead,hWrite;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
if (!CreatePipe(&hRead,&hWrite,&sa,0))
{
updateEditSta(_T("Error on CreatePipe()!"));
return;
}
STARTUPINFO si;
PROCESS_INFORMATION pi;
si.cb = sizeof(STARTUPINFO);
GetStartupInfo(&si);
si.hStdError = hWrite;
si.hStdOutput = hWrite;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
if (!CreateProcess(NULL,lpsz,NULL,NULL,TRUE,NULL,NULL,NULL,&si,&pi))
{
updateEditSta(_T("Error on CreateProcess()!"));
return;
}
CloseHandle(hWrite);
// system("ping google.com");
char buffer[4096];
memset(buffer,0,4096);
DWORD byteRead;
while(true)
{
if (ReadFile(hRead,buffer,4095,&byteRead,NULL) == NULL)
{
break;
}
CString m_editoutput;
m_editoutput += buffer;
updateEditSta(m_editoutput);
UpdateData(FALSE);
Sleep(200);
}
}
void CShutDownCmdDlg::updateEditSta(CString strToAppend)
{
m_EditSta.Append(L">> ");
m_EditSta.Append(strToAppend);
m_EditSta.Append(L"\r\n");
UpdateData(FALSE);
Ehint.LineScroll(Ehint.GetLineCount());
}
- 定时关机的小软件
- 定时关机软件的编程实现
- 一个定时关机的小程序
- 定时关机的小程序 .NET
- 电脑定时关机软件
- PowerOff 定时关机软件
- 定时关机软件
- 定时关机小程序
- MFC 关机小软件
- 小精灵定时关机 官网
- JAVA定时关机小程序
- python定时关机小程序
- C定时关机小程序
- JAVA编写的自动定时关机软件适用于windows下面
- 定时注销、关机、重启的小程序
- 定时关机的实现
- 对定时关机软件说NO
- 小精灵定时关机 v1.0 绿色
- CSS3阴影 box-shadow的使用和技巧总结
- VS条件调试
- powerdesign使用心得
- 国内镜像网站更新AndroidSDK 的操作
- HDU1160 FatMouse's Speed LIS变种+路径
- 定时关机的小软件
- zoj 3612 (multiset)
- Oracle BBED模拟坏块&验证坏块
- Redis 缓存 + Spring 的集成示例
- jquery-easyui简单使用
- 安卓开发学习笔记(一)
- java nio多线程引起的full gc问题
- leetcode happy number
- 并查集的路径压缩