【发布时间】:2017-03-28 23:32:31
【问题描述】:
在 Windows API(windows.h 头文件)的帮助下,我正在使用 Dev C++ SDK 用 C++ 语言创建一个大学项目。
我必须创建一个包含一个按钮的窗口界面,并且我想使用该按钮打开一个批处理文件 (.bat) 或运行存储在程序中的批处理代码。
我使用 Zetcode 博客上的 Windows API 教程创建了一个带有按钮的窗口。
但我无法使用该按钮打开批处理文件 (.bat) 或运行存储在程序中的批处理代码。 请告诉我在我的项目中实现这一点的代码。我正在添加我的程序代码和我的程序的屏幕截图。
#include <windows.h>
/* This is where all the input to the window goes to */
LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) {
switch(Message) {
case WM_CREATE:
CreateWindow(TEXT("button"), TEXT("Disable USB"),
WS_VISIBLE | WS_CHILD,
10, 10, 100, 25,
hwnd, (HMENU) 1, NULL, NULL
);
CreateWindow(TEXT("button"), TEXT("Enable Firewall"),
WS_VISIBLE | WS_CHILD,
120, 10, 120, 25,
hwnd, (HMENU) 2, NULL, NULL
);
break;
case WM_COMMAND:
// I need code which i can write here to execute batch code or run a bat file (.bat).
break;
/* Upon destruction, tell the main thread to stop */
case WM_DESTROY: {
PostQuitMessage(0);
break;
}
/* All other messages (a lot of them) are processed using default procedures */
default:
return DefWindowProc(hwnd, Message, wParam, lParam);
}
return 0;
}
/* The 'main' function of Win32 GUI programs: this is where execution starts */
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
WNDCLASSEX wc; /* A properties struct of our window */
HWND hwnd; /* A 'HANDLE', hence the H, or a pointer to our window */
MSG msg; /* A temporary location for all messages */
/* zero out the struct and set the stuff we want to modify */
memset(&wc,0,sizeof(wc));
wc.cbSize = sizeof(WNDCLASSEX);
wc.lpfnWndProc = WndProc; /* This is where we will send messages to */
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
/* White, COLOR_WINDOW is just a #define for a system color, try Ctrl+Clicking it */
wc.hbrBackground = (GetSysColorBrush(COLOR_3DFACE));
wc.lpszClassName = "WindowClass";
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); /* Load a standard icon */
wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); /* use the name "A" to use the project icon */
if(!RegisterClassEx(&wc)) {
MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","System Hardening Tool",WS_VISIBLE|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX,
CW_USEDEFAULT, /* x */
CW_USEDEFAULT, /* y */
640, /* width */
480, /* height */
NULL,NULL,hInstance,NULL);
if(hwnd == NULL) {
MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
return 0;
}
/*
This is the heart of our program where all input is processed and
sent to WndProc. Note that GetMessage blocks code flow until it receives something, so
this loop will not produce unreasonably high CPU usage
*/
while(GetMessage(&msg, NULL, 0, 0) > 0) { /* If no error is received... */
TranslateMessage(&msg); /* Translate key codes to chars if present */
DispatchMessage(&msg); /* Send it to WndProc */
}
return msg.wParam;
}
截图:
带有对话框和按钮的我的项目窗口
程序代码
【问题讨论】:
-
请不要发布代码图片,而是发布代码。
-
minimal reproducible example 真的意味着最小化。请解决您的问题(删除与问题无关的所有问题)。没有任何窗口代码是相关的。
标签: c++ batch-file winapi dev-c++