Win32 API:打开对话框窗口后,应用程序冻结

阿德南

我正在尝试使用Win32 API在按钮单击事件上打开已打开的记事本应用程序的“打开文件对话框”。这是代码:

void onButonClicked()
{

    HWND hWnd = ::FindWindow(NULL, L"Untitled - Notepad");

    HMENU hWndMenu = ::GetMenu(hWnd);
    HMENU hWndSubMenu = ::GetSubMenu(hWndMenu, 0);
    SendMessage(hWnd, WM_COMMAND, GetMenuItemID(hWndSubMenu, 1), 0);
}

这可以正常工作,并打开“打开对话框”。但是它冻结了我的应用程序。如果我尝试用鼠标移动应用程序窗口,它将挂起并在标题栏上显示“ Not Responding”。我也尝试过在单独的线程中打开此对话框窗口,但是没有运气。如何解决这个问题?

塞尔吉·罗加奇(Serge Rogatch)

为了防止程序挂起,可以使用PostMessage代替SendMessage

PostMessage(hWnd, WM_COMMAND, GetMenuItemID(hWndSubMenu, 1), 0);

您可能需要进一步研究差异:“发送消息”和“发布消息”之间有什么区别,它们与C#,WPF和Pure Windows编程有何关系?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C Win32:窗口自动关闭

来自分类Dev

Win32窗口创建失败?

来自分类Dev

HWNDHost内的Host Win32窗口

来自分类Dev

Win32窗口立即关闭

来自分类Dev

Win32窗口未显示

来自分类Dev

WPF程序-程序无效win32

来自分类Dev

针对Win32 x64编译后,Electron应用程序将无法打开

来自分类Dev

GetGuiResources WIn32 API使用

来自分类Dev

如何禁用按钮-Win32 API

来自分类Dev

Win32 API SearchPath失败

来自分类Dev

GetGuiResources WIn32 API使用

来自分类Dev

Java到Win32加密API

来自分类Dev

Win32 API 无法 CreateWindowW()

来自分类Dev

从Win32应用程序运行外部exe

来自分类Dev

Boost.Asio Win32 Windows应用程序

来自分类Dev

Win32在应用程序内使用资源字体

来自分类Dev

在Win32应用程序中使用Windows窗体

来自分类Dev

在Win32应用程序中连续运行代码

来自分类Dev

C#应用程序中的Win32异常

来自分类Dev

LaunchFullTrustProcessForCurrentAppAsync 杀死 win32 应用程序

来自分类Dev

Visual Studio:“不是 Win32 应用程序”错误

来自分类Dev

是否显示“公共项目对话框”或“ GetOpenFileName”?(Win32 API)

来自分类Dev

是否显示“公共项目对话框”或“ GetOpenFileName”?(Win32 API)

来自分类Dev

加入线程的按钮导致win32 / winAPI应用程序冻结

来自分类Dev

在窗口标题和消息框中显示错误的语言:Win32应用程序,opengl

来自分类Dev

如何在外部Win32应用程序的窗口上添加WPF覆盖?

来自分类Dev

在Win32控制台应用程序中显示弹出窗口

来自分类Dev

Win32应用程序中的窗口无法正常关闭

来自分类Dev

可以打开Windows的Win32控制台应用程序