76 lines
1.8 KiB
JavaScript
76 lines
1.8 KiB
JavaScript
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();
|
||
});
|