【问题标题】:How can I prevent windows from showing in .NET?如何防止 Windows 在 .NET 中显示?
【发布时间】:2011-03-15 12:35:03
【问题描述】:

我目前正在使用 C# 编写访问控制程序,并且遇到了阻塞窗口的问题。我想出的最初想法是在进程的 IntPtr 窗口句柄给出的位置上渲染一个纯黑色的表格。其中的问题是平滑地更新表单的位置和位置的 z-index(因为我不希望它位于最顶层)。我还注意到我的解决方案的资源使用率高得离谱,因为我使用循环来不断检查位置。

因此我问:在不消耗大量资源的情况下,最好的解决方案是什么?入口点只是正在运行的进程的名称。

目前这个想法只是阻止浏览器(IE:一个学校应用程序,以防止在讲座进行时分心)。

更多信息:

  • 我不想在 我自己的应用程序,我正在尝试 遮挡其他进程的窗口。

  • 我的应用程序不是 病毒/烦人的程序,它是 本质上是为了防止使用 可能分散注意力的应用程序 在学校环境中。制作好了 在学校电脑上讲课 实验室。

  • 我目前正在拉主窗口 从被捕获的过程中 浏览器的进程名称。

  • 我也无法完全禁用计算机。

【问题讨论】:

  • @Jonny:没有“C#.NET”这样的东西。它是“C#”。
  • 阻止应用程序启动不是更好吗?
  • 如果进程有多个窗口怎么办?
  • 有趣的想法,但是当讲座处于活动状态时阻止外部网络访问不是更容易吗?
  • 从用户的角度,我可以要求您的应用程序不要乱用属于其他应用程序的窗口吗?

标签: c# .net blocking access-control


【解决方案1】:

我真的讨厌讨厌任何试图弄乱其他应用程序窗口的应用程序。对不起,这来自很深。

我能想到的唯一明智的事情是锁定当前用户会话,并将计算机切换到属于另一个帐户的另一个桌面,除了在这种情况下需要做任何事情之外,没有其他权限。

或者,如果完全禁用计算机是可以接受的,您可以将所有显示器放在教师办公桌上的一个电源开关上。

【讨论】:

  • 对不起,你有这种感觉,伙计。我不是第一个这样提出申请的人,我也不是第一个被用来制作申请的人。到目前为止,在教师办公桌上只有一个电源开关,嗯:我不想锁定所有东西并完全禁用计算机,我只是想阻止浏览器。多个会话也无济于事。只有 20 台计算机,都在使用中。
【解决方案2】:

如果你想隐藏你的应用程序窗口,我可以建议 3 件事。首先,尝试将表单的可见属性设置为 true 并调用 hide() 方法。第二件事是将表单的透明度设置为 100%,这将隐藏它。第三是,也许考虑你的应用程序应该是一个 windows 服务而不是一个 windows 窗体应用程序。

如果您希望隐藏其他窗口以便您的应用程序始终位于顶部,请在表单中将 TopMost 属性设置为 true:http://msdn.microsoft.com/en-us/library/system.windows.forms.form.topmost(VS.71).aspx

这也可能有帮助:http://www.codeproject.com/KB/cs/windowhider.aspx

【讨论】:

  • 是的,我不想用表单来覆盖所有内容,也不需要隐藏我的应用程序。我在问题中提到了这一点。对不起XD
  • 其实看起来很有希望,我试试看。
  • 显然,您必须修改它以满足您的需要。但基本上,简而言之,您需要做的是枚举所有窗口(它向您展示如何操作),然后在您想要隐藏的每个窗口上调用 ShowWindow() API(本文还向您展示了如何做)。祝你好运!
  • 像梦一样工作,谢谢伙计,这正是我一直在寻找的解决方案。
【解决方案3】:
   [DllImport("user32.dll")]
   static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 

   static void MinimizeProcess(string procName)
    {
        foreach (Process p in Process.GetProcesses())
        {
            if (p.ProcessName == procName)
            {
                ShowWindow(p.MainWindowHandle,11);

            }
        }
    }

如果您有一个进程名称数组,您显然希望将其重构为一个数组,这样您就不会为要最小化的所有内容循环遍历每个进程,但您明白了。

【讨论】:

  • 我喜欢那里更简单的方法。
【解决方案4】:

您可以使用 windows api 隐藏有问题的窗口。 user32.showwindow

不完全符合您的要求,但可能更简单。

【讨论】:

  • 实际上这可能非常有用,因为大多数浏览器都在一个窗口中保留选项卡,最好没有人有多个窗口。谢谢你第一个真正可能的答案,不是火焰伴侣。
  • 欢迎您。只是不要忘记取消隐藏。我建议您将隐藏窗口列表存储在一个文件中,并在您执行的每个操作时更新。这样您就可以轻松地从崩溃中恢复。否则你只会用僵尸应用程序吃掉资源。
【解决方案5】:

你可以这样做:

this.Hide()

this.Visible = false;

或者如果这是您不想显示的主要内容,请在启动应用程序时不要运行论坛。

【讨论】:

  • 我并不是要隐藏我的应用程序的窗口,而是要隐藏我希望隐藏的应用程序名称的进程列表中的选择性进程。
  • 问题出在其他应用程序的窗口,而不是当前窗口。
猜你喜欢
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
  • 2022-01-08
  • 2011-04-10
  • 1970-01-01
相关资源
最近更新 更多