RegisterWindowMessage 可能的值

RegisterWindowMessage Possible values

也许我只是在 MSDN 上遗漏了一些愚蠢的 link,但我似乎找不到 RegisterWindowMessage() 可以采用

的可能值列表

我能找到的唯一一个是"WM_HTML_GETOBJECT"。我在 pinvoke.net 上找到了这个。 但是,我相信这会使我的应用程序崩溃,因为我想要获得的是 IHTMLDialog and not a IHTMLDocument

我看过

Message Reference

Message Constants

SendMessage

OCM_BASE

WM_USER

A google search for RegisterWIndowMessage list of possible values

Another google search for send message types

也许我找错了东西,但我确实找不到。

我的申请在这里失败:

 Dialog =    (IHTMLDialog)ObjectFromLresult(lRes, typeof(IHTMLDialog).GUID, IntPtr.Zero);

但是我相信问题发生在管道的更深处:

  uint iMsg = RegisterWindowMessage("WM_HTML_GETOBJECT");

因为这不是 HTML 文档,而是一个对话框。

如果有帮助,我将通过这种方式获取对话框的提示:

   IntPtr hwnd = FindWindow("Internet Explorer_TridentDlgFrame", "Google -- Webpage Dialog");

如果有帮助,这是我正在尝试做的事情的完整片段:

        UIntPtr lRes;
        IHTMLDialog Dialog;  
        IntPtr hwnd = FindWindow("Internet Explorer_TridentDlgFrame", "Google -- Webpage Dialog");
        uint iMsg = RegisterWindowMessage("WM_HTML_GETOBJECT");

        if (SendMessageTimeout(hwnd, iMsg, IntPtr.Zero, IntPtr.Zero, SendMessageTimeoutFlags.SMTO_ABORTIFHUNG, 1000, out lRes) == IntPtr.Zero)
        {
            MessageBox.Show("operation failed");
        }
        else
        {
            Dialog =   (IHTMLDialog)ObjectFromLresult(lRes, typeof(IHTMLDialog).GUID, IntPtr.Zero);

        }

RegisterWindowMessage 采用字符串参数。您可以传递 any 字符串值。如果您要为您的应用程序注册消息,请确保使用唯一的字符串值(例如 GUID 的字符串表示形式)。

除此之外,没有您可以传递的字符串值的完整列表,因为任何应用程序都可以选择注册自己的消息集。您必须查阅这些应用程序附带的文档以了解它支持哪些消息(如果有)。