如何实现 QQ聊天窗口只弹一个?

MD5cheng 2010-07-04 03:25:40
比如说 。 我们用这个方法去判断窗口的打开

[DllImport("USER32.DLL")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

private void button1_Click(object sender, EventArgs e)
{
IntPtr ptr= FindWindow(null, "Form1");
if (ptr!= IntPtr.Zero)
{
MessageBox.Show("窗体已打开!");
}
else
{
Form1 f1 = new Form1();
f1.Owner = this;
f1.Show();
}
}


但是 。在QQ聊天 中我们又要怎么去判断呢 ?
如果按这个方法 。 是可以达到一个窗口, 但别人发信息你也不可以打开另一个窗口、
这种情况下 你要怎么办 ?? 有什么方法可以用 QQ的ID来判断 窗口么????
...全文
587 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chas824045706 2010-07-04
  • 打赏
  • 举报
回复
学习学习
hhc123 2010-07-04
  • 打赏
  • 举报
回复
晕倒。google还真给屏蔽了。
luoxj_win 2010-07-04
  • 打赏
  • 举报
回复
实际上QQ可以弹出N个框!!!不是吗?
  • 打赏
  • 举报
回复
搞什么FindWind?用不着那么高深的技术吧!


举个例子,你的主程序可以声明一个变量:

Dictionary<string,Form> Windows=new Dictionary<string,Form>();

其string类型的索引键保存窗口的目标内容(例如对方的QQ号码),每当加载一个Form就放入这个Windows集合中,每当关闭窗口(窗口的Closed事件触发)就从这个集合中删除,你随时就可以查找某个目标的已经打开的Form了。
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 babyblueii 的回复:]
用单例类来实现吧。。。
[/Quote]

真逗!

不是什么都套设计模式的。从真实的程序出发,用很基本的语言来描述程序设计,往往不需要用设计模式术语更能明白地设计程序。
  • 打赏
  • 举报
回复
我不信如果同时开启两个QQ主界面(通过第三方工具可以)你还是只弹出一个?

其实弹出窗口都是主界面的私有变量引用着的,主程序当然可以直接操作了。
babyblueii 2010-07-04
  • 打赏
  • 举报
回复
用单例类来实现吧。。。
Teng_s2000 2010-07-04
  • 打赏
  • 举报
回复
Mutex
hhc123 2010-07-04
  • 打赏
  • 举报
回复
QQ聊天窗口左上方显视的是对方的QQ号码
用这个QQ号码为key和这个窗体的句柄为Value,
比如:
private static Hashtable winhand = new Hashtable();
public static Hashtable WinHand
{
get
{
return (winhand);
}
set
{
winhand = value;
}
}
例:WinHand.Add(QQ号码,句柄);
当你点击QQ头像时,去检查WinHand是否含有这个QQ号码的窗体。如果有就
[DllImport("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
ShowWindow((IntPtr)TMessage.WinHand[QQ号码], 1);
没有就
Form QQ=new Form()
QQ.Show();
WinHand.Add(QQ号码,句柄);
上面是打个比方。差不多是这样子。

110,571

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