|  | @@ -1,73 +1,91 @@
 | 
	
		
			
				|  |  | +// cl.exe /nologo /utf-8 /w /EHsc /Ox /DNDEBUG /MD MSYY.cpp  /link  rpcrt4.lib msvcrt.lib shell32.lib user32.lib gdi32.lib
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  #include <windows.h>
 | 
	
		
			
				|  |  |  #include <process.h> // 添加头文件以使用 _spawnlp
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// 定义按钮的 ID
 | 
	
		
			
				|  |  |  #define ID_BUTTON_TOOLS 1
 | 
	
		
			
				|  |  |  #define ID_BUTTON_MOVE 2
 | 
	
		
			
				|  |  |  #define ID_BUTTON_CLOSE 3
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +// 窗口过程回调函数
 | 
	
		
			
				|  |  |  LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
 | 
	
		
			
				|  |  | -  switch (uMsg) {
 | 
	
		
			
				|  |  | -  case WM_COMMAND:
 | 
	
		
			
				|  |  | -    switch (LOWORD(wParam)) {
 | 
	
		
			
				|  |  | -    case ID_BUTTON_TOOLS: {
 | 
	
		
			
				|  |  | -      // MessageBox(hwnd, "正在运行 Python 脚本...", "Info", MB_OK);
 | 
	
		
			
				|  |  | -      // 后台运行 python.exe my.py
 | 
	
		
			
				|  |  | -      _spawnlp(_P_NOWAIT, "python.exe", "python.exe", "my.py", NULL);
 | 
	
		
			
				|  |  | -    } break;
 | 
	
		
			
				|  |  | +    switch (uMsg) {
 | 
	
		
			
				|  |  | +    case WM_COMMAND: // 处理命令消息
 | 
	
		
			
				|  |  | +        switch (LOWORD(wParam)) {
 | 
	
		
			
				|  |  | +        case ID_BUTTON_TOOLS: {
 | 
	
		
			
				|  |  | +            // 使用 pythonw.exe 后台运行 my.py 脚本,不弹出命令行窗口
 | 
	
		
			
				|  |  | +            _spawnlp(_P_NOWAIT, "pythonw.exe", "pythonw.exe", "my.py", NULL);
 | 
	
		
			
				|  |  | +        } break;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    case ID_BUTTON_MOVE: {
 | 
	
		
			
				|  |  | -      MoveWindow(hwnd, GetSystemMetrics(SM_CXSCREEN) / 2, 0, 90, 30, TRUE);
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    case ID_BUTTON_CLOSE:
 | 
	
		
			
				|  |  | -      PostMessage(hwnd, WM_CLOSE, 0, 0);
 | 
	
		
			
				|  |  | -      break;
 | 
	
		
			
				|  |  | +        case ID_BUTTON_MOVE: {
 | 
	
		
			
				|  |  | +            // 移动窗口到屏幕中央的顶部
 | 
	
		
			
				|  |  | +            MoveWindow(hwnd, GetSystemMetrics(SM_CXSCREEN) / 2, 0, 90, 30, TRUE);
 | 
	
		
			
				|  |  | +            break;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        case ID_BUTTON_CLOSE:
 | 
	
		
			
				|  |  | +            // 发送关闭消息
 | 
	
		
			
				|  |  | +            PostMessage(hwnd, WM_CLOSE, 0, 0);
 | 
	
		
			
				|  |  | +            break;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    case WM_DESTROY: // 窗口销毁时
 | 
	
		
			
				|  |  | +        PostQuitMessage(0); // 发送退出消息
 | 
	
		
			
				|  |  | +        return 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    default:
 | 
	
		
			
				|  |  | +        return DefWindowProc(hwnd, uMsg, wParam, lParam); // 默认处理
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    break;
 | 
	
		
			
				|  |  | -  case WM_DESTROY:
 | 
	
		
			
				|  |  | -    PostQuitMessage(0);
 | 
	
		
			
				|  |  |      return 0;
 | 
	
		
			
				|  |  | -  default:
 | 
	
		
			
				|  |  | -    return DefWindowProc(hwnd, uMsg, wParam, lParam);
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  return 0;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
 | 
	
		
			
				|  |  | -  const char CLASS_NAME[] = "NoTitleWindow";
 | 
	
		
			
				|  |  | +    const char CLASS_NAME[] = "NoTitleWindow"; // 窗口类名
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  WNDCLASS wc = {};
 | 
	
		
			
				|  |  | -  wc.lpfnWndProc = WindowProc;
 | 
	
		
			
				|  |  | -  wc.hInstance = hInstance;
 | 
	
		
			
				|  |  | -  wc.lpszClassName = CLASS_NAME;
 | 
	
		
			
				|  |  | -  wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
 | 
	
		
			
				|  |  | -  wc.style = CS_HREDRAW | CS_VREDRAW;
 | 
	
		
			
				|  |  | +    // 注册窗口类
 | 
	
		
			
				|  |  | +    WNDCLASS wc = {};
 | 
	
		
			
				|  |  | +    wc.lpfnWndProc = WindowProc; // 窗口过程
 | 
	
		
			
				|  |  | +    wc.hInstance = hInstance; // 实例句柄
 | 
	
		
			
				|  |  | +    wc.lpszClassName = CLASS_NAME; // 窗口类名
 | 
	
		
			
				|  |  | +    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // 背景颜色
 | 
	
		
			
				|  |  | +    wc.style = CS_HREDRAW | CS_VREDRAW; // 窗口样式
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  RegisterClass(&wc);
 | 
	
		
			
				|  |  | -  int windowWidth = 90;
 | 
	
		
			
				|  |  | -  int windowHeight = 30;
 | 
	
		
			
				|  |  | -  int x = (GetSystemMetrics(SM_CXSCREEN) - windowWidth) / 2;
 | 
	
		
			
				|  |  | -  int y = (GetSystemMetrics(SM_CYSCREEN) - windowHeight) / 2;
 | 
	
		
			
				|  |  | +    RegisterClass(&wc); // 注册窗口类
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  HWND hwnd = CreateWindowEx(WS_EX_TOPMOST, CLASS_NAME, NULL, WS_POPUP, x, y, windowWidth, windowHeight, NULL, NULL,
 | 
	
		
			
				|  |  | -                             hInstance, NULL);
 | 
	
		
			
				|  |  | -  if (hwnd == NULL) {
 | 
	
		
			
				|  |  | -    return 0;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | +    // 计算窗口位置和大小
 | 
	
		
			
				|  |  | +    int windowWidth = 90;
 | 
	
		
			
				|  |  | +    int windowHeight = 30;
 | 
	
		
			
				|  |  | +    int x = (GetSystemMetrics(SM_CXSCREEN) - windowWidth) / 2; // 水平居中
 | 
	
		
			
				|  |  | +    int y = (GetSystemMetrics(SM_CYSCREEN) - windowHeight) / 2; // 垂直居中
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  HWND hButtonTools = CreateWindow("BUTTON", "MSYY", WS_VISIBLE | WS_CHILD | BS_FLAT, 0, 0, 60, 30, hwnd,
 | 
	
		
			
				|  |  | -                                   (HMENU)ID_BUTTON_TOOLS, (HINSTANCE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE), NULL);
 | 
	
		
			
				|  |  | -  HWND hButtonMove = CreateWindow("BUTTON", "V", WS_VISIBLE | WS_CHILD | BS_FLAT, 60, 15, 30, 15, hwnd,
 | 
	
		
			
				|  |  | -                                  (HMENU)ID_BUTTON_MOVE, (HINSTANCE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE), NULL);
 | 
	
		
			
				|  |  | -  HWND hButtonClose = CreateWindow("BUTTON", "X", WS_VISIBLE | WS_CHILD | BS_FLAT, 60, 0, 30, 15, hwnd,
 | 
	
		
			
				|  |  | -                                   (HMENU)ID_BUTTON_CLOSE, (HINSTANCE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE), NULL);
 | 
	
		
			
				|  |  | -  ShowWindow(hwnd, nShowCmd);
 | 
	
		
			
				|  |  | -  UpdateWindow(hwnd);
 | 
	
		
			
				|  |  | +    // 创建窗口
 | 
	
		
			
				|  |  | +    HWND hwnd = CreateWindowEx(WS_EX_TOPMOST, CLASS_NAME, NULL, WS_POPUP, x, y, windowWidth, windowHeight, NULL, NULL,
 | 
	
		
			
				|  |  | +                               hInstance, NULL);
 | 
	
		
			
				|  |  | +    if (hwnd == NULL) {
 | 
	
		
			
				|  |  | +        return 0; // 创建失败
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 创建工具按钮
 | 
	
		
			
				|  |  | +    HWND hButtonTools = CreateWindow("BUTTON", "MSYY", WS_VISIBLE | WS_CHILD | BS_FLAT, 0, 0, 60, 30, hwnd,
 | 
	
		
			
				|  |  | +                                     (HMENU)ID_BUTTON_TOOLS, (HINSTANCE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE), NULL);
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // 创建移动按钮
 | 
	
		
			
				|  |  | +    HWND hButtonMove = CreateWindow("BUTTON", "V", WS_VISIBLE | WS_CHILD | BS_FLAT, 60, 15, 30, 15, hwnd,
 | 
	
		
			
				|  |  | +                                    (HMENU)ID_BUTTON_MOVE, (HINSTANCE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE), NULL);
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    // 创建关闭按钮
 | 
	
		
			
				|  |  | +    HWND hButtonClose = CreateWindow("BUTTON", "X", WS_VISIBLE | WS_CHILD | BS_FLAT, 60, 0, 30, 15, hwnd,
 | 
	
		
			
				|  |  | +                                     (HMENU)ID_BUTTON_CLOSE, (HINSTANCE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE), NULL);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  MSG msg;
 | 
	
		
			
				|  |  | -  while (GetMessage(&msg, NULL, 0, 0)) {
 | 
	
		
			
				|  |  | -    TranslateMessage(&msg);
 | 
	
		
			
				|  |  | -    DispatchMessage(&msg);
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  return 0;
 | 
	
		
			
				|  |  | +    ShowWindow(hwnd, nShowCmd); // 显示窗口
 | 
	
		
			
				|  |  | +    UpdateWindow(hwnd); // 更新窗口
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    // 消息循环
 | 
	
		
			
				|  |  | +    MSG msg;
 | 
	
		
			
				|  |  | +    while (GetMessage(&msg, NULL, 0, 0)) {
 | 
	
		
			
				|  |  | +        TranslateMessage(&msg);
 | 
	
		
			
				|  |  | +        DispatchMessage(&msg);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    return 0; // 退出
 | 
	
		
			
				|  |  |  }
 |