system.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import { ipcMain } from 'electron';
  2. import { exec } from 'child_process';
  3. import { promisify } from 'util';
  4. import { getCachedAdbPath } from '../config.js';
  5. const execAsync = promisify(exec);
  6. /**
  7. * 发送系统按键事件到设备
  8. * @param {string} ipPort - 设备 ID/IP:Port
  9. * @param {string} keyCode - 按键代码(如 "4" 表示返回键,"3" 表示Home键)
  10. * @returns {Promise<{success: boolean, error?: string}>}
  11. */
  12. export async function sendSystemKey(ipPort, keyCode) {
  13. if (!ipPort) {
  14. return { success: false, error: '缺少设备 ID' };
  15. }
  16. if (typeof keyCode !== 'string') {
  17. return { success: false, error: '按键代码必须是字符串' };
  18. }
  19. try {
  20. const adbPath = getCachedAdbPath();
  21. const command = `${adbPath} -s ${ipPort} shell input keyevent ${keyCode}`;
  22. await execAsync(command, {
  23. timeout: 5000,
  24. maxBuffer: 1024 * 1024
  25. });
  26. return { success: true };
  27. } catch (error) {
  28. console.error('发送系统按键失败:', error.message);
  29. return { success: false, error: error.message };
  30. }
  31. }
  32. /**
  33. * 返回键
  34. * @param {string} ipPort - 设备 ID/IP:Port
  35. * @returns {Promise<{success: boolean, error?: string}>}
  36. */
  37. export async function sendBackKey(ipPort) {
  38. return sendSystemKey(ipPort, '4');
  39. }
  40. /**
  41. * Home键
  42. * @param {string} ipPort - 设备 ID/IP:Port
  43. * @returns {Promise<{success: boolean, error?: string}>}
  44. */
  45. export async function sendHomeKey(ipPort) {
  46. return sendSystemKey(ipPort, '3');
  47. }
  48. /**
  49. * 最近任务键
  50. * @param {string} ipPort - 设备 ID/IP:Port
  51. * @returns {Promise<{success: boolean, error?: string}>}
  52. */
  53. export async function sendRecentAppsKey(ipPort) {
  54. return sendSystemKey(ipPort, '187');
  55. }
  56. /**
  57. * 注册 IPC 处理器
  58. */
  59. export function registerIpcHandlers() {
  60. // IPC 处理程序:发送系统按键
  61. ipcMain.handle('send-system-key', async (event, ipPort, keyCode) => {
  62. return await sendSystemKey(ipPort, keyCode);
  63. });
  64. // IPC 处理程序:返回键
  65. ipcMain.handle('send-back-key', async (event, ipPort) => {
  66. return await sendBackKey(ipPort);
  67. });
  68. // IPC 处理程序:Home键
  69. ipcMain.handle('send-home-key', async (event, ipPort) => {
  70. return await sendHomeKey(ipPort);
  71. });
  72. // IPC 处理程序:最近任务键
  73. ipcMain.handle('send-recent-apps-key', async (event, ipPort) => {
  74. return await sendRecentAppsKey(ipPort);
  75. });
  76. }