2016-04-27 21 views
8

Tôi đang tìm cách sao chép hành vi tương tự như của Launchy/Quicksilver/Spotlight.Đưa ứng dụng điện tử lên nền trước bằng phím tắt chung (như Spotlight/Launchy)

Tôi muốn có một ứng dụng điện tử luôn chạy. Khi tôi nhấn phím tắt, ứng dụng điện tử được đưa lên nền trước và lấy nét.

Tôi hiểu rằng mô-đun globalShortcut có thể được sử dụng để liên kết một phím tắt, tuy nhiên tôi không thể tìm ra cách làm cho trình kích hoạt phím tắt đó đưa ứng dụng lên nền trước.

Bất kỳ trợ giúp sẽ được nhiều đánh giá cao ...

Trả lời

12

Hãy bắt đầu với trường hợp đơn giản và sau đó xây dựng giải pháp của chúng tôi để xử lý tốt hơn một số trường hợp cạnh.

Trường hợp đơn giản nhất có thể là hiển thị cửa sổ đã mở bất cứ khi nào phím tắt chung mà chúng tôi đăng ký được nhấn.

const path = require('path'); 
const { app, BrowserWindow, globalShortcut } = require('electron'); 

let mainWindow = null; 

app.on('ready',() => { 

    mainWindow = new BrowserWindow(); 
    mainWindow.loadURL(path.join(__dirname, 'index.html')); 

    const shortcut = globalShortcut.register('Control+Space',() => { 
    mainWindow.show(); 
    }); 

    if (!shortcut) { console.log('Registration failed.'); } 

}); 

Mã này có một số vấn đề. Tin tốt là nó vẫn hoạt động nếu cửa sổ đã được thu nhỏ. Tin xấu là nó sẽ không hoạt động nếu cửa sổ đã bị đóng. Điều này là do việc đóng cửa sổ cuối cùng thoát khỏi ứng dụng. Rất tiếc. (Thành thật mà nói, tôi hơi ngạc nhiên bởi điều này - nhưng đó là những gì sẽ xảy ra. Vì vậy, chúng ta hãy đi với nó.)

Hãy dừng điều đó xảy ra.

app.on('window-all-closed', (event) => { 
    event.preventDefault(); 
}); 

OK, ứng dụng của chúng tôi không thoát, nó sẽ bị treo.

Uncaught Exception: 
Error: Object has been destroyed 

Được rồi, được. Điều này là do cửa sổ bị phá hủy khi nó đóng. Vì vậy, chúng ta hãy không đóng nó. Hãy giấu nó đi, phải không? Trong app.on('ready',() => {…}), thêm dòng sau:

kết quả
mainWindow.on('close', (event) => { 
    event.preventDefault(); 
    mainWindow.hide(); 
}); 

Sự kết thúc trông như thế này:

const path = require('path'); 
const { app, BrowserWindow, globalShortcut } = require('electron'); 

let mainWindow = null; 

app.on('ready',() => { 

    mainWindow = new BrowserWindow(); 
    mainWindow.loadURL(path.join(__dirname, 'index.html')); 

    const shortcut = globalShortcut.register('Control+Space',() => { 
    mainWindow.show(); 
    }); 

    if (!shortcut) { console.log('Registration failed.'); } 

    mainWindow.on('close', (event) => { 
    event.preventDefault(); 
    mainWindow.hide(); 
    }); 

}); 


app.on('window-all-closed', (event) => { 
    event.preventDefault(); 
}); 

Và với điều đó, bạn nên có các chức năng cơ bản tại chỗ. Bạn nhấn phím tắt toàn cục và cửa sổ xuất hiện. Loại bỏ nó và bấm phím và xem nó xuất hiện trở lại.

Các vấn đề liên quan