【问题标题】:hide / show program window隐藏/显示程序窗口
【发布时间】:2011-04-30 11:30:20
【问题描述】:

我正在使用Visual Basic 2008

例如我正在运行notepad.exe,我可以隐藏记事本窗口,然后如果我需要它再次显示它?

谢谢。

【问题讨论】:

  • 这比你想象的要困难得多。如果您是尝试学习 VB.NET 的初级程序员,那么这是您需要尝试做的最后一件事。它要求您从 Windows API 调用函数,使用 P/Invoke 从托管代码调用非托管代码。这是可能的,但我不一定推荐它。你想解决什么问题?为什么您的应用程序需要控制其他应用程序(如记事本)?程序应该独立于其他程序运行。如果需要编辑文本,使用工具箱中的TextBox控件;无论如何它几乎与记事本相同

标签: windows vb.net


【解决方案1】:

P/Invoke signature 是:

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function ShowWindow(ByVal hwnd As IntPtr, ByVal nCmdShow As Integer) As Boolean
End Function

ShowWindow() 主题列出了 SW_* 标志的数值。


感谢@Alex K 建议使用ShowWindowAsync() 而不是ShowWindow() 作为评论。

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function ShowWindowAsync(ByVal hwnd As IntPtr, ByVal nCmdShow As Integer) As Boolean
End Function

来自文档:

这个函数发布一个显示窗口 事件到消息队列 给定的窗口。一个应用程序可以使用 此功能避免成为 等待时无响应 无响应的应用程序完成 处理一个显示窗口事件。

【讨论】:

  • 最好使用ShowWindowAsync,因为它适用于差异线程拥有的窗口,并且如果目标挂起/无响应,则不会阻塞。 (相同的原型)
  • 谢谢,为了让它工作,我将 nCmdShow 类型更改为整数,它工作得很好,但是.. 它隐藏了窗口,但是我无法显示它,SW_SHOW 值为 5,我已经尝试过ShowWindowAsync(hwnd, 5) 什么都没有发生……怎么了?
  • @John:你第一次传0(SW_HIDE)隐藏窗口,第二次传5(SW_SHOW)显示窗口?哪一部分不行?您没有在屏幕上看到窗口?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 2017-08-03
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
相关资源
最近更新 更多