admin 1 year ago
parent
commit
ac73e851a7
2 changed files with 17 additions and 2 deletions
  1. 15 2
      example/windows/runner/main.cpp
  2. 2 0
      windows/wl_base_help_plugin.cpp

+ 15 - 2
example/windows/runner/main.cpp

@@ -1,12 +1,25 @@
-#include <flutter/dart_project.h>
+#include <flutter/dart_project.h>
 #include <flutter/flutter_view_controller.h>
 #include <windows.h>
 
 #include "flutter_window.h"
 #include "utils.h"
-
+ 
 int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
                       _In_ wchar_t *command_line, _In_ int show_command) {
+
+    if (wcsstr(command_line, L"--runas-admin") != NULL) {
+
+    }
+    else {
+        HWND hwnd = ::FindWindow(L"FLUTTER_RUNNER_WIN32_WINDOW", L"wl_base_help_example");
+        if (hwnd != NULL) {
+            //DispatchToProtocolHandler(hwnd);
+            ::ShowWindow(hwnd, SW_NORMAL);
+            ::SetForegroundWindow(hwnd);
+            return EXIT_FAILURE;
+        }
+    }
   // Attach to console when present (e.g., 'flutter run') or create a
   // new console when running with a debugger.
   if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) {

+ 2 - 0
windows/wl_base_help_plugin.cpp

@@ -204,9 +204,11 @@ void WlBaseHelpPlugin::HandleMethodCall(
                                          std::unique_ptr<flutter::MethodResult<flutter::EncodableValue>>& result){
       wchar_t szPath[MAX_PATH];
       if (GetModuleFileName(NULL, szPath, ARRAYSIZE(szPath))) {
+         std::wstring params = L"--runas-admin";
         SHELLEXECUTEINFO sei = { sizeof(sei) };
         sei.lpVerb = L"runas";
         sei.lpFile = szPath;
+        sei.lpParameters = params.c_str();
         sei.hwnd = hwnd;
         sei.nShow = SW_NORMAL;