這樣的模式下,主機對子機間,或子機對子機間的溝通,就顯得非常重要,一般我們常見的溝通模式可能是透過讀取.txt或.ini,或者用WinSocket的傳遞方式,取得相關資訊來判斷該做什麼動作,這些方式都可以達到一對多的控制,但考慮穩定度與處理時間,這邊介紹一個通訊的方法,透過Regedit的模式來達到一樣的效果,且方法簡單,穩定,也快速.
本文的環境設定為 Win7 64bit
a.確保多台電腦 連接網路,且網域要一致,IP不重複
b.確保多台電腦 同群組
c.確保多台電腦 控制台->系統及安全性->系統管理工具->服務 裡面的Remote Registry 已啟動
d.確保多台電腦 防火牆關閉
主機端 :
開啟 regedit.exe ,在資料夾圖示上可按右鍵新增,請建立好
HKEY_CURRENT_USER\Software\ATMA\ATAE57 機碼
ATAE57 機碼內新增一個Is_Alive(Type:DWORD)的子機碼,數值暫設為99(10進位)
依據電腦身分設定ATAE57 機碼的使用權限,在資料夾圖示上方按右鍵便可看到
到這邊為止,基本上已經建立好通訊的目錄了,接著介紹如何透過程式讀取與寫入
假設.主機IP = 192.168.1.99 / 子機IP = 192.168.1.1
主機對主機 讀取語法 GetValue承接讀取的值
Dim RegistryKey As Microsoft.Win32.RegistryKey Dim GetValue As String RegistryKey = Microsoft.Win32.RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.CurrentUser, Microsoft.Win32.RegistryView.Registry64).OpenSubKey("HKEY_CURRENT_USER\Software\ATMA\ATAE57", False) GetValue = RegistryKey.GetValue("Is_Alive", "") RegistryKey.Close()
主機對主機 寫入語法 將值改為22
Dim RegistryKey As Microsoft.Win32.RegistryKey RegistryKey = Microsoft.Win32.RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.CurrentUser, Microsoft.Win32.RegistryView.Registry64).OpenSubKey("HKEY_CURRENT_USER\Software\ATMA\ATAE57", True) RegistryKey.SetValue("Is_Alive", "22") RegistryKey.Close()
子機對主機 讀取語法 GetValue承接讀取的值
Dim RegistryKey As Microsoft.Win32.RegistryKey Dim GetValue As String RegistryKey = Microsoft.Win32.RegistryKey.OpenRemoteBaseKey(Microsoft.Win32.RegistryHive.CurrentUser, "192.168.1.99", Microsoft.Win32.RegistryView.Registry64).OpenSubKey("HKEY_CURRENT_USER\Software\ATMA\ATAE57", False) GetValue = RegistryKey.GetValue("Is_Alive", "") RegistryKey.Close()
子機對主機 寫入語法 將值改為33
Dim RegistryKey As Microsoft.Win32.RegistryKey RegistryKey = Microsoft.Win32.RegistryKey.OpenRemoteBaseKey(Microsoft.Win32.RegistryHive.CurrentUser, "192.168.1.99", Microsoft.Win32.RegistryView.Registry64).OpenSubKey("HKEY_CURRENT_USER\Software\ATMA\ATAE57", True) RegistryKey.SetValue("Is_Alive", "33") RegistryKey.Close()
以上,可以同時與regedit.ext(不會自動更新 需要按F5)搭配確認是否讀取與寫入無誤!!