登录
首页 » C# » C# 实现QQ 登陆、登出,获取好友以及群列表 然后群发消息 基于QQ2011 PC版协议【附完整源码】

C# 实现QQ 登陆、登出,获取好友以及群列表 然后群发消息 基于QQ2011 PC版协议【附完整源码】

于 2013-03-01 发布
0 252
下载积分: 1 下载次数: 0

代码说明:

实现了登陆qq后获取好友和群列表,然后逐个群发消息的功能,详见截图

下载说明:请别用迅雷下载,失败请重下,重下不扣分!

发表评论

0 个回复

  • C# ping工具 实例源码下载
    C# ping工具 实例源码下载
    2014-08-12下载
    积分:1
  • 端口线程扫描程序(附源码BCB5)(1[1].0)
    说明:  端口扫描小程序,C语言编写,亲测可用欢迎使用。(Port scanning program, written in C language, pro-test can be welcomed.)
    2020-06-16 09:20:01下载
    积分:1
  • WCF四种常用应用场景实例下载
    使用注意:建立demo数据库,使用aspnet_regsql.exe建立Memmbership一些安全场景需要证书,使用CertTool的工具生成具体的授权时的角色和用户名字参考HostSvc、Client代码修改成测试用的后才能正常运行 一、目录结构Common来自于Programming WCF Services[ISBN: 978-0-596-80548-7],实现WCF的声明式安全HostSvc:不同场景的接口和服务实现,命令行承载服务MembershipAdmin:用于操作demo数据库membership的成员操作,Asp.net Configuraion 可添加角色和用户,并使用IIS服务承载HostSvc实现的服务Client: 使用各种服务的客户端场景 二、四种场景的区别:Intranet Transport保护 使用tcp绑定 windows集成的安全 Internet 只能使用Message形式的保护,需要数字证书 tcp wsHttp绑定 使用Membership进行安全认证 Anoymous 使用Message形式的保护,需要数字证书 tcp wsHttp绑定 None 消息不保护  http tcp wsHttp绑定 三、App-comment.config: 包含对于各种配置的说明 四、证书的生成:CertToolSetupCerts.bat生成,命令行工具从VS SDK已经拷贝过来 五、IIS中承载服务的注意: 需要把WCFServer赋予IIS的账号以权限 受信任人中加入WCFServer证书 六、证书如何管理:1、命令行启动mmc2、“添加、删除管理单元"加入"证书", 按照提示选择当前用户或本机3、此时即可管理IIS的权限操作: 在"个人/证书"下找到WCFServer,"更多操作/所有任务/管理私钥",弹出界面设置用户权限受信任人: 在"个人/证书"下找到WCFServer,导出证书,然后在”受信息人/证书“下导入以上证书即可 七、远程机器客户端的证书问题 导出WCFServer【不要私钥】 然后在远程客户端机器上导入即可,此时的公钥可以用于消息的验证 八、IIS中承载MembershipAdmin中加入了对应的四个.svc文件【逻辑使用的一个HostSvc中的实现】以提供WCF服务,具体配置和HostSvc一致,当然地址不一样了此例是把MembershipAdmin作为应程序发布到80端口的demo下 注意:1、需要设置IIS的http和net.tcp协议支持2、数据库demo需要能被IIS账号访问3、WCFServer证书需要能被IIS账号访问
    2021-03-03 08:29:33下载
    积分:1
  • Catch
    屏幕广播,在局域网内同段IP内进行屏幕广播和监控(Catch Computer desk)
    2013-11-08 09:23:45下载
    积分:1
  • C# 不同进程间通讯实例源码下载(SendMessage方式)
    在.NET中基于Windows消息的IPC实现 一、什么是IPC IPC(Inter process Communication)就是“进程间通讯”。我们都知道,在windows系统中,各个应用程序(进程)之间常常需要交换、传递数据,这就要解决进程间的数据通信问题。在最初的16位Windows3.x系统中,所有Windows应用程序共享单一地址,任何进程都能够对这一共享地址空间的数据进行读写操作。 随着Windwos98、Windows NT、Windows2000等32位的操作系统的出现,每个进程都有自己的地址空间,一个Windows进程不能存取另一个进程的私有数据,也就是说,虽然两个进程可以用具有相同值的指针寻址,但所读写的只是它们各自的数据,这样就减少了进程之间的相互干扰。 二、如何实现IPC 那么在windows当前系统下,如何实现进程通讯呢?其实有很多方法,如: 1、    剪贴板Clipboard 2、    DDE(动态数据交换) 3、    内存映像 4、    消息管道 5、    邮件槽 6、    Socket 7、    RPC 8、    串行/并行通信(Serial/Parallel Communication) 9、    COM/DCOM 10、Windows消息 三、基于Windows消息的IPC 现在让我们进入今天我们要讲的主题:“基于Windows消息的IPC实现”。 在这里,我假定大家对Windows消息机制都有很好的理解,所以我就不在这上面费太多的墨水了。我们直接看看Windows消息是怎么样实现进程间通讯的。我们首先看看Windows的消息常数: WM_COPYDATA=0x004A//  当一个应用程序传递数据给另一个应用程序时发送此消息。 这就是我们要的。下面我们来看看如何利用它来实现IPC。 让我们先看看几个API函数,没有它们,我们没有办法将数据发送出去。 1、 PostMessage  函数功能:该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回。消息队列里的消息通过调用GetMessage和PeekMessage取得。 函数原型:B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam); 参数 hWnd:其窗口程序接收消息的窗口的句柄。可取有特定含义的两个值: HWND.BROADCAST:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口。消息不被寄送到子窗口。 NULL:此函数的操作和调用参数dwThread设置为当前线程的标识符PostThreadMessage函数一样。 Msg:指定被寄送的消息。 wParam:指定附加的消息特定的信息。 IParam:指定附加的消息特定的信息。 返回值:如果函数调用成功,返回非零值:如果函数调用失败,返回值是零。若想获得更多的错误信息,请调用GetLastError函数。 2、 SendMessage  函数功能:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回。 函数原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam); 参数: hWnd:其窗口程序将接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。 Msg:指定被发送的消息。 wParam:指定附加的消息指定信息。 IParam:指定附加的消息指定信息。 返回值:返回值指定消息处理的结果,依赖于所发送的消息。 3、 RegisterWindowMessage 函数功能:RegisterWindowMessage函数定义一个新的窗口消息,该消息保证在整个系统范围内是唯一的。调用SendMessage或PostMessage函数时可以使用该函数返回的消息值。 函数原型:UINT RegisterWindowMessage(lpsz) 参数: lpsz指向一个以NULL结束的字符串,该字符串指定待登记的消息。 返回值:若成功地登记了消息,返回值是一个消息标识符。该标识符值的范围在0XC000到0XFFFF之间,否则,返回值为0。 我们现在在C#中声明这些API函数:         [DllImport("user32")]        internal static extern int RegisterWindowMessage(string lpString);        [DllImport("user32")]        internal static extern int PostMessage(IntPtr hWnd, int Msg, int wParam, int lParam);        [DllImport("user32")]        internal static extern int PostMessage(IntPtr hwnd, int wMsg, IntPtr wParam, IntPtr lParam);        [DllImport("user32")]        internal static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, ref COPYDATASTRUCT lParam); 然后定义一些我们需要的常数:                 internal const int WM_COPYDATA = 0x004A; //当一个应用程序传递数据给另一个应用程序时发送此消息        internal const int WM_DESTROY = 0x0002; //窗体被销毁        internal const int WM_CREATE = 0x0001; //应用程序创建一个窗口        internal const int WM_QUERYENDSESSION = 0x0011; //当用户选择结束对话框或程序自己调用ExitWindows函数        internal static readonly IntPtr HWND_BROADCAST = new IntPtr(0xFFFF); 我们还需要一个传送数据的结构:     ///    ///发送WM_COPYDATA消息的数据结构  ///    internal struct COPYDATASTRUCT    {        ///        ///用户自定义数据        ///        internal IntPtr dwData;        ///        ///数据长度        ///        internal int cbData;        ///        ///数据首地址指针        ///        internal IntPtr lpData;    } 现在我们来看看具体如何实现: 1、 我们首先创建一个类,让它从Form类继承,因为我们需要一个窗体,然后对它的消息进行处理:   internal class WinMsg : Form{        private string _messageString;        private List _windowList;        private int _message;        private int _intHandler;        private bool _isConnected;}   2、 然后定义构造函数,在构造函数里注册一个消息通道值,并发出一个广播通知其它在这个通道的窗口。         internal WinMsg(string messageString)        {            _messageString = messageString;            _isConnected = false;            _intHandler = Handle.ToInt32();            _windowList = new List();            _message = Win32.RegisterWindowMessage(_messageString);//注册一个消息通道            int errCode = Win32.PostMessage(Win32.HWND_BROADCAST, _message, Win32.CONNECTION, _intHandler);//向此通道内所有的窗口广播自己的句柄            if (errCode == 0)            {                throw new Win32Exception(errCode);//发生错误,抛出异常            }            else            {                _isConnected = true;            }        } 3、 重写基类的WndProc函数,处理接收到的消息:         protected override void WndProc(ref Message m)        {            if (m.Msg == _message)//接收到广播消息,进行处理            {                int LParam = m.LParam.ToInt32();                int WParam = m.WParam.ToInt32();                if (LParam != 0 && LParam != _intHandler)                {                    if (WParam == Win32.DISCONNECTION)                    {                        _windowList.Remove(m.WParam);//将对方窗口的句柄从列表中删除                    }                    else                    {                        if (WParam==Win32.CONNECTION)                        {                            Win32.PostMessage(m.LParam, _message, Win32.REVERSION, _intHandler);                        }                        _windowList.Add(m.LParam);//将对方窗口的句柄存入列表中                    }                }                return;            }            switch (m.Msg)            {                case Win32.WM_COPYDATA://接收到其它窗口发送过来的数据                    {                        COPYDATASTRUCT data = new COPYDATASTRUCT();                        data = (COPYDATASTRUCT)m.GetLParam(data.GetType());                        byte[] message = new byte[data.cbData];                        Marshal.Copy(data.lpData, message, 0, data.cbData);//从非托管内存中将数据复制到我们的byte数组中。                        Anyzler(m.WParam, message);//在这里处理接收到的数据。                    }                    break;                case Win32.WM_DESTROY:                case Win32.WM_QUERYENDSESSION://窗口被关闭,向其它窗口广播通知从队列中删除自己                    Win32.PostMessage(Win32.HWND_BROADCAST, _message, Win32.DISCONNECTION, _intHandler);                    base.WndProc(ref m);//调用基类的消息处理函数。                    break;                default:                    base.WndProc(ref m); //调用基类的消息处理函数。                    break;            }        }4、 定义发送消息的函数:         internal void Send(byte[] message)        {            if (_isConnected)            {                int length = message.Length;                IntPtr ptr = Marshal.AllocHGlobal(length);//申请一块非托管内存                Marshal.Copy(message, 0, ptr, length);//将要发送的数据封送到非托管内存                COPYDATASTRUCT data = new COPYDATASTRUCT();                data.dwData = IntPtr.Zero;//这里可以随意定义。                data.cbData = length;//传递要发送的数据的长度                data.lpData = ptr;//传递要发送的数据的地址指针                //向其它所有窗口发送数据,这里不能发广播消息。必须一个一个发送。                foreach (IntPtr window in _windowList)                {                    Win32.SendMessage(window, Win32.WM_COPYDATA, this.Handle, ref data);                }                Marshal.FreeHGlobal(ptr);//释放这块非托管内存,这行一定要写上,不然会内存泄漏。            }        }好了,主要代码就是这些了!
    2013-09-14下载
    积分:1
  • MultiPing
    ICMP扫描器的设计源码。能实现ping功能,扫描IP地址可以手动输入。方便初学者学习。。(ICMP scanner design source. Ping function, scanning the IP address can be entered manually.)
    2012-11-08 14:23:46下载
    积分:1
  • sssssss
    程序记录并显示了数据报从源端机器传送到目标机器的过程中所经过的路由器的IP地址,并且记录了数据报到达每个路由器所需要的时间。认真观察到达每个路由器的时间有什么区别,从而熟练掌握traceroute的工作原理和ICMP报文协议。 (The program records and displays the IP addresses of routers through which the datagram sent from the source client machine to the target machine , and the recording of the data packets arrive at the time required by each router . )
    2013-05-21 10:00:17下载
    积分:1
  • winsock
    应用于windows 平台下的vc编程,主要是windows socket 下的网络编程(windows socket programming, including basic knowledge of the single-threaded, multi-threaded. Development and application in the windows platform)
    2012-04-25 11:43:29下载
    积分:1
  • WOL
    说明:  远程唤醒 简单的数据包构造发送的方法 需要知道远程主机的IP和MAC(Remote wake-up a simple packet structure to send the method needs to know the remote host)
    2008-11-10 17:19:04下载
    积分:1
  • PPowerTalkClient
    功能强大的聊天工具,可以跨网关聊天,并且传送文件(Powerful chat tool, you can chat across the gateway, and transfer files)
    2009-10-18 23:34:40下载
    积分:1
  • 696516资源总数
  • 106914会员总数
  • 0今日下载