`
muyu
  • 浏览: 218590 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

让被迫下线的QQ重新自动登录!

    博客分类:
  • .net
阅读更多

公司的电脑有时因为运行着重要程序,整夜不关机,想挂QQ。但是,下班回到家,一旦登录QQ,公司电脑挂的QQ就自动退出了。晚上睡觉,关掉电脑,公司电脑却不能再挂机了。

 

为此,我用C#写了一个控制台程序,凌晨0点(我通常晚上11点睡觉)检测一下QQ,看它是否收到了下线通知。一旦收到了,就先退出QQ程序,然后再次启动QQ------注意:公司电脑QQ要设成“记住密码”、“启动QQ时自动登录”。

 

检测QQ

---------

刚开始,我用类Process提供的方法,有两个问题无法解决:

1.它无法判断QQ是否正常运行,或是收到了下线通知;

2.使用它提供的CloseMainWindow方法,无法退出QQ。正如MSDN对该方法的评价------“调用 CloseMainWindow 会向主窗口发送关闭请求,在一个格式良好的应用程序中,该请求会关闭子窗口并撤消此应用程序所有正在运行的消息循环。通过调用 CloseMainWindow 发出的退出进程的请求不强制应用程序退出。应用程序可以在退出前请求用户验证,也可以拒绝退出。”

 

按照MSDN的说明,万不得已可以使用kill方法,只是QQ进程被关掉了,任务栏的企鹅图标还存在。在QQ再次登录时,任务栏就会多出一个。也就是说,每执行一次kill,就会产生一个。

 

windows API

----------------

 在网上查到《Kill any application with system menu using C# 》,用c#调用windows API,借助visual studio自带的 Microsoft Spy++ 来获取QQ程序窗口的类名和窗口名 作为 API的两个参数,就可以了。

 

特性DllImport需要引入 using System.Runtime.InteropServices;

 

代码

-----

static void Main(string[] args)
        {
            Process[] myProcess = Process.GetProcesses();
            if (isOffLine())
            {
                closeQQ();

                Thread.Sleep(2000);

                startQQ();
            }
        }

        static void closeQQ()
        {
            int iHandle = Win32.FindWindow("TXGuiFoundation", "QQ2010");//改成你电脑上的实际检测结果
            int j = Win32.SendMessage(iHandle, Win32.WM_SYSCOMMAND,
                Win32.SC_CLOSE, 0);
        }

        static void startQQ()
        {
            Process qq = new Process();
            qq.StartInfo.FileName = @"D:\Program Files\Tencent\QQ\Bin\QQ.exe";//改成你电脑上QQ的实际地址
            qq.Start();
        }

        static bool isOffLine()
        {
            bool flag = false;
            int iHandle = Win32.FindWindow("TXGuiFoundation", "下线通知");
            if (iHandle > 0)
            {
                flag = true;
            }
            return flag;
        }

 

补充

---------

我用的QQ版本是昨天从官网刚下载的,其他版本的窗口名可能需要用 Microsoft Spy++ 检测一下。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics