1。导入api函数FindWindowEx来查找泡泡聊天窗口,用spy++查到泡泡聊天的类名。
2。导入api函数 ShowWindow来激活查找到的泡泡窗口。
相关代码:
public class NativeWIN32
{
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr FindWindowEx(IntPtr parent /*HWND*/,
IntPtr next /*HWND*/,
string sClassName,
IntPtr sWindowTitle);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern void SetForegroundWindow(int hwnd);
[DllImport("user32.dll")]
public static extern bool ShowWindow(int hWnd, nCmdShow nCmdShow);
public enum nCmdShow:uint
{
SW_FORCEMINIMIZE=0x0,
SW_HIDE=0x1,
SW_MAXIMIZE=0x2,
SW_MINIMIZE=0x3,
SW_RESTORE=0x4,
SW_SHOW=0x5,
SW_SHOWDEFAULT=0x6,
SW_SHOWMAXIMIZED=0x7,
SW_SHOWMINIMIZED=0x8,
SW_SHOWMINNOACTIVE=0x9,
SW_SHOWNA=0xA,
SW_SHOWNOACTIVATE=0xB,
SW_SHOWNORMAL=0xC,
}
}
3。利用System.Windows.Forms.SendKeys.Send方法发送回复信息到激活的泡泡聊天窗口。
4。利用System.Windows.Forms.SendKeys.Send方法发送ALT+F4到激活的泡泡聊天窗口,关闭该窗口。
(这个方法不好,容易关闭其他程序,改成 调用API SendMessage,2004-7-26
导入API:
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int SendMessage(IntPtr hWnd, int msg, int wParam, int lParam);
调用:
SendMessage(hNext,0x0010,0,0);//hNext为窗口句柄,0x0010为消息WM_CLOSE的值。)
相关代码:
private void timer1_Tick(object sender, System.EventArgs e)
{
IntPtr hParent = IntPtr.Zero;
string sClassNameFilter = "NETEASE POPO UniformMsgWnd"; // 所有POPO聊天窗口的类
string strMsg;
strMsg=tbMsg.Text;
hNext=NativeWIN32.FindWindowEx(hParent,hNext,sClassNameFilter,IntPtr.Zero); //找窗口句柄
if(hNext.ToInt32()>0)
{
NativeWIN32.ShowWindow(hNext.ToInt32(),NativeWIN32.nCmdShow.SW_SHOWMINNOACTIVE); //显示窗口
System.Windows.Forms.SendKeys.Send(strMsg+"{ENTER}");
System.Windows.Forms.SendKeys.Send("{ENTER}{ENTER}{ENTER}{ENTER}{ENTER}{ENTER}{ENTER}");//因为Send方法发送字符时如果开启了输入法,会导致焦点错乱,所以多加几个回车,对于泡泡聊天窗口来说,空回车没有反应。
System.Windows.Forms.SendKeys.Send("%{F4}");
}
}