2016-03-18 58 views
0

假設您的計算機在任務管理器上運行了多個EXCEL.EXE。如何找到上次打開的EXCEL.EXE打開時間?

如何找到上次打開的EXCEL.EXE打開時間?

以下代碼不是okey,因爲每個循環都不遵循EXCEL.EXE開放命令!

For Each prog As Process In System.Diagnostics.Process.GetProcessesByName("EXCEL") 
     Label1.Text = prog.StartTime.ToString 
    Next 

回答

0

這裏的LINQ查詢找到最後/最近打開的Excel實例:

Dim latest = (
    From p In System.Diagnostics.Process.GetProcessesByName("EXCEL") 
    Order By p.StartTime Descending 
).FirstOrDefault() 
If latest IsNot Nothing Then 
    Label1.Text = latest.StartTime.ToString() 
End If 

您可以刪除Descending拿到第一/最早開業的實例。

效率不如循環高,因爲它必須對進程進行排序。 MoreLINQ有一個MaxBy方法會更好:

Dim latest = System.Diagnostics.Process.GetProcessesByName("EXCEL") _ 
    .MaxBy(Function(p) p.StartTime) 
+0

@Kramer您是否通過NuGet添加了MoreLINQ參考?您還需要「導入MoreLinq」。否則,第一個例子是標準的LINQ東西。 – Mark

+0

您的第一個代碼已正常工作。你認爲我應該添加那個參考文獻並且更喜歡使用第二個代碼嗎? – Kramer

+0

@Kramer我可能會使用第一個例子,除非我需要MoreLINQ來做其他事情。我也剛剛意識到你會想'MaxBy'而不是'MinBy'! – Mark

1

就像這樣得到最老的正在運行的實例。

Dim oldestStartTime as DateTime = DateTime.Now 
    Dim oldestProg as Process 

For Each prog As Process In System.Diagnostics.Process.GetProcessesByName("EXCEL") 
    If prog.StartTime < oldestStartTime Then 
    oldestStartTime = prog.StartTime 
    oldestProg = prog 
    End If 

Next 
+0

謝謝,但我更喜歡更專業的代碼。 – Kramer

+0

我不明白你的意思是「更專業」的代碼。你能否詳細說明你認爲對你而言意味着什麼? – StingyJack

相關問題