当前位置:C++技术网 > 资讯 > C++实现软件最小化关闭到右下角通知栏托盘并响应解答1

C++实现软件最小化关闭到右下角通知栏托盘并响应解答1

更新时间:2017-07-12 14:23:42浏览次数:1+次

这个程序能够最小化其它已经运行的软件吗,比如说输入一个已经运行程序的标题或者路径,然后使这个程序最小化。

C++技术网会员解答:

    感谢您对C++技术网的支持与信任。

    “这个程序能够最小化其它已经运行的软件吗,比如说输入一个已经运行程序的标题或者路径,然后使这个程序最小化。”这个问题其实就是win32的窗口消息处理问题。不管是最大化还是最小化,还是设置窗口标题文字等等,都是窗口消息处理实现的。只不过一般都是程序自己的消息自己处理。窗口自己在处理消息的时候,也是通过窗口句柄来处理的。也就是说,如果一个程序有多个窗口,这些窗口的消息都会在进程的窗口消息队列中存放,然后按照窗口句柄分发给不同的窗口过程处理,从而实现不同的窗口的处理逻辑。

    所以,对于其他进程的程序来说,只要拿到了其他进程的窗口的窗口句柄,然后将窗口消息发送给这个进程的消息队列就行了。完成消息发送的API函数为SendMessage和PostMessage,前者为同步方式,后者为异步方式。也就是说,SendMessage要等到消息被处理,就相当于直接调用了窗口过程函数处理了消息。而PostMessage函数则只是将消息投递到进程的消息队列就完成了。消息的取出和处理,则由窗口本身去获取然后处理。

    最小化和最大化的消息处理,实际上不需要我们直接处理消息,要说的话,是WM_SIZE消息,只是在参数中携带了窗口尺寸参数表示窗口的大小。不过我们要实现最大化最小化,只需要调用ShowWindow函数,传入窗口句柄和SW_SHOWMINIMIZED。代码如:

ShowWindow(hWnd,SW_SHOWMINIMIZED);//窗口最小化
ShowWindow(hWnd,SW_SHOWNORMAL);//窗口正常大小
ShowWindow(hWnd,SW_SHOWMAXIMIZED);//窗口最大化
ShowWindow(hWnd,SW_HIDE) ;//隐藏窗口
    另外一个需要实现的就是获取窗口的句柄。因为有了句柄我们就可以通过以上函数将窗口最小化最大化隐藏和恢复大小。那么要找到窗口的句柄,我们可以用FindWindow这个API函数,根据窗口的标题就可以查找。不过我们不能通过程序路径查找,因为一个程序可能有多个进程,每一个进程可能有多个窗口,所以无法确定某一个窗口。一般我们都是查找主窗口。

    当然,如果你想直接找到窗口的句柄值,你可以使用SPY++程序直接识别出来窗口句柄,然后给你的程序赋值,就可以了。

    关闭到通知栏则请参考文章《C++实现软件最小化关闭到右下角通知栏托盘并响应》。