代码之家  ›  专栏  ›  技术社区  ›  Synetech

使用wm_ShowWindow显示窗口而不是ShowWindow()。

  •  3
  • Synetech  · 技术社区  · 14 年前

    我尝试使用热键实用程序(或nircmd等)的sendmessage函数来弹出隐藏窗口。例如,我可以通过发送0x0010(wm_close)来关闭窗口,但是当我尝试发送wparam为1、lparam为0的0x0018(wm_showwindow)时,什么也不会发生。

    我环顾四周,有人抱怨wm_ShowWindow不起作用的几个地方,他们欣然接受了使用showWindow()的建议。

    但是,我没有ShowWindow()可用;我只能发送Windows消息。但是showWindow()并不是魔法,当然它是通过发送消息给wm_ShowWindow或在封面下的其他东西来实现的。

    如何通过发送消息让窗口显示自己?

    谢谢。

    3 回复  |  直到 11 年前
        1
  •  3
  •   Anders    14 年前

    尝试以下两条消息:

    SendMessage(h,WM_SYSCOMMAND,SC_MINIMIZE,0);
    SendMessage(h,WM_SYSCOMMAND,SC_RESTORE,0);
    

    或者如果使用第三方应用程序正常,请尝试 cmdow

        2
  •  2
  •   Peter Ruderman    14 年前

    wm_ShowWindow是一个通知,而不是命令。来自msdn:

    当窗口即将被隐藏或显示时,wm_ShowWindow消息将发送到窗口。

    我不相信有任何信息你可以用来做一个窗口展示本身。实际上,我觉得这个想法有点奇怪。窗口管理器是负责显示和隐藏窗口的系统组件。要显示一个窗口,必须使用一个窗口管理器API。

        3
  •  0
  •   Bitterblue    11 年前

    我想有 无路可走 为了达到这个目的 SendMessage (wm-syscommand对我不起作用)。我在C试过。单击按钮,窗口将通过 ShowWindow() 然后您可以看到发送的消息:

    using System;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public class Form1: Form
        {
            [DllImport("user32.dll", SetLastError = true)]
            public static extern bool ShowWindow(IntPtr window, int showCommand);
    
            private const int SW_MINIMIZE = 6;
            private bool print = false;
    
            public Form1()
            {
                Button button = new Button();
                button.Click += onButtonsClick;
                Controls.Add(button);
            }
    
            private void onButtonsClick(object sender, EventArgs e)
            {
                print = true;
                ShowWindow(Handle, SW_MINIMIZE);
                print = false;
            }
    
            protected override void WndProc(ref Message m)
            {
                if (print)
                    Console.WriteLine(m.Msg.ToString() + "\t0x" + m.Msg.ToString("x4") + "\t" + m.WParam + "\t" + m.LParam);
                base.WndProc(ref m);
            }
        }
    }