Ver Fonte

update 8/17 19

XKSYU2021 há 2 meses atrás
pai
commit
40823ed72b

+ 2 - 0
Ui for BDS/Function.h

@@ -14,6 +14,8 @@ void ForceStopBDS();
 
 bool SendCommand(LPCSTR command);
 bool SendCommand_WhenStop(LPCSTR command);
+bool SendCommand_WithID(const std::string& front, const std::string& id, const std::string& behind);
+
 
 void ClearLog();
 void Log(HWND hwnd);

+ 25 - 18
Ui for BDS/ID.h

@@ -5,6 +5,7 @@
 #define ID_START 10001
 #define ID_STOP 10002
 #define ID_STOP_FORCE 10003
+#define ID_DUWP 10004
 
 #define ID_CMD_KEY 20001
 #define ID_CMD_OK 20002
@@ -17,21 +18,27 @@
 #define ID_FC_Wea_ADV 30110
 #define ID_FC_Wea_OK 30120
 
-#define ID_FC_Time 30200
-#define ID_FC_Time_SET_1 30201
-#define ID_FC_Time_SET_2 30202
-#define ID_FC_Time_SET_3 30203
-#define ID_FC_Time_SET_4 30204
-#define ID_FC_Time_SET_5 30205
-#define ID_FC_Time_SET_6 30206
-#define ID_FC_Time_ADV 30210
-#define ID_FC_Time_OK 30220
-
-#define ID_FC_PLAYER 30300
-#define ID_FC_Player_OK 30310
-
-#define ID_FS_WT 40001
-#define ID_FS_LIST 40002
-
-#define ID_LOG 100101
-#define ID_LOG_CLEAR 100102
+#define ID_FC_Time 3200
+#define ID_FC_Time_SET_1 3201
+#define ID_FC_Time_SET_2 3202
+#define ID_FC_Time_SET_3 3203
+#define ID_FC_Time_SET_4 3204
+#define ID_FC_Time_SET_5 3205
+#define ID_FC_Time_SET_6 3206
+#define ID_FC_Time_ADV 3210
+#define ID_FC_Time_OK 3220
+
+#define ID_FC_PLAYER 3300
+#define ID_FC_Player_TYPE 3301
+#define ID_FC_Player_LIST 3302
+#define ID_FC_Player_TEXT_s 3311
+#define ID_FC_Player_TEXT 3312
+#define ID_FC_Player_GM_s 3313
+#define ID_FC_Player_GM 3314
+#define ID_FC_Player_OK 3320
+
+#define ID_FS_WT 4001
+#define ID_FS_LIST 4002
+
+#define ID_LOG 50101
+#define ID_LOG_CLEAR 50102

+ 8 - 134
Ui for BDS/MAIN.cpp

