用java生成html文件完成道理及代碼。本站提示廣大學習愛好者:(用java生成html文件完成道理及代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是用java生成html文件完成道理及代碼正文
問:
嗨,劇本專家!這是我想要完成的義務:我想要用一個劇本啟動兩個可履行文件。第一個運用法式封閉後,我想讓這個劇本封閉第二個運用法式,然撤退退卻出。若何完成上述義務?
-- MK
答:
您好,MK。您曉得,這是我們愛好的那品種型的成績。為何?由於它聽起來確切很龐雜很辣手。假如有人想找我們做甚麼事,我們便可以說“您曉得,我正在測驗考試編寫如許一個劇本:它可以或許啟動兩個運用法式,比及第一個封閉後,然後主動封閉第二個。”然後他們確定會說“噢,很負疚。很明顯,你們很忙”,然後就不找我們了。
固然,他們不曉得,這只是聽起來很艱苦。其實,它的難度也就相當於上面這個劇本罷了:
strComputer = "."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process")
errResult = objWMIService.Create("calc.exe", null, null, intCalcID)
errResult = objWMIService.Create("notepad.exe", null, null, intNotepadID)
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecNotificationQuery _
("Select * From __InstanceDeletionEvent " _
& "Within 1 Where TargetInstance ISA 'Win32_Process'")
Do Until i = 999
Set objProcess = colProcesses.NextEvent
If objProcess.TargetInstance.ProcessID = intCalcID Then
Exit Do
End If
Loop
Set colProcesses = objWMIService.ExecQuery _
("Select * from Win32_Process Where ProcessID = " & intNotepadID)
For Each objProcess in colProcesses
objProcess.Terminate()
Next
真的,請信任我們:您懂得了劇本所完成的任務後,這其實就變得相當簡略了。我們起首銜接到盤算機上的 WMI 辦事,詳細地說,綁定到 Win32_Process 類。這就是我們如今要做的:
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2:Win32_Process")
然後,我們應用 Create 辦法創立兩個新過程:Calc.exe 和 Notepad.exe。關於每一個新過程,我們應用與上面這行代碼相似的代碼:
errResult = objWMIService.Create("calc.exe", null, null, intCalcID)
我們剩下要做的只是挪用跟有以下內容的 Create 辦法:
• 可履行文件的稱號(能夠須要指定運用法式的完整途徑稱號,視您的盤算機的設置而定)。
• 一對 Null 參數。應用這兩個參數,我們可認為運用法式指定分歧的任務文件夾和設置裝備擺設某些其他啟動選項。在本示例代碼中,我們不須要斟酌這些工作,是以我們只是將參數值設置為 Null。
• 起“輸入參數”感化的變量(稱號為 intCalcID)。創立這些過程後,分派給過程的 ProcessID 號也分派給這些輸入參數變量。
終究成果是我們啟動“盤算器”,而且變量 intCalcID 中包括分派給“盤算器”實例的過程 ID。然後,我們啟動“記事本”,而且變量 intNotepadID 中包括分派給“記事本”實例的 ProcessID。這就是啟動兩個運用法式而且跟蹤它們的辦法。
下一步我們要做的是,嗯,根本沒甚麼了:我們要此劇本暫停,直到封閉“盤算器”。要完成此義務,我們從新銜接到 WMI 辦事,然後應用 ExecNotificationQuery 監督任何刪除的過程。我們須要從新銜接到 WMI 辦事是由於在劇本的開端我們只是銜接到 Win32_Process 類;是以,對象援用 (objWMIService) 只是援用此類。我們須要銜接到“通用”WMI 辦事,所以我們只是從新應用對象援用 objWMIService 並停止新銜接:
Set colProcesses = objWMIService.ExecNotificationQuery _
("Select * From __InstanceDeletionEvent " _
& "Within 1 Where TargetInstance ISA 'Win32_Process'")
這麼做的緣由安在?每次刪除一個過程,都要生成一個 __InstanceDeletionEvent 類實例。我們要檢討每一個實例,看這些實例的過程 ID 能否為目的 ID,也就是分派給 intCalcID 的 ID。假如刪除的過程具有分歧的 ID,則它不是“盤算器”實例;在這類情形下,劇本將恢復監督。假如刪除的過程具有與 intCalcID 雷同的 ID,則它必定是“盤算器”實例(由於過程 ID 必需是獨一的)。在這類情形下,我們要停滯監督,然後封閉“記事本”。
上面是現實履行監督的代碼:
Do Until i = 999
Set objProcess = colProcesses.NextEvent
If objProcess.TargetInstance.ProcessID = intCalcID Then
Exit Do
End If
Loop
這裡我們做的是設置一個輪回,該輪回一向運轉到變量 i 等於 999。如今,現實是變量 i 將一直不等於 999;這只是個小技能,確保輪回一向運轉到“盤算器”封閉。(我們若何曉得變量 i 將一直不等於 999?是如許,我們沒無為 i 賦值;是以,它取默許值 0。由於我們從未對該值停止任何更改,所以 i 一直為 0,是以將一直不等於 999。)
在輪回中,我們應用此行代碼期待下一個刪除的過程:
Set objProcess = colProcesses.NextEvent
每次刪除過程我們都檢討 ProcessID 與分派給“盤算器”的過程 ID 能否符合。假如符合,我們則應用 Exit Do 敕令斷開輪回,持續劇本。假如不具有雷同的 ID,則我們只需持續輪回,期待下一個刪除的過程。(正如我們下面所說的,i 將一直不等於 999,然則沒緊要:應用 Exit Do 敕令便可以離開輪回。)
留意。我們發明,我們有點草草擦過事宜監督的全部思緒。假如您對諸如 __InstanceDeletionEvent 和 colProcesses.NextEvent 的內容有點懵懂,請參閱劇本專家收集播送防患於已然:WMI 事宜簡介(英文)。
如今,我們只須要終止我們啟動的“記事本”實例。要完成此義務,我們應用此 WMI 查詢檢索具有分派給“記事本”的過程 ID 的一切過程的聚集:
Set colProcesses = objWMIService.ExecQuery _
("Select * from Win32_Process Where ProcessID = " & intNotepadID)
取得此聚集後,我們應用此代碼塊在全部過程集(只要一個過程)中輪回,然後應用 Terminate 辦法封閉運用法式:
For Each objProcess in colProcesses
objProcess.Terminate()
Next
趁便說一句,此辦法既實用於長途盤算機也實用當地盤算機;只需將變量 strComputer 的值更改成長途盤算機的稱號。然則,要記住,在 Windows XP 和 Windows Server 2003 中,在長途盤算機上啟動的過程是在弗成見的窗口中運轉的;它們在屏幕上弗成見。這意味著,處置長途盤算機時,關於不須要任何用戶交互的運用法式,此辦法很有效;而關於確切須要用戶干涉的運用法式,此辦法遠不及其他辦法有效(現實上完整沒用)。