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,就可以向記事本發送字符串了
編輯子窗口。範例如下:
首先在工程的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.NET 使用其他用户启动程序
- 怎么让vb编写好的程序生成独立的文件啊,在其他电脑上也能独立使用?
- VB 执行其他程序并等待其结束
- VB使用ShellExecute调用其他程序
- [VB]监控关机程序:截取消息WM_QUERYENDSESSION,阻止关机
- C#通过SendMessage发送消息,改变其他程序的下拉框控件(ComboBox)的值
- 获得其他程序控件中的信息 WM_GETTEXT消息
- 使用sendMessage向其他程序发送消息
- vb利用FindWindow,GetWindowText,SendMessage查找程序并发送最小化消息
- vb删除其他程序在任务栏中的图标
- vb程序中webbrowser 接受SendMessage 的消息
- VB为自己的程序设定消息(可接收处理)
- 发送消息,修改其他程序的下拉框的选择
- [VB.NET]各们,请问如何使用vb.net编写两个进程间消息通信的程序啊
- vb利用FindWindow,GetWindowText,SendMessage查找程序并发送最小化消息
- MFC模拟点击其他程序的模态消息提示框的“确定”按钮
- c#通过SendMessage发送消息,改变其他程序的下拉框控件(ComboBox)的值
- VB使用ShellExecute调用其他程序
- VB为自己的程序设定消息(可接收处理)
- 【转】获取其他程序的按键消息,利用钩子函数