您的位置:首页 > 编程语言 > VB

VB向其他程序發送消息

2008-07-10 20:27 253 查看
模擬要求:向記事本發送字符A.
編輯子窗口。範例如下:
首先在工程的Form1中加入一個ComandButton,在其中加入以下代碼:
Dim l As Long
'遍歷所有的窗口
l = EnumWindows(AddressOf EnumWindowsProc, 0)
在工程中加入一個Module,在其中加入以下代碼:
Public Declare Function EnumWindows Lib "user32" _
(ByVal lpEnumFunc As Long, ByVal lParam _
As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias _
"GetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
Declare Function ShowWindow Lib "user32" (ByVal _
hwnd As Long, ByVal nCmdShow As Long) As Long
Public Declare Function GetClName Lib "user32" Alias _
"GetClNameA" (ByVal hwnd As Long, _
ByVal lpClName As String, ByVal nMaxCount As Long) As Long
Public Declare Function EnumChildWindows Lib "user32" _
(ByVal hWndParent As Long, _
ByVal lpEnumFunc As Long, _
ByVal lParam As Long) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long

Public Const WM_CHAR = &H102
'Public Const WS_OVERLAPPED = &H0&
'Public Const WS_CAPTION = &HC00000
'Public Const WS_SYSMENU = &H80000
'Public Const WS_THICKFRAME = &H40000
'Public Const WS_MAXIMIZEBOX = &H10000
Public Const WS_MINIMIZEBOX = &H20000
'Public Const WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED _
' Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME _
' Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
Public Const WS_VISIBLE = &H10000000

'Public Const GWL_EXSTYLE = (-20)
'Public Const GWL_HWNDPARENT = (-8)
Public Const GWL_STYLE = (-16)
Public Const SW_MINIMIZE = 6

'該函數是EnumWindows的回調函數,EnumWindows函數將遍歷的
'窗口句柄傳遞到hwnd參數中
Function EnumWindowsProc(ByVal hwnd As Long, _
ByVal lParam As Long) As Long

Dim l As Long
Dim ld As Long
Dim astr As String * 256

ld = GetWindowLong(hwnd, GWL_STYLE)
'如果窗口具有最小化按鈕並且窗口是可見的就將該窗口最小化
If ((ld And WS_MINIMIZEBOX) = WS_MINIMIZEBOX) Then
If ((ld And WS_VISIBLE)) Then
GetClName hwnd, astr, 256
'Debug.Print astr
If InStr(astr, "Notepad") Then
Debug.Print hwnd
EnumChildWindows hwnd, AddressOf EnumChildProc, 0
End If
'If ShowWindow(hwnd, SW_MINIMIZE) Then
'End If
End If
End If
EnumWindowsProc = True
End Function
Function EnumChildProc(ByVal hwnd As Long, ByVal lParam As Long) As Long
Dim astr As String * 256

GetClName hwnd, astr, 256
Debug.Print astr
If InStr(astr, "Edit") Then
For i = 1 To 10
'發送字符A
SendMessage hwnd, WM_CHAR, 65, 0
Next i
End If
EnumChildProc = True
End Function

首先運行記事本程序,然後再運行程序,點擊Command1,就可以向記事本發送字符串了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vb command module