簡體   English   中英

如何使用JScript獲取進程的主窗口句柄?

[英]How to get the main window handle of a process using JScript?

JScript中是否有任何方法通過提供進程名稱來獲取進程主窗口的句柄? Process.MainWindowHandle屬性僅在JScript .NET中有效。 經典JScript中有類似的功能嗎?

我不確定這是否有效,只需嘗試循環window.parent直到其未定義。

就像是 -

var mainWindow = window;
while( mainWindow.parent ) {
    mainWindow = mainWindow.parent;
}

您還會看到諸如window.top類的window.top ,它總是會返回您最頂層的窗口。 但不確定是否所有瀏覽器都支持此功能。

JScript和Windows Script Host沒有此功能,WMI也沒有。

如果您可以使用PowerShell,則可以使用您提到的Process.MainWindowHandle屬性:

(Get-Process notepad).MainWindowHandle

否則,您將需要找到或編寫將提供此功能的實用程序(COM對象,命令行工具等),然后從腳本中調用此工具。


編輯:因此,您需要關閉窗口-這是UI自動化任務。

Windows腳本宿主提供了非常有限的UI自動化功能。 如果您知道窗口標題,則可以嘗試使用AppActivate to和SendKeys方法來激活該窗口並向其發送Alt + F4快捷方式。 您可以找到此答案的示例。 (代碼在VBScript中,但是應該可以告訴您。)但是,這種方法並不可靠。

如果您確實不想終止該過程,那么最簡單的解決方案是使用某些第三方UI自動化工具。 例如,您可以嘗試使用免費的AutoIt工具-我認為它應該能夠滿足您的需求。


編輯2:您是否嘗試記錄關閉窗口? 您應該獲得如下腳本:

Sys.Process("notepad").Window("Notepad", "Untitled - Notepad").Close();

這不是您所需要的嗎?

對於本機win32應用程序,沒有“主窗口”之類的東西。 一個進程可以根本沒有任何窗口,也可以沒有幾個頂級“主”窗口。

好吧,一旦我不得不為Outlook編寫外接程序。 我的老板希望Outlook加載時顯示啟動屏幕。 但是Outlook窗口越過飛濺。 經過大量搜索后,我發現FindWindow http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28FINDWINDOW%29%3bk%28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4 .0%22%29%3bk%28DevLang-CSHARP%29&rd = true這對您有所幫助。 此函數根據窗口標題和窗口類名稱查找窗口。 我p調用它並從C#中使用它。 如果您可以通過JScript使用此功能,我認為它可以為您完成這項工作。 (我使用Spy ++查找lpClassName參數)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM