CSDN - 技术社区 - .NET技术 C#
回复 | 收藏此页 | 专题 | 公告 | 管理 | 保存 | 关闭窗口
主 题: (50分)C#如何实现本地的两个程序间的通讯?
作 者: alice_art (柔风清清) Blog 加为好友
等 级:
信 誉 值: 100
所属社区: .NET技术 C#
问题点数: 50
回复次数: 22
发表时间: 2007-4-14 16:27:27
一个是WebForm,一个是WinForm,我想让他们进行相互通信,能实现吗?通信的目的有两点:
1、激活对方程序中的事件。
2、主动向对方传递字符串,以备用。
3、获取对方程序中公开的字符串。
本人对程序间通信不是很熟,还请各位高手提供一下源代码。
zhangliu_521(浪客) ( ) 信誉:100 Blog 加为好友 2007-4-14 16:41:40 得分: 0
先做个简单的P2P先.
再在基础上添加功能
Top
alice_art(柔风清清) ( ) 信誉:100 Blog 加为好友 2007-4-14 18:16:52 得分: 0
自己再顶一下
Top
alldj(灵山妖姬) ( ) 信誉:100 Blog 加为好友 2007-4-14 18:20:48 得分: 0
weebservices,remoting,xml,三种方法都能实现。
Top
cwwhy() ( ) 信誉:98 Blog 加为好友 2007-4-14 18:40:56 得分: 0
weebservices,socket,xml,remoting四种方法都能实现。
Top
alice_art(柔风清清) ( ) 信誉:100 Blog 加为好友 2007-4-14 21:11:31 得分: 0
有代码例子吗?劳驾!
Top
siday2151(小溪哈哈) ( ) 信誉:100 Blog 加为好友 2007-4-14 21:54:02 得分: 0
1、激活对方程序中的事件。
如何通过xml来激活对方程序的事件呢?
Top
liberte() ( ) 信誉:100 Blog 加为好友 2007-4-15 0:13:29 得分: 0
Remoting
Top
qnzn() ( ) 信誉:100 Blog 加为好友 2007-4-15 0:20:22 得分: 0
//---------------------------------------------------
//接受方
//---------------------------------------------------
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;
namespace WindowsFormGetMsg
{
public partial class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.TextBox textBox1;
private System.ComponentModel.Container components = null;
const int WM_COPYDATA = 0x004A;
public Form1()
{
InitializeComponent();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.SuspendLayout();
//
// textBox1
/
/
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(432, 266);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.Name = "Form1";
this.Text = "接收方窗体";
this.ResumeLayout(false);
}
static void Main()
{
Application.Run(new Form1());
}
protected override void DefWndProc(ref System.Windows.Forms.Message m)
{
switch (m.Msg)
{
case WM_COPYDATA:
COPYDATASTRUCT mystr = new COPYDATASTRUCT();
Type mytype = mystr.GetType();
sendmessage 关闭窗口mystr = (COPYDATASTRUCT)m.GetLParam(mytype);
break;
default:
base.DefWndProc(ref m);
break;
}
}
}
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}
}
Top
qnzn() ( ) 信誉:100 Blog 加为好友 2007-4-15 0:20:56 得分: 0
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Runtime.InteropServices;
namespace WinFormSendMsg
{
public partial class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button1;
private System.ComponentModel.Container components = null;
const int WM_COPYDATA = 0x004A;
public Form1()
{
InitializeComponent();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
private void InitializeCompone
nt()
{
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// textBox1
//
//
// button1
//
this.button1.Location = new System.Drawing.Point(344, 16);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(112, 32);
this.button1.TabIndex = 1;
this.button1.Text = "button1";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(536, 142);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.button1,
this.Name = "Form1";
this.Text = "发送方窗体";
this.ResumeLayout(false);
}
static void Main()
{
Application.Run(new Form1());
}
[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(
int hWnd, // handle to destination window
int Msg, // message
int wParam, // first message parameter
ref COPYDATASTRUCT lParam // second message parameter
);
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern int FindWindow(string lpClassName, string
lpWindowName);
private void button1_Click(object sender, System.EventArgs e)
{
int WINDOW_HANDLER = FindWindow(null, @"接收方窗体");
if (WINDOW_HANDLER == 0)
{
}
else
{
byte[] sarr = System.Text.Encoding.Default.Box1.Text);
int len = sarr.Length;
COPYDATASTRUCT cds;
cds.dwData = (IntPtr)100;
cds.lpData = Box1.Text;
cds.cbData = len + 1;
SendMessage(WINDOW_HANDLER, WM_COPYDATA, 0, ref cds);
}
}
}
public struct COPYDATASTRUCT
{
public IntPtr dwData;
public int cbData;
[MarshalAs(UnmanagedType.LPStr)]
public string lpData;
}
}
Top
qnzn() ( ) 信誉:100 Blog 加为好友 2007-4-15 0:22:10 得分: 0
以上使用WM_COPYDATA实现进程间通迅
Top
zbking(刚来) ( ) 信誉:97 Blog 加为好友 2007-4-15 16:50:52 得分: 0
mark
Top
yq_net() ( ) 信誉:100 Blog 加为好友 2007-4-20 13:17:38 得分: 0
学习
Top
LeoMaya(postreetboy) ( ) 信誉:100 Blog 加为好友 2007-4-20 13:22:01 得分: 0
mark
Top
xioxu() ( ) 信誉:100 Blog 加为好友 2007-4-20 14:36:35 得分: 0
好容易 使用API的SendMessage
Top
xioxu() ( ) 信誉:100 Blog 加为好友 2007-4-20 14:37:14 得分: 0
我看 看错了 有web程序 只好webservice了
Top
DADA_dotnet(ASP.NET&C#) ( ) 信誉:98 Blog 加为好友 2007-4-20 14:38:15 得分: 0
使用HttpWebRequest
Top
pop_andy_feng(枫) ( ) 信誉:100 Blog 加为好友 2007-4-20 15:36:59 得分: 0
标记下 估计也会遇到同样的问题
期待高人解决!
Top
dixianming() ( ) 信誉:100 Blog 加为好友 2007-4-20 16:56:08 得分: 0
socket
Top
alice_art(柔风清清) ( ) 信誉:100 Blog 加为好友 2007-4-26 1:03:29 得分: 0
我是楼主,补充说明:
还是没有解决,那种最简单的方法使asp与普通程序之间通讯呢?都是在本地运行的。希望能给原代码,谢谢。
或者能不能用以下过程写个代码参考下?
1、asp传一个数字给这个进程A;
2、进程A将收到的数字乘于999。
3、进程A将结果返回asp。
4、asp将结果显示在屏幕。
Top
xzc5858(★★★★★) ( ) 信誉:100 Blog 加为好友 2007-4-26 1:08:34 得分: 0
观注
Top
a1b2c3dsi(帅帅的酷老头) ( ) 信誉:100 Blog 加为好友 2007-4-26 8:05:42 得分: 0
remoting 就可以
Top
wzd24(牧野)(衣带渐宽终不悔,为伊消得人憔悴) ( ) 信誉:100 Blog 加为好友 2007-4-26 9:54:08 得分: 0
用Remoting是最简单的实现!如果是在本机通讯的话,建议你使用IPC通道。它比TCP通道性能高很多!
Top
管理 | 关闭窗口
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论