现在有程序A和程序BA 等待B发送命令 A收到命令后发送文本给BB接受A发送的文本,程序B需要开多个,关键的问题就是:程序B需要开多个用了findwindow函数做了下,功能上是可以实现 但是只可以 A发送给一个B 而另外一个B就没法接受了。然后试了很多山寨的做法 设置topmost 和 获取焦点 都不好用。请问各位高人,两个程序通信(我这种情况的)有什么比较好的方式吗?
解决方案 »
- 关于子类是如何调用父类的非虚函数的疑惑
- 如何动态叠加button到splitter顶端?
- 线程重用问题
- 向Mysql插入日期型数据的问题?
- 很感兴趣的问题,经常被人忽视,却很常用
- 谁在win2k3 sp1下成功装上vs2005 sp1了
- 在 datagrid里面编辑,后台是acess数据库,我用OleDbDataAdapter等做保存,没成功
- 服务器控件如button,textbox等能否实现鼠标放上,移开后的样式变化?
- 日历控件,只能选当天之前的日 期,当天之后的日期不可选,变成灰色。
- 我的调试错误(请你看看)
- 有存储过程和无有存储过程什么区别?
- PictureBox加载gif图片,为什么在线程里不动了呢?
.net4.0有MemoryMappedFile,但4.0前要自己写。
A可以作为服务端,监听请求。
B可以作为客户端,发送请求。等B发送请求后,A可以对每一个不同的B发送文件。这样的情况适合用1对多的Socket编程,开启端口,除非杀毒软件有监视,一般是没有问题的。Socket编程可以参考,这个异步通信的例子:
http://www.codeproject.com/KB/IP/AsyncSocketServerandClien.aspx例子演示效果图:
保存到队列中,再对这些队列中的地址发送你的信息:
public delegate bool EnumWindowsCallback(IntPtr hWnd, int lParam);
[DllImport("User32.dll", EntryPoint = "EnumWindows")]
private static extern IntPtr EnumWindows(EnumWindowsCallback callback, int lParam);
Queue windowsQueue = new Queue(); Boolean EnumWindows(IntPtr hwnd, int lParam)
{
StringBuilder windowText=new StringBuilder(255) ;
GetWindowText(hwnd, windowText, 255);
if (windowText.ToString() == "Form1")
{
windowsQueue.Enqueue(hwnd);
}
return true ;
}
private void buttonEnum_Click(object sender, EventArgs e)
{
EnumWindows(new EnumWindowsCallback(EnumWindows), 0);
}'===============================================================
'发送
while(windowsQueue.Count > 0)
{
SendMessageA((IntPtr)windowsQueue.Dequeue(), 74, 0, ref cds);
}
用GetWindowText和GetClassName获得窗口的标题和类名,就可以判断出是不是B窗口了