kratos__bubu 发表于 2021-6-9 11:54

c#是实现查看本地已经登录qq

网上获取本地已经登录qq,大多数使用的是快速登陆的接口或者是findwindowex来获取窗口句柄,虽然代码不多,但是还是很麻烦,而且快速登陆的接口貌似用不了(昨天测试了一下午).


思路:我们通过cmd获取正在登录的qq.cmd:dir \\\\.\\pipe\\\\ | findstr \"QQ_\" | findstr \"_pipe\"输入这串命令。
当然还有ps:::Matches(::GetFiles("\\.\\pipe\\"),"QQ_(\d*)_pipe").Groups;
获取到结果后截取需要的字符串就好。





代码:
      static void Main(string[] args)
      {
            string resultStr = "";
            string com = "dir \\\\.\\pipe\\\\ | findstr \"QQ_\" | findstr \"_pipe\"";
            RunCMDCommand(com, out resultStr);
            foreach (var item in GetStr(resultStr))
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
      }
      public static List<string> GetStr(string str) //这是分割字符串的方法
      {
            var a = str.Substring(str.LastIndexOf("exit") + 4).Split('_');
            const string pattern = "^*$";
            Regex rx = new Regex(pattern);
            List<string> strList = new List<string>();
            foreach (var item in a)
            {
                if (rx.IsMatch(item))
                  strList.Add(item);
            }
            return strList;

      }
      public static string StrSub(string source,string subStr)//这也是分割
      {
            int index = 0;
            string ss = string.Empty;
            foreach (object item in source)
            {
                index += 1;
                string str = item.ToString();
                int il = str.IndexOf(subStr);
               ss=new object[] {index, str.Substring(il+1)}.ToString();
            }
            return ss;
      }
      public static void RunCMDCommand(string command, out string outPut)//这是调用cmd然后获取输入命令后的结果 调用的cmd不会显示
      {
            using (Process pc = new Process())
            {
                command = command.Trim().TrimEnd('&') + "&exit";

                pc.StartInfo.FileName = "cmd.exe";
                pc.StartInfo.CreateNoWindow = true;//隐藏窗口运行
                pc.StartInfo.RedirectStandardError = true;//重定向错误流
                pc.StartInfo.RedirectStandardInput = true;//重定向输入流
                pc.StartInfo.RedirectStandardOutput = true;//重定向输出流
                pc.StartInfo.UseShellExecute = false;
                pc.Start();
                pc.StandardInput.WriteLine(command);//输入CMD命令
                pc.StandardInput.AutoFlush = true;

                outPut = pc.StandardOutput.ReadToEnd();//读取结果      

                pc.WaitForExit();
                pc.Close();
            }
      }

始于丨初心 发表于 2021-6-9 16:50

学到了,楼主厉害{:1_921:}

ps122 发表于 2021-6-15 13:45

有运行成功的吗?
请教楼主GetFiles("\\.\\pipe\\")提示c:\pipe不存在
页: [1]
查看完整版本: c#是实现查看本地已经登录qq