gpt4 book ai didi

c# - 在 C# 中发送消息

转载 作者:可可西里 更新时间:2023-11-01 07:54:53 26 4
gpt4 key购买 nike

我正在创建一个应用程序,该应用程序使用连接到多个不同 DLL 的主项目。我需要能够从一个 DLL 窗口打开另一个窗口,但 DLL 不能相互引用。

有人建议我在第一个 DLL 中使用 sendmessage 函数,并在主程序中有一个监听器,将消息定向到适当的 DLL 以打开它的窗口。

但是,我对 sendmessage 函数一点都不熟悉,并且很难从我在网上找到的信息中拼凑出一些东西。

如果有人可以告诉我使用 sendmessage 函数的正确方法(如果有的话),也许听众如何捕获该消息,这将是惊人的。这是我目前获得的一些代码,我不确定我的方向是否正确。

    [DllImport("user32.dll")]
public static extern int FindWindow(string lpClassName, String lpWindowName);
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);

public void button1_Click(object sender, EventArgs e)
{
int WindowToFind = FindWindow(null, "Form1");
}

最佳答案

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 的结果功能。在上面的示例中,这将是 hwndhParent .它告诉 SendMessage将消息发送到哪个窗口的函数。

第二个参数,wMsg , 是一个常量,表示您发送的消息的 TYPE。该消息可能是击键(例如,将“回车键”或“空格键”发送到窗口),但也可能是关闭窗口的命令(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 找到。 .

接下来的两个参数是某些细节,如果需要的话。在按下某些键方面,它们将准确指定要按下哪个特定键。

C#例子,设置windowHandle的文本与 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 中设置监听器,但这些示例应该有助于理解如何发送消息。

关于c# - 在 C# 中发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5083954/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com