让你的窗口永远不会被最小化!

    今天在CSDN论坛里看到这么一个帖子 http://topic.csdn.net/u/20080731/15/40e3def0-b584-49cf-be65-d03712498ab2.html?seed=124496120,就是要在按下“显示桌面”时还要显示窗口。最初只是简单的回答了一个active一下。然后自己一试验,这样完全做不到。根据经验猜想,Activate()只是激活,但是在“显示桌面”后,还是不能把窗体显示出来。找遍所有的Form里的方法,都没有一个可以恢复窗口的。
    这样看来,只能让程序自己模拟点击恢复的消息了。
    迅速的开始google所有关于“最小化,还原窗体”的系统消息,却怎么都搜不出来。凭借自己的经验,系统里肯定是有这样的消息的。于是乎,自己把form的所有消息都打印出来,自己一个一个分析。
    先初始化一个全局变量  StreamWriter sw = new StreamWriter("1.txt");  bool flag = false;
    然后再重载 void WndProc(ref Message m)
        protected override void WndProc(ref Message m)
        {
            if(sw.BaseStream != null)
                if(flag)
                    sw.WriteLine("0x" + m.Msg.ToString("X") + "/t0x" + m.WParam.ToString("X") + "/t0x" + m.LParam.ToString("X"));
                else
                    sw.WriteLine("    0x" + m.Msg.ToString("X") + "/t0x" + m.WParam.ToString("X") + "/t0x" + m.LParam.ToString("X"));
            base.WndProc(ref m);
        }
    再加入这样一个事件
        private void Form1_Resize(object sender, EventArgs e)
        {
            flag = true;
            sw.WriteLine("---------------");
        }
    修改重载的 void Dispose(bool disposing)方法
        protected override void Dispose(bool disposing)
        {
            if(disposing && (components != null))
            {
                components.Dispose();
            }
            sw.Flush();
            sw.Close();
            base.Dispose(disposing);
        }
    然后运行程序。程序运行的时候,尽量少的减少鼠标在窗体上的移动和点击,也不要按任何键盘按键。点击最小化,再还原窗体,然后关闭窗体。打开生成的 1.txt文件
    0x24	0x0	0x61CDFD8
    0x81	0x0	0x61CDF80
    0x83	0x0	0x61CDFF8
    0x1	0x0	0x61CDF6C
    0xC	0x0	0x22283DC
    0x80	0x0	0x71D0A01
    0x80	0x1	0x6860979
    0xE	0x0	0x0
    0xD	0xC	0x4E548C8
    0xE	0x0	0x0
    0xD	0xC	0x4E548C8
    0x7C	0xFFFFFFF0	0x61CE4DC
    0x7D	0xFFFFFFF0	0x61CE4DC
    0x7F	0x2	0x0
    0x7C	0xFFFFFFEC	0x61CE4DC
    0x7D	0xFFFFFFEC	0x61CE4DC
    0x46	0x0	0x61CE528
    0x83	0x1	0x61CE4FC
    0x47	0x0	0x61CE528
    0x18	0x1	0x0
    0xE	0x0	0x0
    0xD	0xC	0x4E548E8
    0x46	0x0	0x61CE5E4
    0x46	0x0	0x61CE5E4
    0x1C	0x1	0x1370
    0x86	0x1	0x0
    0x6	0x1	0x0
    0x281	0x1	0xC000000F
    0x282	0x2	0x0
    0x7	0x0	0x0
    0x85	0x1	0x0
    0x14	0x6E011439	0x0
    0xE	0x0	0x0
    0xD	0xC	0x4E548E8
    0x47	0x0	0x61CE5E4
    0x5	0x0	0x108011C
    0x3	0x0	0xA60092
    0xC1D5	0x0	0x0
    0xF	0x0	0x0
    0xE	0x0	0x0
    0xD	0xC	0x4E548E8
    0x7F	0x2	0x0
    0x7F	0x0	0x0
    0x7F	0x1	0x0
    0x7F	0x0	0x0
    0x7F	0x1	0x0
    0x84	0x0	0x8A015E
    0x84	0x0	0x8A015E
    0x20	0x6093A	0x200000C
    0xAE	0x1001	0x0
    0xA0	0xC	0x8A015E
    0x20	0x6093A	0x2000008
    0xA0	0x8	0x8C015E
    0x20	0x6093A	0x2000008
    0xA0	0x8	0x8D015E
    0x20	0x6093A	0x2000008
    0xA0	0x8	0x8E015E
    0x20	0x6093A	0x2000008
    0xA0	0x8	0x8F015E
    0x20	0x6093A	0x2000008
    0xA0	0x8	0x91015E
    0x20	0x6093A	0x2000008
    0xA0	0x8	0x92015E
    0x20	0x6093A	0x2000008
    0xA0	0x8	0x93015E
    0x20	0x6093A	0x2000008
    0xA0	0x8	0x94015E
    0x20	0x6093A	0x2000008
    0xA0	0x8	0x95015E
    0x20	0x6093A	0x2010008
    0xA1	0x8	0x95015E
    0x215	0x0	0x0
    0x112	0xF020	0x95015E
    0x8	0x0	0x0
    0x281	0x0	0xC000000F
    0x282	0x1	0x0
    0x46	0x0	0x61CD464
    0x24	0x0	0x61CCBD8
    0x83	0x1	0x61CD438
    0x47	0x0	0x61CD464
    0xAE	0x1001	0x0
    0xAE	0x1001	0x0
    0xAE	0x1001	0x0
    0x3	0x0	0x83008300
    0xE	0x0	0x0
    0xD	0xC	0x4E3B110
