[英]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.