Files

76 lines
1.8 KiB
JavaScript
Raw Permalink Normal View History

2026-03-25 14:14:07 +01:00
const { app, BrowserWindow, desktopCapturer, ipcMain } = require('electron');
const path = require('path');
let mainWindow;
function createWindow() {
mainWindow = new BrowserWindow({
width: 1200,
height: 800,
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
contextIsolation: true,
nodeIntegration: false,
},
});
mainWindow.loadFile('index.html');
}
ipcMain.handle('get-sources', async () => {
const sources = await desktopCapturer.getSources({
types: ['screen', 'window'],
thumbnailSize: { width: 320, height: 180 },
});
return sources.map((s) => ({
id: s.id,
name: s.name,
thumbnail: s.thumbnail.toDataURL(),
}));
});
let robotjs = null;
try {
robotjs = require('robotjs');
} catch (e) {
console.warn('robotjs nicht verfuegbar Fernsteuerung deaktiviert');
}
ipcMain.on('remote-control', (_event, data) => {
if (!robotjs) return;
try {
switch (data.action) {
case 'mousemove':
robotjs.moveMouse(Math.round(data.x), Math.round(data.y));
break;
case 'mousedown':
robotjs.mouseToggle('down', data.button || 'left');
break;
case 'mouseup':
robotjs.mouseToggle('up', data.button || 'left');
break;
case 'click':
robotjs.mouseClick(data.button || 'left');
break;
case 'keydown':
robotjs.keyToggle(data.key, 'down', data.modifiers || []);
break;
case 'keyup':
robotjs.keyToggle(data.key, 'up', data.modifiers || []);
break;
case 'scroll':
robotjs.scrollMouse(data.deltaX || 0, data.deltaY || 0);
break;
}
} catch (err) {
console.error('Fernsteuerungsfehler:', err.message);
}
});
app.whenReady().then(createWindow);
app.on('window-all-closed', () => {
app.quit();
});