public static extern int FindWindow(string lpClassName, String lpWindowName);
为了找到窗口,您需要窗口的类名。这里有些例子:
C#:
const string lpClassName = "Winamp v1.x";
IntPtr hwnd = FindWindow(lpClassName, null);
我用VB编写的程序示例:
hParent = FindWindow("TfrmMain", vbNullString)
为了得到一个窗口的类名,你需要一个叫做Win Spy的东西
获得窗口句柄后,您可以使用该SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam)
函数向其发送消息。
hWnd
,这里,是FindWindow
函数的结果。在上面的例子中,这将是hwnd
and hParent
。它告诉SendMessage
函数将消息发送到哪个窗口。
第二个参数wMsg
是一个常量,表示您要发送的消息的类型。该消息可能是击键(例如,向窗口发送“回车键”或“空格键”),但也可能是关闭窗口的命令(WM_CLOSE
),更改窗口的命令(隐藏它,显示它,最小化它,改变它的标题等),窗口内的信息请求(获取标题,获取文本框中的文本等)等等。一些常见的例子包括:
Public Const WM_CHAR = &H102
Public Const WM_SETTEXT = &HC
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_LBUTTONUP = &H202
Public Const WM_CLOSE = &H10
Public Const WM_COMMAND = &H111
Public Const WM_CLEAR = &H303
Public Const WM_DESTROY = &H2
Public Const WM_GETTEXT = &HD
Public Const WM_GETTEXTLENGTH = &HE
Public Const WM_LBUTTONDBLCLK = &H203
可以使用 API 查看器(或简单的文本编辑器,例如记事本)打开(Microsoft Visual Studio Directory)/Common/Tools/WINAPI/winapi32.txt
.
如果需要,接下来的两个参数是某些细节。在按下某些键方面,他们将准确指定要按下哪个特定键。
windowHandle
C# 示例,设置with的文本WM_SETTEXT
:
x = SendMessage(windowHandle, WM_SETTEXT, new IntPtr(0), m_strURL);
我用 VB 编写的程序的更多示例,设置程序的图标(ICON_BIG
是一个常量,可以在 中找到winapi32.txt
):
Call SendMessage(hParent, WM_SETICON, ICON_BIG, ByVal hIcon)
另一个来自 VB 的示例,按空格键(VK_SPACE
是一个常量,可以在 中找到winapi32.txt
):
Call SendMessage(button%, WM_KEYDOWN, VK_SPACE, 0)
Call SendMessage(button%, WM_KEYUP, VK_SPACE, 0)
VB发送一个按钮点击(一个左键向下,然后向上):
Call SendMessage(button%, WM_LBUTTONDOWN, 0, 0&)
Call SendMessage(button%, WM_LBUTTONUP, 0, 0&)
不知道如何在 .DLL 中设置侦听器,但这些示例应该有助于理解如何发送消息。