使用c#在应用程序退出时处理句柄

时间:2009-09-09 06:40:14

标签: c#

我正在使用以下代码来阻止正常工作的任务栏。 但由于我的应用程序在后台运行,因此退出应用程序的唯一方法 是通过从任务管理器中删除.exe。因此,当像这样退出时,被阻止的任务栏保持相同的状态。但实际上它在退出应用程序时会恢复任务栏。

我这样做的原因是,它是一个自助服务终端应用程序。

克服这个问题的方法是什么。

public class Taskbar
{
    [DllImport("user32.dll")]
    public static extern int FindWindow(string className, string windowText);
    [DllImport("user32.dll")]
    public static extern int ShowWindow(int hwnd, int command);

    public const int SW_HIDE = 0;
    public const int SW_SHOW = 1;

    public int _taskbarHandle;
    protected static int Handle
    {
        get
        {
            return FindWindow("Shell_TrayWnd", "");
        }
    }

    public Taskbar()
    {
        _taskbarHandle = FindWindow("Shell_TrayWnd", "");
    }

    public static void Show()
    {
        ShowWindow(Handle, SW_SHOW);
    }

    public static void Hide()
    {
        ShowWindow(Handle, SW_HIDE);
    }
}

5 个答案:

答案 0 :(得分:2)

为什么不直接使用此实现来全屏运行?

http://www.codeproject.com/KB/cs/FullScreenDotNetApp.aspx

答案 1 :(得分:1)

就像其他人在你杀死申请号时说的那样。

你的帖子有点稀疏,为什么你不能优雅地关闭你的应用程序,所以我建议这个方法。

1) 可以按下的热键(http://www.codeproject.com/KB/system/Hotkeys.aspx)将优雅地关闭您的应用程序。我个人喜欢这种方法,因为我在很多应用程序中使用热键。

2) 启动一个单独的应用程序,它将唤醒每个XXX并检查主应用程序是否正在运行,如果它未运行则运行Show代码然后自行终止。这种方法非常类似于病毒的工作方式,所以它的尝试和工作:)

答案 2 :(得分:0)

如果你唯一的退出途径是杀死它,那么恐怕你无法将物业重置为正常。

可以有一个解决方法。

创建一个通过轮询监视应用程序的服务,当它发现您的应用程序“未运行”时,它会将TaskBar恢复正常。

可能还有其他类似的解决方法,但考虑到限制,我无法想到在您的应用程序中执行此操作的方法。

答案 3 :(得分:0)

要退出应用程序,我正在注册热键组合并恢复任务栏并以编程方式从任务栏中终止该进程。

答案 4 :(得分:0)

您可以让您的应用程序检查文件的存在(或者您可以从外部控制的任何其他内容,并且应用程序可以访问它),如果找到:dispose&出口。 它很脏但是可以更好地控制应用程序的终止方式而不是从任务管理器中删除它。