3

ホットキー ユーティリティ (または NirCMD など) の SendMessage 関数を使用して、非表示のウィンドウをポップアップさせようとしています。たとえば、0x0010 (WM_CLOSE) を送信してウィンドウを閉じることができますが、1 の wParam と 0 の lParam で 0x0018 (WM_SHOWWINDOW) を送信しようとすると、何も起こりません。

私が見回したところ、誰かが WM_SHOWWINDOW が機能しないと不平を言ったいくつかの場所で、代わりに ShowWindow() を使用するという提案を喜んで受け入れました。

ただし、ShowWindow() は利用できません。Windows メッセージしか送信できません。しかし、ShowWindow() は魔法ではありません。確かに、WM_SHOWWINDOW またはカバーの下にあるものを SendMessage することによって機能します。

ウィンドウにメッセージを送信してウィンドウ自体を表示するにはどうすればよいですか?

ありがとう。

4

3 に答える 3

4

次の 2 つのメッセージを試してください。

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

または、サードパーティのアプリを使用しても問題ない場合は、cmdowを試してください

于 2010-09-03T00:47:52.357 に答える
2

WM_SHOWWINDOW は通知であり、コマンドではありません。MSDN から:

WM_SHOWWINDOW メッセージは、ウィンドウが非表示または表示されるときにウィンドウに送信されます。

ウィンドウ自体を表示するために使用できるメッセージはないと思います。実際、私にはその考え自体が少し奇妙に思えます。ウィンドウ マネージャーは、ウィンドウの表示と非表示を担当するシステム コンポーネントです。ウィンドウを表示するには、ウィンドウ マネージャー API のいずれかを使用する必要があります。

于 2010-09-02T21:42:54.147 に答える
0

それを達成する方法はないと思います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);
        }
    }
}   
于 2014-05-20T10:10:03.900 に答える