2016-05-23 134 views
1

我一直在尋找NPM的一些軟件包,這將允許我,對於Windows而言,只需要Linux和OSX支持就可以隱藏特定的打開窗口。例如,我希望能夠隱藏和取消隱藏記事本窗口,但是如果我打開了多個記事本窗口,我不想將它們全部隱藏起來,我只想隱藏一個特定窗口。我希望它從任務欄中隱藏,而不是僅將不透明度設置爲隱藏。隱藏電子應用程序的其他窗口/程序

有沒有人知道NPM軟件包具有此功能,或者甚至有可能嗎?

我相信這在C#中等距將從user32.dll中

感謝來的ShowWindow。

回答

2

我無法爲您找到一個開箱即用的解決方案,但是您在問題中提示了問題的答案。可以使用node-ffi從node.js/electron訪問user32.dll。

要安裝node-ffi,您需要node-gyp及其在Windows上的所有依賴關係。見https://github.com/nodejs/node-gyp#installation

接下來你需要做以下幾點:

npm install ffi 
npm install electron-rebuild 
.\node_modules\.bin\electron-rebuild.cmd 

這最後一個是重建機二進制文件的電子。

把下面的代碼塊中的電子申請:

var FFI = require('ffi'); 

function TEXT(text){ 
    return new Buffer(text, 'ucs2').toString('binary'); 
} 

var user32 = new FFI.Library('user32', { 
    'FindWindowW': ['int', ['string', 'string']], 
    'ShowWindow': ['int', ['int', 'int']] 
}); 

var handle = user32.FindWindowW(null, TEXT('Untitled - Notepad')); 
console.log(handle); 
user32.ShowWindow(handle, 0); 

啓動記事本,並確保窗口標題爲「無標題 - 記事本」。如果你啓動你的電子應用程序窗口應該隱藏,但過程依然存在。我已是證明了這確實工作視頻:https://youtu.be/4thydneqtyQ

至於你的問題下半年你會需要一些方法來找出你想隱藏的窗口...

。如果你可以使用窗口標題,那麼上面的方法將起作用。

如果你不能,那麼你需要有其他方法來通過Win32 API評估窗口並做出決定。您可以通過FFI使用EnumWindows(https://msdn.microsoft.com/en-us/library/windows/desktop/ms633497(v=vs.85).aspx)來獲取每個窗口,然後使用其他函數來檢查它並做出決定。

如果您準確提供您打算區分的方式,我會查看是否可以找到具體的解決方案。否則我的建議是研究如何通過使用C#或C++的user32.dll來完成它,然後使用FFI將結果轉換爲Electron。

+0

哦該死的兒子,你是真正的MvP。我無法對你表示感謝,你不會超越責任的範圍,像你這樣在世界各地傳揚善良的人,我希望能夠回饋一些時間。謝謝你,非常感謝。 – Ducky

+0

謝謝你的客氣話! :-)我花了一段時間才讓FFI與Electron正常工作。話雖如此,如果你有任何麻煩讓我知道,我會看看我能做些什麼來幫助。 –

+0

嘿,我發現這個http://stackoverflow.com/a/10819641/3055031使用User32.dll中的EnumWindows,明天我要試着圍繞如何讓他們在Node中工作。只是我不知道我會將「WNDENUMPROC」映射到哪種變量類型。再次感謝您的幫助,非常感謝。 – Ducky

相關問題