c++-system()函数为什么在这里会出错呢?望大神指点

问题描述

system()函数为什么在这里会出错呢?望大神指点

第一次照猫画虎的写了个win32程序,打算在程序中用system()执行外部命令,但好像有问题,不知道为什么。下面是代码,有点乱,请不要介意。

#include
#include
#include
#include
#include "resource.h"

const char szClassName[] = "myWindowClass";
NOTIFYICONDATA nid ;

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){

switch(msg){

case WM_CREATE :

    CreateWindow(TEXT("button"),TEXT("OK"),
                 WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,
                 100,120,100,30,hwnd,(HMENU)ID_BUTTON_OK,
                 ((LPCREATESTRUCT)lParam)->hInstance,NULL);
    CreateWindow(TEXT("edit"),TEXT(""),
                 WS_CHILD|WS_VISIBLE|ES_LEFT|ES_NUMBER,
                 125,70,50,30,
                 hwnd,(HMENU)ID_EDIT,((LPCREATESTRUCT)lParam)->hInstance,NULL);
break;

case WM_IAWENTRAY:

    if(wParam == IDI_MYICON){
        if(lParam == WM_LBUTTONDOWN){
            ShowWindow(hwnd, SW_SHOWNORMAL);
            printf("showWindows");
        }
    }

break;

case WM_SYSCOMMAND:

    switch(wParam)
    {
    case SC_CLOSE:

        DestroyWindow(hwnd);
        PostQuitMessage(0);

    break;

    case SC_MINIMIZE:

        ShowWindow(hwnd,SW_HIDE);
        Shell_NotifyIcon(NIM_ADD,&nid);

    break;
    }

    return DefWindowProc(hwnd,msg,wParam,lParam);

break;

case WM_CLOSE :

    DestroyWindow(hwnd);

break;

case WM_DESTROY :

    Shell_NotifyIcon(NIM_DELETE,&nid);
    PostQuitMessage(0);

break;

case WM_COMMAND :

    switch(LOWORD(wParam)){

    case ID_FILE_EXIT :
        PostMessage(hwnd,WM_CLOSE,0,0);
    break;

    case ID_BUTTON_OK :

         int length = GetWindowTextLength(GetDlgItem(hwnd, ID_EDIT));

         char command[50] = "shutdown -s -t ";

         if(length > 0) {

            char message[100] = "系统将在" ;

            char* buf = (char*)GlobalAlloc(GPTR, length + 1);

            GetDlgItemText(hwnd,ID_EDIT,buf,length+1);

            int time = atoi(buf);

            time *= 60 ;

            strcat(message,buf);

            strcat(message,"分钟后关闭");

            GlobalFree((HANDLE)buf);

            itoa(time,buf,10);

            strcat(command,buf);

            GlobalFree((HANDLE)buf);

            MessageBox(
                   NULL, TEXT(message), TEXT("提示"),
                    MB_OK | MB_ICONINFORMATION);

            system(command);    // 就是这里

            SetWindowText((HWND)lParam,"Cancle");

            PostMessage(hwnd,WM_SYSCOMMAND,SC_MINIMIZE,0);

         }else{

            MessageBox(
                   NULL, TEXT("请至少输入一些东西"), TEXT("警告"),
                    MB_OK | MB_ICONINFORMATION);

         }

         system(command);

    break;

    }

break;

default :

    return DefWindowProc(hwnd,msg,wParam,lParam);
}

return 0;

}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow){

WNDCLASSEX wc;
HWND hwnd ;
MSG msg ;

wc.cbSize = sizeof(WNDCLASSEX);
wc.style = 0;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.lpszMenuName = MAKEINTRESOURCE(IDR_MYMENU);
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_MYICON));
wc.hCursor = LoadCursor(GetModuleHandle(NULL),IDC_ARROW);
wc.hbrBackground = (HBRUSH) COLOR_BACKGROUND ;
wc.hIconSm = LoadIcon(NULL,MAKEINTRESOURCE(IDI_MYICON));
wc.lpszClassName = szClassName ;

if(!RegisterClassEx(&wc)){

    MessageBox(NULL,"some things happened in class","Error",MB_ICONEXCLAMATION|MB_OK);

    return 0;

}

