system()函数为什么在这里会出错呢?望大神指点-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

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

2016-03-04 17:16:38 2224 0

第一次照猫画虎的写了个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正在工作!\r\n点击打开主界面"));


while(GetMessage(&msg, NULL, 0, 0) > 0){
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}
return msg.wParam;
}
取消 提交回答
全部回答(0)
相关问答

1

回答

ECS架构中的System是什么?

2022-05-11 09:13:49 164浏览量 回答数 1

1

回答

ECS架构中的System是什么?

2022-05-09 13:59:33 126浏览量 回答数 1

1

回答

RocketMQ中为什么设置的 CONSUME_FROM_LAST_OFFSET,但消费组是从消息队

2021-11-27 18:37:05 276浏览量 回答数 1

1

回答

Java System类的常用的方法有哪些?

2021-11-01 18:51:10 138浏览量 回答数 1

1

回答

什么是更有效的:System.arraycopy或Arrays.copyOf?

2020-02-08 20:27:38 359浏览量 回答数 1

1

回答

System V消息队列与posix消息队列测试

2019-12-29 20:40:36 1464浏览量 回答数 1

0

回答

得到一个无法得到<类的通知。模型的报告。用于连接到Postgres数据库的django通知的Noti

2019-12-25 22:21:38 288浏览量 回答数 0

1

回答

80端口被system占用

2018-12-07 18:22:21 433浏览量 回答数 1

0

回答

Taskitem数据类型的作用?

2017-10-24 11:33:19 2705浏览量 回答数 0

1

回答

无法将类型为“System.Int32”的对象强制转换为类型“System.Array”

2016-06-07 14:41:15 2999浏览量 回答数 1
+关注
文章
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载