MSYY.cpp 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. // cl.exe /nologo /utf-8 /w /EHsc /Ox /DNDEBUG /MD MSYY.cpp /link rpcrt4.lib msvcrt.lib shell32.lib user32.lib gdi32.lib
  2. #include <windows.h>
  3. #include <process.h> // 添加头文件以使用 _spawnlp
  4. // 定义按钮的 ID
  5. #define ID_BUTTON_TOOLS 1
  6. #define ID_BUTTON_MOVE 2
  7. #define ID_BUTTON_CLOSE 3
  8. // 窗口过程回调函数
  9. LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
  10. switch (uMsg) {
  11. case WM_COMMAND: // 处理命令消息
  12. switch (LOWORD(wParam)) {
  13. case ID_BUTTON_TOOLS: {
  14. // 使用 pythonw.exe 后台运行 my.py 脚本,不弹出命令行窗口
  15. _spawnlp(_P_NOWAIT, "pythonw.exe", "pythonw.exe", "my.py", NULL);
  16. } break;
  17. case ID_BUTTON_MOVE: {
  18. // 移动窗口到屏幕中央的顶部
  19. MoveWindow(hwnd, GetSystemMetrics(SM_CXSCREEN) / 2, 0, 90, 30, TRUE);
  20. break;
  21. }
  22. case ID_BUTTON_CLOSE:
  23. // 发送关闭消息
  24. PostMessage(hwnd, WM_CLOSE, 0, 0);
  25. break;
  26. }
  27. break;
  28. case WM_DESTROY: // 窗口销毁时
  29. PostQuitMessage(0); // 发送退出消息
  30. return 0;
  31. default:
  32. return DefWindowProc(hwnd, uMsg, wParam, lParam); // 默认处理
  33. }
  34. return 0;
  35. }
  36. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
  37. const char CLASS_NAME[] = "NoTitleWindow"; // 窗口类名
  38. // 注册窗口类
  39. WNDCLASS wc = {};
  40. wc.lpfnWndProc = WindowProc; // 窗口过程
  41. wc.hInstance = hInstance; // 实例句柄
  42. wc.lpszClassName = CLASS_NAME; // 窗口类名
  43. wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); // 背景颜色
  44. wc.style = CS_HREDRAW | CS_VREDRAW; // 窗口样式
  45. RegisterClass(&wc); // 注册窗口类
  46. // 计算窗口位置和大小
  47. int windowWidth = 90;
  48. int windowHeight = 30;
  49. int x = (GetSystemMetrics(SM_CXSCREEN) - windowWidth) / 2; // 水平居中
  50. int y = (GetSystemMetrics(SM_CYSCREEN) - windowHeight) / 2; // 垂直居中
  51. // 创建窗口
  52. HWND hwnd = CreateWindowEx(WS_EX_TOPMOST, CLASS_NAME, NULL, WS_POPUP, x, y, windowWidth, windowHeight, NULL, NULL,
  53. hInstance, NULL);
  54. if (hwnd == NULL) {
  55. return 0; // 创建失败
  56. }
  57. // 创建工具按钮
  58. HWND hButtonTools = CreateWindow("BUTTON", "MSYY", WS_VISIBLE | WS_CHILD | BS_FLAT, 0, 0, 60, 30, hwnd,
  59. (HMENU)ID_BUTTON_TOOLS, (HINSTANCE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE), NULL);
  60. // 创建移动按钮
  61. HWND hButtonMove = CreateWindow("BUTTON", "V", WS_VISIBLE | WS_CHILD | BS_FLAT, 60, 15, 30, 15, hwnd,
  62. (HMENU)ID_BUTTON_MOVE, (HINSTANCE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE), NULL);
  63. // 创建关闭按钮
  64. HWND hButtonClose = CreateWindow("BUTTON", "X", WS_VISIBLE | WS_CHILD | BS_FLAT, 60, 0, 30, 15, hwnd,
  65. (HMENU)ID_BUTTON_CLOSE, (HINSTANCE)GetWindowLongPtr(hwnd, GWLP_HINSTANCE), NULL);
  66. ShowWindow(hwnd, nShowCmd); // 显示窗口
  67. UpdateWindow(hwnd); // 更新窗口
  68. // 消息循环
  69. MSG msg;
  70. while (GetMessage(&msg, NULL, 0, 0)) {
  71. TranslateMessage(&msg);
  72. DispatchMessage(&msg);
  73. }
  74. return 0; // 退出
  75. }