@@ -91,6 +91,13 @@ int WINAPI WinMain(
         hWnd, (HMENU)ID_STOP_FORCE,
         (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL
     );
+    HWND hUWP = CreateWindow(
+        L"BUTTON", L"解除回环",
+        WS_VISIBLE | WS_CHILD,
+        340, 100, 110, 40,
+        hWnd, (HMENU)ID_DUWP,
+        (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL
+    );
 
 
     HWND hLabel_2 = CreateWindow(
@@ -200,139 +207,6 @@ int WINAPI WinMain(
     return (int)msg.wParam;
 }
 
-//Behavior of controls
-InitHW(hTime);   InitHW(hWeather);   InitHW(hLog);   InitHW(hPlayer);
-LRESULT CALLBACK TimeProc(HWND hWnd1, UINT msg, WPARAM wParam, LPARAM lParam); 
-LRESULT CALLBACK WeatherProc(HWND hWnd1, UINT msg, WPARAM wParam, LPARAM lParam);
-LRESULT CALLBACK LogProc(HWND hWnd1, UINT msg, WPARAM wParam, LPARAM lParam);
-LRESULT CALLBACK PlayerProc(HWND hWnd1, UINT msg, WPARAM wParam, LPARAM lParam);
-
-LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
-    PAINTSTRUCT ps;
-    HDC hdc;
-    TCHAR greeting[] = _T("by xksyu2021\nYou must obey / 您必须遵守 Minecraft EULA.");
-
-    switch (message)
-    {
-    case WM_CREATE:
-    {
-        ClearLog();
-        //StartBDS();
-        HINSTANCE HI_Log = NULL;
-        hLog = CreateLogWindow(
-            _T("日志"),
-            1000, 690,
-            LogProc, _T("log"), HI_Log);
-        Log(GetDlgItem(hLog, ID_LOG));
-        break;
-    }
-
-    case WM_PAINT:
-        hdc = BeginPaint(hWnd, &ps);
-        TextOut(hdc,
-            5, 5,
-            greeting, _tcslen(greeting));
-        EndPaint(hWnd, &ps);
-        break;
-
-    case WM_COMMAND:
-    {
-        WORD wmId = LOWORD(wParam);
-        switch (wmId)
-        {
-        case ID_START:
-            ClearLog();
-            StartBDS();
-            break;
-        case ID_STOP:
-            StopBDS();
-            break;
-        case ID_STOP_FORCE:
-            if (MessageBox(hWnd,
-                L"强制关闭服务器是非常危险的操作!\n是否仍要继续?", TITLE,
-                MB_OKCANCEL | MB_APPLMODAL | MB_ICONWARNING)
-                == 1)
-            {
-                ForceStopBDS();
-            }
-            break;
-
-        case ID_CMD_OK:
-        {
-            if (GetWindowTextLength(GetDlgItem(hWnd, ID_CMD_KEY)) > 0)
-            {
-                char Command[1024] = { 0 };
-                GetWindowTextA(GetDlgItem(hWnd, ID_CMD_KEY), Command, 1024);
-                std::string temp(Command);
-                temp += "\n";
-                SendCommand(temp.c_str());
-            }
-            break;
-        }
-        case ID_CMD_CLEAR:
-            SetWindowText(GetDlgItem(hWnd, ID_CMD_KEY), _T(" "));
-            break;
-
-        case ID_FC_Weather:
-            if (!hWeather)
-            {
-                HINSTANCE HI_FC_weather = NULL;
-                hWeather = CreateChildWindow(hWnd,
-                    _T("天气控制"),
-                    400, 370,
-                    WeatherProc, _T("fc_wea"), HI_FC_weather);
-            }
-            break;
-        case ID_FC_Time:
-            if (!hTime)
-            {
-                HINSTANCE HI_FC_time = NULL;
-                hTime = CreateChildWindow(hWnd,
-                    _T("时间控制"),
-                    400, 415,
-                    TimeProc, _T("fc_time"), HI_FC_time);
-            }
-            break;
-        case ID_FS_WT:
-            SendCommand(C("time query daytime"));
-            SendCommand(C("weather query"));
-            break;
-
-        case ID_FC_PLAYER:
-            if (!hPlayer)
-            {
-                HINSTANCE HI_FC_player = NULL;
-                hPlayer = CreateChildWindow(hWnd,
-                    _T("玩家面板"),
-                    400, 370,
-                    PlayerProc, _T("fc_player"), HI_FC_player);
-            }
-            break;
-        case ID_FS_LIST:
-            SendCommand(C("list"));
-            break;
-        }
-        break;
-    }
-    case WM_CLOSE:
-        if (MessageBox(hWnd,
-            L"服务端若正在运行,将被一并关闭。", TITLE,
-            MB_OKCANCEL | MB_APPLMODAL | MB_ICONWARNING)
-            == 1)
-        {
-            StopBDS();
-            PostQuitMessage(0);
-        }
-        break;
-    case WM_DESTROY:
-        PostQuitMessage(0);
-        break;
-    default:
-        return DefWindowProc(hWnd, message, wParam, lParam);
-        break;
-    }
-    return 0;
-}
+LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
 
 

+ 1 - 0
Ui for BDS/Ui for BDS.vcxproj

@@ -141,6 +141,7 @@
     <ClCompile Include="cmdSend.cpp" />
     <ClCompile Include="errCheck.cpp" />
     <ClCompile Include="log.cpp" />
+    <ClCompile Include="mainProc.cpp" />
     <ClCompile Include="o&amp;c.cpp" />
     <ClCompile Include="MAIN.cpp" />
   </ItemGroup>

+ 3 - 0
Ui for BDS/Ui for BDS.vcxproj.filters

@@ -53,6 +53,9 @@
     <ClCompile Include="childProc.cpp">
       <Filter>源文件</Filter>
     </ClCompile>
+    <ClCompile Include="mainProc.cpp">
+      <Filter>源文件</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="Ui for BDS.rc">

+ 161 - 11
Ui for BDS/childProc.cpp

@@ -270,16 +270,19 @@ LRESULT CALLBACK LogProc(HWND hWnd1, UINT msg, WPARAM wParam, LPARAM lParam)
         switch (wmId)
         {
         case ID_LOG_CLEAR:
-            if (MessageBox(hWnd,
+            if (MessageBox(hWnd1,
                 L"是否要清除所有日志?", TITLE,
-                MB_OKCANCEL | MB_APPLMODAL | MB_ICONWARNING)
-                == 1)
+                MB_OKCANCEL | MB_APPLMODAL | MB_ICONQUESTION)
+                == IDOK)
             {
                 ClearLog();
                 SetWindowText(GetDlgItem(hWnd1, ID_LOG), _T("Null"));
-                break;
             }
+            break;
+        default:
+            break;
         }
+        break;
     }
     case WM_TIMER:
         Log(GetDlgItem(hLog, ID_LOG));
@@ -301,19 +304,81 @@ LRESULT CALLBACK PlayerProc(HWND hWnd1, UINT msg, WPARAM wParam, LPARAM lParam)
     case WM_CREATE:
     {
         HFONT hFont1 = Font();
-        HWND hWeaSet = CreateWindow(
-            L"BUTTON", L"快速设定",
-            WS_VISIBLE | WS_CHILD | BS_GROUPBOX,
-            20, 20, 330, 150,
+        HWND hLabel_1 = CreateWindow(
+            L"STATIC", L"操作类型",
+            WS_VISIBLE | WS_CHILD,
+            20, 20, 100, 30,
             hWnd1, NULL,
             (HINSTANCE)GetWindowLongPtr(hWnd1, GWLP_HINSTANCE), NULL
         );
+        HWND hCmdType = CreateWindow(
+            L"COMBOBOX", NULL,
+            WS_VISIBLE | WS_CHILD | CBS_DROPDOWNLIST,
+            130, 20, 200, 160,
+            hWnd1, (HMENU)ID_FC_Player_TYPE,
+            (HINSTANCE)GetWindowLongPtr(hWnd1, GWLP_HINSTANCE), NULL
+        );
+        SendMessage(hCmdType, CB_ADDSTRING, 0, (LPARAM)L"踢出服务器");
+        SendMessage(hCmdType, CB_ADDSTRING, 0, (LPARAM)L"赋予管理员权限");
+        SendMessage(hCmdType, CB_ADDSTRING, 0, (LPARAM)L"撤销管理员权限");
+        SendMessage(hCmdType, CB_ADDSTRING, 0, (LPARAM)L"更改游戏模式");
+        SendMessage(hCmdType, CB_ADDSTRING, 0, (LPARAM)L"使玩家失败");
+        SendMessage(hCmdType, CB_ADDSTRING, 0, (LPARAM)L"发送私密消息");
+
+        HWND hLabel_2 = CreateWindow(
+            L"STATIC", L"玩家ID",
+            WS_VISIBLE | WS_CHILD,
+            20, 70, 60, 30,
+            hWnd1, NULL,
+            (HINSTANCE)GetWindowLongPtr(hWnd1, GWLP_HINSTANCE), NULL
+        );
+        HWND hPlayerSelect = CreateWindow(
+            L"EDIT", NULL,
+            WS_VISIBLE | WS_CHILD | WS_BORDER | ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL,
+            20, 90, 310, 40,
+            hWnd1, (HMENU)ID_FC_Player_LIST,
+            (HINSTANCE)GetWindowLongPtr(hWnd1, GWLP_HINSTANCE), NULL
+        );
+
+        HWND hLabel_3 = CreateWindow(
+            L"STATIC", L"消息内容",
+            WS_CHILD,
+            20, 150, 90, 30,
+            hWnd1, (HMENU)ID_FC_Player_TEXT_s,
+            (HINSTANCE)GetWindowLongPtr(hWnd1, GWLP_HINSTANCE), NULL
+        );
+        HWND hText = CreateWindow(
+            L"EDIT", NULL,
+            WS_CHILD | WS_BORDER | ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL,
+            20, 170, 310, 90,
+            hWnd1, (HMENU)ID_FC_Player_TEXT,
+            (HINSTANCE)GetWindowLongPtr(hWnd1, GWLP_HINSTANCE), NULL
+        );
 
+        HWND hLabel_4 = CreateWindow(
+            L"STATIC", L"游戏模式",
+            WS_CHILD,
+            20, 150, 100, 30,
+            hWnd1, (HMENU)ID_FC_Player_GM_s,
+            (HINSTANCE)GetWindowLongPtr(hWnd1, GWLP_HINSTANCE), NULL
+        );
+        HWND hGMtype = CreateWindow(
+            L"COMBOBOX", NULL,
+            WS_CHILD | CBS_DROPDOWNLIST,
+            130, 150, 200, 160,
+            hWnd1, (HMENU)ID_FC_Player_GM,
+            (HINSTANCE)GetWindowLongPtr(hWnd1, GWLP_HINSTANCE), NULL
+        );
+        SendMessage(hGMtype, CB_ADDSTRING, 0, (LPARAM)L"冒险");
+        SendMessage(hGMtype, CB_ADDSTRING, 0, (LPARAM)L"生存");
+        SendMessage(hGMtype, CB_ADDSTRING, 0, (LPARAM)L"创造");
+        SendMessage(hGMtype, CB_ADDSTRING, 0, (LPARAM)L"旁观");
 
-        HWND hWeaOK = CreateWindow(
+
+        HWND hPlayerOK = CreateWindow(
             L"BUTTON", L"提交",
             WS_VISIBLE | WS_CHILD,
-            250, 300, 110, 40,
+            220, 280, 110, 40,
             hWnd1, (HMENU)ID_FC_Player_OK,
             (HINSTANCE)GetWindowLongPtr(hWnd1, GWLP_HINSTANCE), NULL
         );
@@ -324,12 +389,97 @@ LRESULT CALLBACK PlayerProc(HWND hWnd1, UINT msg, WPARAM wParam, LPARAM lParam)
     case WM_COMMAND:
     {
         WORD wmId = LOWORD(wParam);
+
+        WORD wmEvent = HIWORD(wParam);
+        if (wmEvent == CBN_SELCHANGE && wmId == ID_FC_Player_TYPE)
+        {
+            int selected = SendMessage(GetDlgItem(hWnd1, ID_FC_Player_TYPE), CB_GETCURSEL, 0, 0);
+            ShowWindow(GetDlgItem(hWnd1, ID_FC_Player_GM), SW_HIDE);
+            ShowWindow(GetDlgItem(hWnd1, ID_FC_Player_TEXT), SW_HIDE);
+            ShowWindow(GetDlgItem(hWnd1, ID_FC_Player_GM_s), SW_HIDE);
+            ShowWindow(GetDlgItem(hWnd1, ID_FC_Player_TEXT_s), SW_HIDE);
+            switch (selected)
+            {
+            case 3:
+                ShowWindow(GetDlgItem(hWnd1, ID_FC_Player_GM), SW_SHOW);
+                ShowWindow(GetDlgItem(hWnd1, ID_FC_Player_GM_s), SW_SHOW);
+                break;
+            case 5:
+                ShowWindow(GetDlgItem(hWnd1, ID_FC_Player_TEXT), SW_SHOW);
+                ShowWindow(GetDlgItem(hWnd1, ID_FC_Player_TEXT_s), SW_SHOW);
+                break;
+            }
+        }
+
         switch (wmId)
         {
         case ID_FC_Player_OK:
+        {
+            char ID[512] = {0};
+            char TEXT[2048] = { 0 };
+            GetWindowTextA(GetDlgItem(hWnd1, ID_FC_Player_LIST), ID, 512);
+            GetWindowTextA(GetDlgItem(hWnd1, ID_FC_Player_TEXT), TEXT, 512);
+            int type = SendMessage(GetDlgItem(hWnd1, ID_FC_Player_TYPE), CB_GETCURSEL, 0, 0);
+            switch (type)
+            {
+            case 0:
+            {
+                SendCommand_WithID("kick", ID, "");
+                break;
+            }
+            case 1:
+            {
+                SendCommand_WithID("op", ID, "");
+                break;
+            }
+            case 2:
+            {
+                SendCommand_WithID("deop", ID, "");
+                break;
+            }
+            case 3:
+            {
+                int gm = SendMessage(GetDlgItem(hWnd1, ID_FC_Player_GM), CB_GETCURSEL, 0, 0);
+                switch (gm)
+                {
+                case 0:
+                {
+                    SendCommand_WithID("gamemode 2", ID, "");
+                    break;
+                }
+                case 1:
+                {
+                    SendCommand_WithID("gamemode 0", ID, "");
+                    break;
+                }
+                case 2:
+                {
+                    SendCommand_WithID("gamemode 1", ID, "");
+                    break;
+                }
+                case 3:
+                {
+                    SendCommand_WithID("gamemode 3", ID, "");
+                    break;
+                }
+                default:
+                    break;
+                }
+            }
+            case 4:
+            {
+                SendCommand_WithID("kill", ID, "");
+                break;
+            }
+            case 5:
+                SendCommand_WithID("msg", ID, TEXT);
+                break;
+            }
 
+            MessageBox(hWnd1, L"已发送指令", TITLE, MB_OK);
             DestroyWindow(hWnd1);
             break;
+        }
 
         default:
             break;
@@ -349,4 +499,4 @@ LRESULT CALLBACK PlayerProc(HWND hWnd1, UINT msg, WPARAM wParam, LPARAM lParam)
     }
     return 0;
     return 0;
-}
+}

+ 6 - 0
Ui for BDS/cmdSend.cpp

@@ -31,4 +31,10 @@ bool SendCommand_WhenStop(LPCSTR command)
 	{
 		return false;
 	}
+}
+
+bool SendCommand_WithID(const std::string& front, const std::string& id, const std::string& behind)
+{
+	std::string temp = front + " " + id + " " + behind + "\n";
+	return SendCommand(temp.c_str());
 }

+ 147 - 0
Ui for BDS/mainProc.cpp

@@ -0,0 +1,147 @@
+#include "Win32.h"
+#include "ID.h"
+#include "Function.h"
+#include "SharedValue.h"
+
+InitHW(hTime);   InitHW(hWeather);   InitHW(hLog);   InitHW(hPlayer);
+
+LRESULT CALLBACK TimeProc(HWND hWnd1, UINT msg, WPARAM wParam, LPARAM lParam);
+LRESULT CALLBACK WeatherProc(HWND hWnd1, UINT msg, WPARAM wParam, LPARAM lParam);
+LRESULT CALLBACK LogProc(HWND hWnd1, UINT msg, WPARAM wParam, LPARAM lParam);
+LRESULT CALLBACK PlayerProc(HWND hWnd1, UINT msg, WPARAM wParam, LPARAM lParam);
+
+LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+    PAINTSTRUCT ps;
+    HDC hdc;
+    TCHAR greeting[] = _T("by xksyu2021\nYou must obey / 您必须遵守 Minecraft EULA.");
+
+    switch (message)
+    {
+    case WM_CREATE:
+    {
+        ClearLog();
+        //StartBDS();
+        HINSTANCE HI_Log = NULL;
+        hLog = CreateLogWindow(
+            _T("日志"),
+            1000, 690,
+            LogProc, _T("log"), HI_Log);
+        Log(GetDlgItem(hLog, ID_LOG));
+        break;
+    }
+
+    case WM_PAINT:
+        hdc = BeginPaint(hWnd, &ps);
+        TextOut(hdc,
+            5, 5,
+            greeting, _tcslen(greeting));
+        EndPaint(hWnd, &ps);
+        break;
+
+    case WM_COMMAND:
+    {
+        WORD wmId = LOWORD(wParam);
+        switch (wmId)
+        {
+        case ID_START:
+            ClearLog();
+            StartBDS();
+            break;
+        case ID_STOP:
+            StopBDS();
+            break;
+        case ID_STOP_FORCE:
+            if (MessageBox(hWnd,
+                L"强制关闭服务器是非常危险的操作!\n是否仍要继续?", TITLE,
+                MB_OKCANCEL | MB_APPLMODAL | MB_ICONWARNING)
+                == 1)
+            {
+                ForceStopBDS();
+            }
+            break;
+
+        case ID_DUWP:
+            ShellExecute(
+                NULL, L"open",
+                L"C:\\windows\\system32\\cmd.exe",
+                L"/c start powershell.exe -Command \"Get-ChildItem -Path Registry::'HKCU\\Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\CurrentVersion\\AppContainer\\Mappings\\' -name | ForEach-Object {CheckNetIsolation.exe LoopbackExempt -a -p=$_}\"" ,               
+                NULL, SW_SHOWNORMAL
+            );
+            break;
+        case ID_CMD_OK:
+        {
+            if (GetWindowTextLength(GetDlgItem(hWnd, ID_CMD_KEY)) > 0)
+            {
+                char Command[1024] = { 0 };
+                GetWindowTextA(GetDlgItem(hWnd, ID_CMD_KEY), Command, 1024);
+                std::string temp(Command);
+                temp += "\n";
+                SendCommand(temp.c_str());
+            }
+            break;
+        }
+        case ID_CMD_CLEAR:
+            SetWindowText(GetDlgItem(hWnd, ID_CMD_KEY), _T(" "));
+            break;
+
+        case ID_FC_Weather:
+            if (!hWeather)
+            {
+                HINSTANCE HI_FC_weather = NULL;
+                hWeather = CreateChildWindow(hWnd,
+                    _T("天气控制"),
+                    400, 370,
+                    WeatherProc, _T("fc_wea"), HI_FC_weather);
+            }
+            break;
+        case ID_FC_Time:
+            if (!hTime)
+            {
+                HINSTANCE HI_FC_time = NULL;
+                hTime = CreateChildWindow(hWnd,
+                    _T("时间控制"),
+                    400, 415,
+                    TimeProc, _T("fc_time"), HI_FC_time);
+            }
+            break;
+        case ID_FS_WT:
+            SendCommand(C("time query daytime"));
+            SendCommand(C("weather query"));
+            break;
+
+        case ID_FC_PLAYER:
+            if (!hPlayer)
+            {
+                HINSTANCE HI_FC_player = NULL;
+                hPlayer = CreateChildWindow(hWnd,
+                    _T("玩家面板"),
+                    380, 390,
+                    PlayerProc, _T("fc_player"), HI_FC_player);
+            }
+            break;
+        case ID_FS_LIST:
+            SendCommand(C("list"));
+            break;
+        }
+        break;
+    }
+    case WM_CLOSE:
+        if (MessageBox(hWnd,
+            L"您正在关闭主程序!\n若服务端正在运行,将被一并正常关闭。\n若有正在执行的任务,将被强行停止。", TITLE,
+            MB_OKCANCEL | MB_OKCANCEL | MB_ICONWARNING)
+            == 1)
+        {
+            StopBDS();
+            PostQuitMessage(0);
+        }
+        break;
+    case WM_DESTROY:
+        PostQuitMessage(0);
+        break;
+    default:
+        return DefWindowProc(hWnd, message, wParam, lParam);
+        break;
+    }
+    return 0;
+}