免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 回復 發帖

[VB.NET] 另類的遠端關機方法

原文


摘要:

先前討論過遠端關機的方法,需在電腦上啟動群組原則編輯器來設定。
        卻發現家用版的作業系統上沒那個東西,而無法使用。
        於是便想了這個法子。

VB.NET 有一個非常好用的 FileSystemWatcher
我們設定 FileSystemWatcher 監控電腦的某一個資料夾。
        當這個資料夾被存入某個特定名稱的檔案,
        便會引發 FileSystemWatcher 的事件,來進行關機的動作。

        你可以把以下程式碼編譯為執行檔,放在電腦的開機啟動夾。
        做這個動作之前,先在 C 槽開一個 Temp 資料夾。
        然後在這個資料夾上按共用,把它分享出去,
         假設這台電腦的名稱是 abc
這個路徑名稱便是 \\abc\Temp
我們在別台電腦上只要把 shutdown.txt 存入 \\abc\Temp 這個路徑,
        便會觸發關機的動作。


如果你不會寫程式,可以直接下載我做好的執行檔。


        程式碼如下:
  1. Public Class Form1

  2.     ' -----------------------------------
  3.     ' 宣告路徑及檔名。
  4.     ' 也可將路徑及檔名存在 ini 檔。
  5.     ' 程式啟動時再讀進來。
  6.     ' -----------------------------------
  7.     Dim obs_path As String = "c:\temp"
  8.     Dim obs_filename As String = "shutdown.txt"
  9.     Dim obs_fullname As String = obs_path + "\" + obs_filename
  10.     ' -----------------------------------

  11.     Private Sub Form1_FormClosing(ByVal sender As Object, _
  12.                                   ByVal e As System.Windows.Forms.FormClosingEventArgs) _
  13.                                   Handles Me.FormClosing
  14.         ' 程式結束時消滅 TrayIcon
  15.         NotifyIcon1.Dispose()
  16.         Me.Dispose()
  17.     End Sub

  18.     Private Sub Form1_Load(ByVal sender As System.Object, _
  19.                            ByVal e As System.EventArgs) Handles MyBase.Load

  20.         Try
  21.             ' --------------------------------
  22.             ' 程式一開始先砍掉監控的檔案。
  23.             ' --------------------------------
  24.             My.Computer.FileSystem.DeleteFile(obs_fullname)
  25.         Catch ex As Exception

  26.         End Try
  27.         ' -----------------------------------
  28.         ' 指定要監控的路徑和檔名。
  29.         ' -----------------------------------
  30.         Try
  31.             FileSystemWatcher1.Path = obs_path
  32.             FileSystemWatcher1.Filter = obs_filename
  33.         Catch ex As Exception
  34.             MsgBox(ex.Message)
  35.             End
  36.         End Try
  37.         ' -----------------------------------
  38.         ' 程式載入後隱藏畫面。
  39.         ' 測試時可先將下列 3 行 mark 起來。
  40.         ' -----------------------------------
  41.         Me.ShowInTaskbar = False
  42.         Me.WindowState = FormWindowState.Minimized
  43.         Me.Visible = False
  44.         ' -----------------------------------
  45.     End Sub

  46.     Private Sub FileSystemWatcher1_Changed(ByVal sender As System.Object, _
  47.                                            ByVal e As System.IO.FileSystemEventArgs) _
  48.                                            Handles FileSystemWatcher1.Changed
  49.         ' -----------------------------------
  50.         ' 當您指定的檔案被塞入受監控的位置。
  51.         ' 會引發 FileSystemWatcher1_Changed
  52.         ' e.Name 就是引發此事件的檔案名稱。
  53.         ' -----------------------------------
  54.         If e.Name = obs_filename Then
  55.             Try
  56.                 ' --------------------------------
  57.                 ' 關機前先砍掉監控的檔案。
  58.                 ' --------------------------------
  59.                 My.Computer.FileSystem.DeleteFile(obs_fullname)
  60.                 Application.DoEvents()
  61.                 ' /t 後面的數字代表幾秒後開始關機。
  62.                 Shell("shutdown /s /f /t 0")
  63.             Catch ex As Exception

  64.             End Try
  65.         End If
  66.     End Sub

  67. End Class
複製代碼
返回列表