none
VB.NET Windowa檔案 持續偵測檔案是否執行 RRS feed

  • 問題

  • 各位先進小弟我在這裡想請教一個問題

    我想做的功能是,可以偵測某個程式(EX:記事本)是否在執行,假如有再執行就繼續偵測並不作任何反應

    但假如程式沒有在執行了,就立刻開啟程式(EX:記事本)。請各位大大幫我解惑了!感恩!!!

    2010年10月10日 上午 05:31

解答

  • Hi!

    您可以使用 Timer 定時取得目前執行中的程式(使用 Process 類別),假如沒有在執行時,則使用 Process.Start 再次執行


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年10月10日 上午 07:27
    版主
  •         Dim ok As Boolean = False
    
            For i As Integer = 0 To processList.Length - 1
                
                If processList(i).ProcessName = "notepad" Then
                    ok = True              
                    Exit For
                End If
    
            Next
    
            If Not ok Then
                System.Diagnostics.Process.Start("C:\windows\system32\notepad.exe")
            End If
    

    2010年10月11日 上午 02:49
  • Hi,

    這樣寫也可以

      Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If Process.GetProcessesByName("notepad").Count = 0 Then
          System.Diagnostics.Process.Start("C:\windows\system32\notepad.exe")
        End If
      End Sub
    


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2010年10月13日 上午 04:46

所有回覆

  • Hi!

    您可以使用 Timer 定時取得目前執行中的程式(使用 Process 類別),假如沒有在執行時,則使用 Process.Start 再次執行


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年10月10日 上午 07:27
    版主
  • Public Class Form1

        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Timer1.Enabled = True
        End Sub

        Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Dim processList() As Process

            processList = Process.GetProcesses

            Dim ok As Boolean = False
            Dim i As Integer = 0 'To processList.Length - 1

            If processList(i).ProcessName = "notpead" Then
                  ok = True
            Else If Not ok Then
                  System.Diagnostics.Process.Start("C:\windows\system32\notepad.exe")
            End If
            ok = False
        End Sub
    End Class

    ----------------------------------------------------------------------------------------------------------------------------------------------------------

    不好意思!我現在遇到的問題是他會一直開啟記事本!我希望程式執行一次並且還會持續偵測!在麻煩先進幫我解惑一下囉!謝謝!

    2010年10月11日 上午 02:26
  •         Dim ok As Boolean = False
    
            For i As Integer = 0 To processList.Length - 1
                
                If processList(i).ProcessName = "notepad" Then
                    ok = True              
                    Exit For
                End If
    
            Next
    
            If Not ok Then
                System.Diagnostics.Process.Start("C:\windows\system32\notepad.exe")
            End If
    

    2010年10月11日 上午 02:49
  • Hi,

    這樣寫也可以

      Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If Process.GetProcessesByName("notepad").Count = 0 Then
          System.Diagnostics.Process.Start("C:\windows\system32\notepad.exe")
        End If
      End Sub
    


    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2010年10月13日 上午 04:46
  • 請問一下這裡的Count是???
    2010年10月13日 上午 08:39
  • Hi!

    1. 請先參考 Process.GetProcessesByName 方法 (String) http://msdn.microsoft.com/zh-tw/library/z3w4xdc9.aspx

    2. Process.GetProcessesByName("notepad") 是擷取目前處理序名稱為 notepad 的 Process 資訊

    3. Process.GetProcessesByName("notepad").Count 是擷取目前處理序名稱為 notepad 的數量,例如您開兩個 notepad 則為 2,沒有則為 0

     


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年10月13日 上午 08:45
    版主
  • 非常感謝您!我來TRYTRY看
    2010年10月14日 上午 10:29