張玉虎
摘 要針對LED電子顯示屏的普遍使用,結合氣象部門的特點,通過VB程序實現預報節目自動錄入電子屏,完成節目自動發送。
【關鍵詞】LED電子屏 VB 自動
1 引言
為了宣傳單位形象、展示信息,單位大門安裝單色LED電子顯示屏,這類LED顯示屏均無網絡功能,節目要通過管理軟件人工錄入,對于像氣象部門這類每天定時錄入天氣預報節目的單位及用戶,節目的錄入需安排專人完成,本文討論VB程序完成天氣預報節目的自動錄入、發送的過程。
2 LED電子屏介紹
通訊方式:RS232(直線條),支持5個節目,每個節目劃分5個區域,節目編輯、發送工具菜單如圖1。
用戶可通過“新建”菜單編輯節目,通過“發送”菜單將節目發送到電子屏顯示。
電子屏軟件安裝目錄下有一個名為:節目.led的文件,該文件包含所有節目信息,也可以通過編輯該文件實現對節目的編輯,本文通過VB程序處理該文件實現對節目的編輯,并通過程序操作鼠標點擊“發送”菜單實現預報節目的自動發送。
3 預報制作情況
預報員將每天的天氣預報信息以文本文件格式存放在局域網服務器的共享目錄下,每天固定兩次(上午06時和下午16時),文件名為:yb121-月月日日06.txt和yb121-月月日日16.txt。
4 實現過程
將LED電子屏管理的機器接入局域網服務器,在該機器硬盤建立一個存放預報信息的文件夾(D:\yb),VB程序安裝在該機器上,程序將預報節目自動拷貝到該目錄,完成處理后,發送到LED電子屏。程序設計監測、處理、發送三個模塊實現,流程圖如圖2。
4.1 監測模塊的設計
通過VB時鐘控件實現,監測模塊一旦監測到服務器共享目錄里有預報文件形成并當天未被拷貝,即拷貝文件到LED電子屏管理機器(D:\YB),調用處理模塊對文件進行處理。以下是對06時文件處理的主要代碼,16時略:
Dim jmonth As String `定義變量
Dim jday As String
Dim Filename06 as string `06時預報文件名
Timer1.Interval = 100 `時鐘初始化
If Month(Date) > 9 Then `對預報文件名“月”的處理
jmonth = Month(Date)
Else
jmonth = "0" & Month(Date)
End If
If Day(Date) > 9 Then `對預報文件名“日”的處理
jday = Day(Date)
Else
jday = "0" & Day(Date)
End If
Filename06 = "\\172.23.116.254\data\氣象服務\電視天氣預報\yb12121-" & jmonth & jday & "06.txt" `形成06時預報文件名如yb121-120106.txt。
If Dir(filename06) <> "" And Notcopy Thtn `拷貝06時文件
Copy (filename06,“D:\YB”) ` Notcopy為布爾變量,00時賦值為True,完成拷貝操作就賦值為False。
End if
4.2 處理模塊的實現
該模塊主要完成對預報文件內容提取并寫入電子屏管理軟件安裝目錄下的節目.led文件,對預報文件內容處理用VB字符處理Mid、InStr 、LTrim等函數完成。
4.3 發送模塊的實現
該模塊是整個程序的關鍵,當處理模塊將節目文件處理完成好,調用該模塊完成節目的發送工作。首先在程序窗體的“通用部分”申明鼠標操作的如下API函數:
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long) ;`按鼠標
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long '移動鼠標
程序調用SetCursorPos函數將鼠標移動到電子屏管理軟件“發送”菜單上:
Call SetCursorPos(379, 54);調用mouse_event函數實現點擊“發送”菜單,完成節目自動發送:
Call mouse_event(&H2;, 379, 54, 0, 0) '鼠標在“發送”菜單上按下。
Call mouse_event(&H4;, 379, 54, 0, 0) '鼠標在“發送”菜單上抬起。
5 幾點說明
5.1 關閉led編輯軟件
為了讓程序對鼠標完成準確操作,要及時關閉打開的led編輯軟件,發送前先關閉led編輯軟件后再打開該軟件。
打開用Shell "C:\Program Files\HG\HG.exe", 3)函數完成。
關閉led管理軟件定義Killled(Ledss As String)過程完成,該過程用到如下5.3所列的幾個API函數,在程序窗體“通用”處申明,本文略。
5.2 Killled(Ledss As String)過程
代碼如下:
Private Sub Killled(Ledss As String)
Dim Ledshot As Long
Dim Lednext As Long
Dim Ledtp As PROCESSENTRY32
Ledshot = CreateToolhelp32Snapshot(&H2;&, 0&)
If Ledshot <> -1 Then
Ledtp.dwSize = Len(Ledtp)
Lednext = Process32First(Ledshot, Ledtp)
Do While Lednext
If LCase$(Ledss) = LCase$(Left(Ledtp.szExeFile, InStr(1, Ledtp.szExeFile, Chr(0)) - 1)) Then
Dim Led1p As Long
Dim Ledcode As Long
Led1p = OpenProcess(1, False, Ledtp.th32ProcessID)
TerminateProcess Led1p, Ledcode
CloseHandle Led1p
End If
Lednext = Process32Next(Ledshot, Ledtp)
Loop
CloseHandle (Ledshot)
End If
End Sub。
5.3 Killled(Ledss As String)過程
用到的API函數:
CreateToolhelp32Snapshot,Process32First,Process32Next,OpenProcess,TerminateProcess,CloseHandle。
參考文獻
[1]劉彬彬,孫秀梅,鞏建.Visual Basic編程寶典[M].人民電子出版社,2012.
作者單位
寧夏固原市氣象局 寧夏回族自治區固原市 756000