紧急求助!如何通过窗口句柄使隐藏窗口(hide方法)出现

ch67259 2009-03-17 09:00:01
点击窗体的关闭按钮,使其隐藏至任务栏的托盘中。这是一个单实例的程序,运行时,需要在程序的入口处判断是否已经有该进程在运行,如果没有则正常运行;已有程序则根据该进程的句柄。可是如果已运行该程序,且程序隐藏在托盘中(通过form.hide()方法),则无法通过快捷方式将其显示。我发现迅雷和msn都可以实现类似功能,希望各位能给予解答。

我尝试使用API使窗体显示,可是只能在最小化时显示,隐藏后则无法显示。以下是程序入口处发现已有进程运行时的显示窗体代码
其中instance.MainWindowHandle表示进程的主窗口句柄。
public static void HandleRunningInstance(Process instance)
{
SetForegroundWindow(instance.MainWindowHandle);
ShowWindowAsync(instance.MainWindowHandle, 9);
SendMessage(instance.MainWindowHandle, 0x18, GetFocus(),IntPtr.Zero);
}

[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("User32.dll")]
private static extern IntPtr SendMessage(IntPtr hwnd, uint msg, IntPtr wParam, IntPtr lParam);
[DllImport("User32.dll")]
private static extern IntPtr GetFocus();
...全文
787 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
仗剑逗二哈 2009-06-21
  • 打赏
  • 举报
回复
回帖是一种美德!
vpjian 2009-03-17
  • 打赏
  • 举报
回复
C#的主窗口隐藏后是无法取得句柄的(不知道是不是我的方法不对,取加来的是句柄是0)。
但是也不是没办法, 只要程序是自己写的, 在主窗体隐藏、显示后把句柄保存在一个公共的地方。新程序的程序检测到已经运行了就到这个地放读取句柄,调用API显示被窗体就行了!
jinjazz 2009-03-17
  • 打赏
  • 举报
回复
用api设置状态,比如最大化
ShowWindow(instance.MainWindowHandle,SW_SHOWMAXIMIZED);

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