useElectronWindow.ts 977 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import { ref } from 'vue';
  2. const isMaximized = ref(false);
  3. let _api: any = null;
  4. function api() {
  5. if (!_api) _api = (window as any).electron;
  6. return _api;
  7. }
  8. function checkMaximized() {
  9. const a = api();
  10. if (a) isMaximized.value = a.windowIsMaximized();
  11. }
  12. let _init = false;
  13. function ensureInit() {
  14. if (_init) return;
  15. _init = true;
  16. const a = api();
  17. if (!a) return;
  18. checkMaximized();
  19. window.addEventListener('resize', checkMaximized);
  20. a.ipcRenderer?.on('window:maximize-change', (_e: any, v: boolean) => {
  21. isMaximized.value = v;
  22. });
  23. }
  24. export function useElectronWindow() {
  25. ensureInit();
  26. return {
  27. isElectron: !!api(),
  28. isMaximized,
  29. getVersion: () => api()?.getVersion() || '',
  30. winMinimize: () => api()?.windowMinimize(),
  31. winMaximize: () => {
  32. const a = api();
  33. if (!a) return;
  34. if (isMaximized.value) a.windowUnmaximize();
  35. else a.windowMaximize();
  36. },
  37. winClose: () => api()?.windowClose(),
  38. };
  39. }