|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 --_--|| 于 2024-7-4 23:13 编辑
本人想做一个便携工具,目标是无参数运行时进入配置界面,有参数时进入运行参数命令。
想做到在配置界面时窗口正常显示,而带参运行时窗口隐藏
本来用#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"")宏定义可以完美隐藏,但不知道怎么再把窗口调出来
而用ShowWindow()可以做到自由隐藏和显示,但开始会出现cmd窗口闪一下才隐藏
今天特地来问问各位鱼兄,有没有好办法可以实现这个效果,感谢!!!
- /***********************
- This Is An Example
- ************************/
- #include <iostream>
- #include <Windows.h>
- //#pragma comment(linker,"/subsystem:"Windows" /entry:"mainCRTStartup"")//宏定义隐藏窗口
- using namespace std;
- void HideWindow();//隐藏窗口
- void ShowWindow();//显示窗口
- int config();//配置界面
- int main(int argc,char *argv[])
- {
- HideWindow();
- if (argc==1)//无参数运行,进入配置界面
- {
- ShowWindow();
- config();
- }
- system(argv[1]);//带参运行,运行参数
- return 0;
- }
- void HideWindow()
- {
- HWND hwnd = GetForegroundWindow();
- ShowWindow(hwnd,SW_HIDE);
- }
- void ShowWindow()
- {
- HWND hwnd = GetForegroundWindow();
- ShowWindow(hwnd,SW_NORMAL);
- }
- int config()
- {
- printf("This is Config\n");
- return 0;
- }
复制代码
- #include <windows.h>
- #include <stdlib.h>
- static LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
- HDC hdc;
- PAINTSTRUCT ps;
- RECT rect;
- switch(message) {
- case WM_PAINT:
- hdc = BeginPaint(hwnd, &ps);
- GetClientRect(hwnd, &rect);
- DrawText(hdc, TEXT("大家好,这是我的第一个窗口程序!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
- EndPaint(hwnd, &ps);
- return 0;
- case WM_DESTROY:
- PostQuitMessage(0);
- return 0;
- }
- return DefWindowProc(hwnd, message, wParam, lParam);
- }
- static int config(void) {
- AllocConsole();
- system(__argv[1]);
- system("pause");
- FreeConsole();
- return 0;
- }
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
- if(__argc != 1) return config();
-
-
- static const TCHAR szAppName[] = TEXT("MyWindows");
- HWND hwnd;
- MSG msg;
- WNDCLASS wndclass;
- wndclass.style = CS_HREDRAW | CS_VREDRAW;
- wndclass.lpfnWndProc = WndProc;
- wndclass.cbClsExtra = 0;
- wndclass.cbWndExtra = 0;
- wndclass.hInstance = hInstance;
- wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
- wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
- wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
- wndclass.lpszMenuName = NULL;
- wndclass.lpszClassName = szAppName;
- if(!RegisterClass(&wndclass)) {
- MessageBox(NULL, TEXT("这个程序需要在 Windows NT 才能执行!"), szAppName, MB_ICONERROR);
- return 0;
- }
- hwnd = CreateWindow(szAppName, TEXT("鱼C工作室"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT,
- CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
- ShowWindow(hwnd, iCmdShow);
- UpdateWindow(hwnd);
- while(GetMessage(&msg, NULL, 0, 0)) {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return msg.wParam;
- }
复制代码
|
|