WlBaseHelpPlugin.swift 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import Cocoa
  2. import FlutterMacOS
  3. public class WlBaseHelpPlugin: NSObject, FlutterPlugin {
  4. public static func register(with registrar: FlutterPluginRegistrar) {
  5. let channel = FlutterMethodChannel(name: "wl_base_help", binaryMessenger: registrar.messenger)
  6. let instance = WlBaseHelpPlugin()
  7. registrar.addMethodCallDelegate(instance, channel: channel)
  8. }
  9. public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
  10. switch call.method {
  11. case "getPlatformVersion":
  12. result("macOS " + ProcessInfo.processInfo.operatingSystemVersionString)
  13. case "isAdmin":
  14. result(isAdminUser())
  15. case "isProcessRunning":
  16. let processName = call.arguments as! String
  17. result(self.isProcessRunning(processName))
  18. case "killProcess":
  19. let processName = call.arguments as! String
  20. self.killProcess(processName)
  21. result(nil)
  22. default:
  23. result(FlutterMethodNotImplemented)
  24. }
  25. }
  26. private func isAdminUser() -> Bool {
  27. // 实现检查管理员逻辑
  28. // 这里仅作为示例,实际实现可能需要更复杂的系统调用
  29. let task = Process()
  30. task.launchPath = "/usr/bin/groups"
  31. let pipe = Pipe()
  32. task.standardOutput = pipe
  33. task.launch()
  34. let data = pipe.fileHandleForReading.readDataToEndOfFile()
  35. let output: String = String(data: data, encoding: .utf8) ?? ""
  36. return output.contains("admin")
  37. }
  38. private func isProcessRunning(_ processName: String) -> Bool {
  39. let runningApps = NSWorkspace.shared.runningApplications
  40. return runningApps.contains { $0.localizedName == processName }
  41. }
  42. private func killProcess(_ processName: String) {
  43. let task = Process()
  44. task.launchPath = "/usr/bin/killall"
  45. task.arguments = [processName]
  46. task.launch()
  47. }
  48. }