高手帮忙 编写一个向其它程序发送消息的程序?

高手帮忙 编写一个向其它程序发送消息的程序?,第1张

呵呵。这个很简单,如果接收方只是做出收到消息的提示而已。

不过,问题深入一点的话,如果需要接收方反馈信息给发送方的话,就需要做点东西了。或者,发送方需要讲本地进程的一些变量的值发送给接收方的话,那也许要做些东西。

因为,他们不能跨进程相互访问对方的数据

就像有人试图用 SendMessage( WM_GETTEXT ...)来访问远进程的编辑框内的数据一样。直接这么仿指铅用是不能成功的。想这么做的话,必须:

方法1、使用内核对象等机制来共享数据。

方法2、注入代码到远进程来实现访问,访问后再撤销。

不知道楼主需要的是不是相互发送数据,还是仅仅是发送消息而已。

====================================================

由于最近比较忙,给你写例子的可能性不是很大。抱歉。

不过可以给你一些提示:

方案1:

发送方:

1、首先需要知道接受方处理消息的窗口句柄。

方法有很多,可以枚举所有窗口(EnumWindow),然后判断标题是不是备好接受方的窗口标题,也可以直接由发送方来创建接受方的进程(CreateProcess),然后获得接受方进程的窗口句柄。

2、使用SendMessage( 目标hWnd, 自定义的消息ID, 0L, 0L )向接受方发送消息。

如果不需要等待处理结束才返回,可以使用PostMessage,而不是SendMessage.

3、接受方的消息处理过程中添加对自定义消息的处理过程。

这种方法不能发送数据,仅仅能发送消息而已。

方案2:

1、创逗宽建内核对象,比如CMapFile。定义某种数据结构比如队列。

2、发送方或者接受方,谁先运行谁就创建该内核对象(后运行的是打开而不是创建,方法是首先试图打开,如果失败,则创建)并且使用相同的名字。

3、发送方向对象中填写数据。

4、接受方利用一个单独的线程(或者定时器)检测内核对象中的数据,一旦发现有数据,就取出,并且从内河对象中删除该数据。

这种方法不仅可以发送消息,而且可以发送任何东西。

这代码段尺发送和接收的MSDN6.0中有,在索引中键入winscok 控件,点使用 Winsock 控件

其中关于UDP

协议是一种无连接协议,两台计算机之间的传输类似于传递邮件:消息从一台计算机发送到握明高另一台计算机,但是两者之间没有明确的连接。另外,单次传输的最大数据量取决于具体的网络。

要创建一个 UDP 伙伴,请按照以下步骤执行: 

创建一个新的 Standard EXE 工程。

将缺省的窗体的名称修改为 frmPeerA。

将窗体的标题修改为“Peer A”。

在窗体中放入一个 Winsock 控件,并将其命名为 udpPeerA。

在“属性”页上,单击“协议”并将协议修改为 UDPProtocol。

在窗体中添加两个 TextBox 控件。将第一个命名为 txtSend,第二个命名为 txtOutput。

为窗体增加如下的代码。

Private Sub Form_Load()

'控件的名字为 udpPeerA

With udpPeerA

'重点:必须将 RemoteHost 的值

'修改为计算机的名字。

.RemoteHost= "PeerB" 

.RemotePort = 1001   '连接的端口号。

.Bind 1002                '绑定到本地槐岁的端口。

End With

frmPeerB.Show                 '显示第二个窗体。

End Sub

Private Sub txtSend_Change()

'在键入文本时,立即将其发送出去。

udpPeerA.SendData txtSend.Text

End Sub

Private Sub udpPeerA_DataArrival _

(ByVal bytesTotal As Long)

Dim strData As String

udpPeerA.GetData strData

txtOutput.Text = strData

End Sub

要创建第二个 UDP 伙伴,请按照以下步骤执行:

在工程中添加一个标准窗体。

将窗体的名字修改为 frmPeerB。

将窗体的标题修改为“Peer B”。

在窗体中放入一个 Winsock 控件,并将其命名为 udpPeerB。

在“属性”页上,单击“协议”并将协议修改为“UDPProtocol”。

在窗体上添加两个 TextBox 控件。将第一个命名为 txtSend,第二个命名为 txtOutput。

在窗体中添加如下的代码。

Private Sub Form_Load()

'控件的名字为 udpPeerB。

With udpPeerB

'重点:必须将 RemoteHost 的值改为

'计算机的名字。

.RemoteHost= "PeerA"

.RemotePort = 1002    '要连接的端口。

.Bind 1001                '绑定到本地的端口上。

End With

End Sub

Private Sub txtSend_Change()

'在键入后立即发送文本。

udpPeerB.SendData txtSend.Text

End Sub

Private Sub udpPeerB_DataArrival _

(ByVal bytesTotal As Long)

Dim strData As String

udpPeerB.GetData strData

txtOutput.Text = strData

End Sub


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12524140.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存