首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用WM_SHOWWINDOW而不是ShowWindow()显示窗口

使用WM_SHOWWINDOW而不是ShowWindow()显示窗口
EN

Stack Overflow用户
提问于 2010-09-03 05:33:17
回答 3查看 10.3K关注 0票数 3

我正在尝试使用热键实用程序(或NirCMD等)的SendMessage函数。弹出一个隐藏的窗口。例如,我可以通过发送0x0010 (WM_CLOSE)来关闭窗口,但是当我尝试发送wParam为1、lParam为0的0x0018 (WM_SHOWWINDOW)时,没有任何反应。

我环顾四周,在少数几个有人抱怨WM_SHOWWINDOW不工作的地方,他们很高兴地接受了建议,转而使用ShowWindow()。

但是,我没有可用的ShowWindow();我只能发送Windows消息。但是ShowWindow()不是魔术,它肯定是通过发送消息来工作的--在幕后发送一个WM_SHOWWINDOW或其他东西。

我如何让一个窗口通过发送消息来显示它自己?

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2010-09-03 08:47:52

试试这两条消息:

代码语言:javascript
复制
SendMessage(h,WM_SYSCOMMAND,SC_MINIMIZE,0);
SendMessage(h,WM_SYSCOMMAND,SC_RESTORE,0);

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

票数 4
EN

Stack Overflow用户

发布于 2010-09-03 05:42:54

WM_SHOWWINDOW是通知,而不是命令。来自MSDN:

当窗口将要隐藏或显示时,WM_SHOWWINDOW消息将发送到该窗口。

我不相信有任何消息可以用来让窗口显示自己。实际上,这个想法对我来说似乎有点奇怪。窗口管理器是负责显示和隐藏窗口的系统组件。要显示窗口,必须使用其中一个窗口管理器API。

票数 2
EN

Stack Overflow用户

发布于 2014-05-20 18:10:04

我认为没有办法通过SendMessage实现这一点(WM_SYSCOMMAND在我身上不起作用)。实际上,我在C#中尝试过。你点击按钮,窗口将通过ShowWindow()最小化,然后你可以看到发送了什么消息:

代码语言:javascript
复制
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);
        }
    }
}   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3631470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档