hwnd = CreateWindowEx(0,szClassName,"ShutDown",WS_OVERLAPPEDWINDOW,
                      CW_USEDEFAULT,CW_USEDEFAULT,320,240,
                    NULL,NULL,hInstance,NULL);

if(hwnd == NULL){

    MessageBox(NULL,"some things happened","Error",MB_ICONEXCLAMATION|MB_OK);

    return 0;
}

ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);

nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = hwnd;
nid.uID = IDI_MYICON;
nid.uCallbackMessage=WM_IAWENTRAY ;
nid.hIcon=LoadIcon(hInstance, MAKEINTRESOURCE(IDI_MYICON));
nid.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
_tcscpy(nid.szTip,TEXT("TimeWork正在工作!rn点击打开主界面"));

while(GetMessage(&msg, NULL, 0, 0) > 0){
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}
return msg.wParam;

}

解决方案

改变为 char command[50] = "shutdown /s /t "
试试。
char command[50] = "shutdown /s";是直接关机

解决方案二:

shoudown -s -t 后面还要加个时间参数吧是不是少了个参数

时间: 2024-11-03 14:37:36

c++-system()函数为什么在这里会出错呢?望大神指点的相关文章

指针-新手OJ,C语言 去除字符串中的所有空格模块, 不知为何出错,求大神指点

问题描述 新手OJ,C语言 去除字符串中的所有空格模块, 不知为何出错,求大神指点 作用: 把数组a中的所有空格去除, 并把后面的往前移动.例如: a b c变成:abc 字符指针 *p *q 数组a[] for(p=&a[0]; p!=''; p++)if(*p==' ')for(q=p; *(q+1)!=''; q++)*q=(q+1); //去除a字符串中的空格 但总是不对, 求大神指点. 解决方案 #include<stdio.h>int main(){ char str[20

使用com.google.zxing扫描二维码返回Activity出错,求大神指点一下

问题描述 使用com.google.zxing扫描二维码返回Activity出错,求大神指点一下 调用代码 scanner_img.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { setSelected(); scanner_img.setSelected(true); scanner_text.setSelected(true); //扫描二维码 Intent inten

前端-fis2中安装jello中的插件出错,求大神指点

问题描述 fis2中安装jello中的插件出错,求大神指点 输入npm命令: npm install -g fis-parser-sass 出现这样的错误:

Arc Engine 10.2 加载符号样式文件(ESRI.ServerStyle)出错,求大神指点

问题描述 在加载ESRI.ServerStyle文件的时候出错privatevoidSymbolSelectorFrm_Load(objectsender,EventArgse){this.axSymbologyControl1.LoadStyleFile(@"C:ProgramFiles(x86)ArcGISDesktop10.2StylesESRI.ServerStyle");//确定图层的类型(点线面),设置好SymbologyControl的StyleClass,设置好各控件的

ext表单提交出错,求大神帮助

问题描述 ext表单提交出错,求大神帮助 前台页面代码如下: <%@ page language=""java"" contentType=""text/html; charset=utf-8"" pageEncoding=""utf-8""%><!DOCTYPE html PUBLIC ""-//W3C//DTD HTML 4.01 Transit

opencv刚配置好,编译出错(求大神们~)

问题描述 opencv刚配置好,编译出错(求大神们~) opencv3.0刚配置好,输入了一个简单程序 #include "stdafx.h" #include using namespace std; using namespace cv; int main(int argc, char* argv[]) { const char* imagename = "emosue.jpg"; //从文件中读入图像 Mat img = imread(imagename);

Android微信分享网络图片出错,求大神看看

问题描述 Android微信分享网络图片出错,求大神看看 学习了微信开发,发现分享文字以及本地图片都能成功,分享网络音频url链接也能成功, 但是就是分享网络图片失败(闪一下就没反映了),图片的网址是我在网上随便找的,大小只有16k,而且我在代码中通过: ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 10, outputSt

编程-c#,winform跨线程更改ui组件,出错,求大神帮帮忙

问题描述 c#,winform跨线程更改ui组件,出错,求大神帮帮忙 以下是截图: 源码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windo

linux-Linux下安装Android Studio出错,求大神解答!

问题描述 Linux下安装Android Studio出错,求大神解答! JDK都配置好了,运行 zoegreen@zoegreen-Lenovo-IdeaPad-Y470:/opt/android-studio/bin$ java -version java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) Server VM (build 24.51-b0