原文
摘要:
先前討論過遠端關機的方法,需在電腦上啟動群組原則編輯器來設定。
卻發現家用版的作業系統上沒那個東西,而無法使用。
於是便想了這個法子。
VB.NET 有一個非常好用的 FileSystemWatcher
我們設定 FileSystemWatcher 監控電腦的某一個資料夾。
當這個資料夾被存入某個特定名稱的檔案,
便會引發 FileSystemWatcher 的事件,來進行關機的動作。
你可以把以下程式碼編譯為執行檔,放在電腦的開機啟動夾。
做這個動作之前,先在 C 槽開一個 Temp 資料夾。
然後在這個資料夾上按共用,把它分享出去,
假設這台電腦的名稱是 abc
這個路徑名稱便是 \\abc\Temp
我們在別台電腦上只要把 shutdown.txt 存入 \\abc\Temp 這個路徑,
便會觸發關機的動作。
如果你不會寫程式,可以直接下載我做好的執行檔。
程式碼如下:- Public Class Form1
- ' -----------------------------------
- ' 宣告路徑及檔名。
- ' 也可將路徑及檔名存在 ini 檔。
- ' 程式啟動時再讀進來。
- ' -----------------------------------
- Dim obs_path As String = "c:\temp"
- Dim obs_filename As String = "shutdown.txt"
- Dim obs_fullname As String = obs_path + "\" + obs_filename
- ' -----------------------------------
- Private Sub Form1_FormClosing(ByVal sender As Object, _
- ByVal e As System.Windows.Forms.FormClosingEventArgs) _
- Handles Me.FormClosing
- ' 程式結束時消滅 TrayIcon
- NotifyIcon1.Dispose()
- Me.Dispose()
- End Sub
- Private Sub Form1_Load(ByVal sender As System.Object, _
- ByVal e As System.EventArgs) Handles MyBase.Load
- Try
- ' --------------------------------
- ' 程式一開始先砍掉監控的檔案。
- ' --------------------------------
- My.Computer.FileSystem.DeleteFile(obs_fullname)
- Catch ex As Exception
- End Try
- ' -----------------------------------
- ' 指定要監控的路徑和檔名。
- ' -----------------------------------
- Try
- FileSystemWatcher1.Path = obs_path
- FileSystemWatcher1.Filter = obs_filename
- Catch ex As Exception
- MsgBox(ex.Message)
- End
- End Try
- ' -----------------------------------
- ' 程式載入後隱藏畫面。
- ' 測試時可先將下列 3 行 mark 起來。
- ' -----------------------------------
- Me.ShowInTaskbar = False
- Me.WindowState = FormWindowState.Minimized
- Me.Visible = False
- ' -----------------------------------
- End Sub
- Private Sub FileSystemWatcher1_Changed(ByVal sender As System.Object, _
- ByVal e As System.IO.FileSystemEventArgs) _
- Handles FileSystemWatcher1.Changed
- ' -----------------------------------
- ' 當您指定的檔案被塞入受監控的位置。
- ' 會引發 FileSystemWatcher1_Changed
- ' e.Name 就是引發此事件的檔案名稱。
- ' -----------------------------------
- If e.Name = obs_filename Then
- Try
- ' --------------------------------
- ' 關機前先砍掉監控的檔案。
- ' --------------------------------
- My.Computer.FileSystem.DeleteFile(obs_fullname)
- Application.DoEvents()
- ' /t 後面的數字代表幾秒後開始關機。
- Shell("shutdown /s /f /t 0")
- Catch ex As Exception
- End Try
- End If
- End Sub
- End Class
複製代碼 |