---------------
0x5	0x1	0x0
0x86	0x0	0x0
0x6	0x200000	0x0
0x1C	0x0	0x1490
0x2A2	0x0	0x0
0x46	0x0	0x61CE5D4
0x47	0x0	0x61CE5D4
0x1C	0x1	0x844
0x86	0x200001	0x0
0x6	0x200001	0x0
0x112	0xF120	0x0
0x13	0x0	0x0
0x46	0x0	0x61CDD74
0x24	0x0	0x61CD4E8
0x83	0x1	0x61CDD48
0x85	0x1	0x0
0x14	0xEA0113A8	0x0
0xAE	0x1001	0x0
0xAE	0x1001	0x0
0xAE	0x1001	0x0
0xE	0x0	0x0
0xD	0xC	0x4E54908
0x47	0x0	0x61CDD74
0x3	0x0	0xA60092
0xE	0x0	0x0
0xD	0xC	0x4E54928
---------------
0x5	0x0	0x108011C
0xE	0x0	0x0
0xD	0xC	0x4E54908
0xE	0x0	0x0
0xD	0xC	0x4E54908
0x281	0x1	0xC000000F
0x282	0x2	0x0
0x7	0x0	0x0
0x6	0x1	0x0
0xF	0x0	0x0
0xE	0x0	0x0
0xD	0xC	0x4E548E8
0x84	0x0	0x8A01A8
0x84	0x0	0x8A01A8
0x20	0x6093A	0x200000E
0xAE	0x1001	0x0
0xA0	0xE	0x8A01A8
0x20	0x6093A	0x2000014
0xA0	0x14	0x8B01A8
0x20	0x6093A	0x2000014
0xA0	0x14	0x8C01A7
0x20	0x6093A	0x2000014
0xA0	0x14	0x8D01A6
0x20	0x6093A	0x2000014
0xA0	0x14	0x8E01A6
0x20	0x6093A	0x2000014
0xA0	0x14	0x8F01A6
0x20	0x6093A	0x2000014
0xA0	0x14	0x9001A6
0x20	0x6093A	0x2000014
0xA0	0x14	0x9001A5
0x20	0x6093A	0x2000014
0xA0	0x14	0x9101A5
0x20	0x6093A	0x2000014
0xA0	0x14	0x9101A5
0x20	0x6093A	0x2000014
0xA0	0x14	0x9101A5
0x20	0x6093A	0x2000014
0xA0	0x14	0x9101A5
0x20	0x6093A	0x2000014
0xA0	0x14	0x9101A5
0x20	0x6093A	0x2000014
0xA0	0x14	0x9101A5
0x20	0x6093A	0x2010014
0xA1	0x14	0x9101A5
0x215	0x0	0x0
0x112	0xF060	0x9101A5
0x10	0x0	0x0
    在第二个“---------------”前尝试消息代码。最后尝试出 0x112, 0xF120, 0x0这一组是恢复窗口的系统消息。最后,把这个消息放在一个 timer里,每隔100ms激发一次
        private void timer1_Tick(object sender, EventArgs e)
        {
            int[] i = { 0x112, 0xF120, 0x0 };
            this.Activate();
            Message m = Message.Create(this.Handle, i[0], (IntPtr)i[1], (IntPtr)i[2]);
            WndProc(ref m);
            this.Activate();
        }
    这样就完成了整个项目的研究。
    但是,我怎么都没有找到让窗体最小化的消息。可能是找的时候漏掉了吧?
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值