学无先后达者为师!
不忘初心,砥砺前行。

使用 C# 获取本机登录的 QQ 号码列表

想当初,腾讯 QQ 拥有一个叫做“付费加群”的功能。群里的老哥为了给自己的软件做授权探索出了一个骚操作:软件启动时扫描本机登录的 QQ 号码,并与服务端的群成员进行对比。如果 QQ 号在群里,则表明授权,如果不在则代表未授权。

听完老哥的介绍笔者直呼内行,其核心逻辑也被读者拿到:(PS:付费加群功能早已下线)

[DllImport("User32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)]
public extern static IntPtr FindWindow(string lpClassName, string lpWindowName);

[DllImport("User32.dll", EntryPoint = "GetWindowText", CharSet = CharSet.Auto)]
public static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int nMaxCount);

[DllImport("User32.dll", EntryPoint = "GetWindow", CharSet = CharSet.Auto)]
public static extern IntPtr GetWindow(IntPtr hwnd, int GW_HWNDNEXT);

public static List<string> GetQQNumber(bool type = false)
{
    IntPtr fw;
    if (type)
    {
        fw = FindWindow(null, "QQ");
    }
    else
    {
        fw = FindWindow("CTXOPConntion_Class", null);
    }
    if (fw != IntPtr.Zero)
    {
        List<string> ret = new List<string>();
        StringBuilder sb = new StringBuilder(512);
        string qq; int len;
        do
        {
            len = GetWindowText(fw, sb, 512);
            if (len > 0)
            {
                qq = Convert.ToString(sb);

                // Console.WriteLine(qq);

                if (qq.Contains("OP_") || qq.Contains("_32856F50-AA9A-4388-A3C1-AE5C00A61C43"))
                {
                    ret.Add(qq.Replace("_32856F50-AA9A-4388-A3C1-AE5C00A61C43", string.Empty));
                }
            }
            fw = GetWindow(fw, 2);
            sb.Clear();
        } while (fw != IntPtr.Zero);
        if (ret.Count > 0)
        {
            return ret;
        }
        else
        {
            return null;
        }
    }
    else
    {
        return null;
    }
}

以上代码的核心原理就是遍历窗口,获取窗口标题。

使用方式就是调用 GetQQNumber 方法。

当传入的参数为 false 时,方法的效率较高,会返回固定的“OP_”前缀和号码。

当传入的参数为 true 时,方法的效率较低,会返回客户端类型和号码。如:TIM_261081XXXQQ_571595XXX

再次感谢群里老哥的分享,奇怪的知识又增加了。

赞(1) 打赏
未经允许不得转载:码农很忙 » 使用 C# 获取本机登录的 QQ 号码列表

评论 抢沙发

给作者买杯咖啡

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册