Menu

如何检查窗口是否最小化?

Tatsu.

新成员
加入
2016年6月30日
消息
4
编程经验
Beginner
您好,我需要检查在C#中是否最小化窗口是我所做的:
C#:
{
    class RestoreWindow
    {
        [DllImportAttribute("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
 
[DllImportAttribute("user32.dll")]
public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
 
[DllImportAttribute("user32.dll")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
 
[DllImport("user32.dll")]
[return:Marshalas(UnmonagerType.bool)]
static extern bool IsIconic(IntPtr hWnd);
 
public static void maximizedwindowifminized(string windowName,Form f1)
{
    try
    {
        var instance = FindWindow(null, windowName);
 
        if (IsIconic(instance))
        {
            Button btn = new Button();
            btn.Width = 10;
            btn.Height = 10;
            f1.controls.add(BTN);
            MessageBox.Show("Window is minimized");
 
           // ShowWindow(instance, 1);
            //SetForegroundWindow(instance);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}
    }
}
但是当我编译什么都没有发生,你有什么想法吗?
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,732
地点
悉尼,澳大利亚
编程经验
10+
它是不准确的"nothing happen"。您可能没有看到任何特定的事情发生,但代码肯定会做某事。作为开发人员,由您确定代码所做的准确以及与您的期望有不同的情况。这就是调试所在的。

你知道如何调试吗?如果是这样,请做到。如果没有,现在是学习的时候了。您将首先在该方法的头部放置断点(F9)。调用该方法时,执行将在该点中断。然后,您可以按行(F10)步骤,允许您确定执行是否采用您预期的路径。您还可以使用Autos,Locals和Watch Windows和各种其他工具在每个步骤中检查状态,允许您确定变量是否包含您期望的值等。

这将允许确切地确定出错,从中可以确定为什么。如果您无法确定为什么自己,那么您可以通过所有相关信息发布,我们可能有机会确定问题。您将想检查FindWindow返回的句柄,然后使用像Spy ++这样的一些工具,以确保它是您正在寻找的窗口的句柄。
 

Tatsu.

新成员
加入
2016年6月30日
消息
4
编程经验
Beginner
您好,我的目标是我的C#应用​​程序是当我exe文件打开时,在我的winform上创建一个按钮,当exe的窗口关闭时按钮消失。按钮的功能将是如果我们单击窗口最小化的按钮,则将恢复窗口。这是我尝试的:

私人的 静止的 WindowPlacement GetPlacement(㈡ptr. hwnd)
{
WindowPlacement Placement = 新的 WINDOWPLACEMENT();
placement.length = marshal.sizeof(填写);
GetWindowPlacement(HWND, 裁判 placement);
返回 placement;
}

[DllImport("user32.dll.",setLasterror = 真的
[返回:Marshalas(UnmonagerType.bool)]
内部的 静止的 外部 BOOL. GetWindowPlacement(
㈡ptr. HWND, 裁判 WindowPlacement LPWNDPL);
内部的 枚举 ShowWindowCommands:
{
Hide = 0,
Normal = 1,
Minimized = 2,
Maximized = 3,
}

[Serializable]
[structlayout(layoutkind.sequential)]
内部的 塑造 WINDOWPLACEMENT
{
上市 length;
上市 flags;
上市 showwindowcommands showcmd;
上市 system.drawing.Point ptminposition;
上市 system.drawing.Point ptmaxposition;
上市 system.drawing.rectangle rcnormalposition;
}

[DllImport("user32.dll."
私人的 静止的 外部 BOOL. ShowWindowAsync(㈡ptr. HWND, nCmdShow);
上市 静止的 空白 maximizedwindowifminized(细绳 Windowname,Timer Tim,FlowLayoutPanel F1)
{
tim.Start();
Button btn = 新的 Button();
进程[] procs = process.getProcesses();
尝试
{


Foreach. (过程Proc. procs)
{
如果 (proc.processname.contains(windowname))
{
var. 展示位置=寄生(Proc.MainWindowHandle);
console.writeline(placement.showcmd.tostring());

如果 (Placement.showcmd == showwindowcommands.normal)
{

btn = 新的 Button();
// btn.Width = 150;
// btn.Height = 120;
f1.controls.add(BTN);
// btn.Left = 500;
// btn.Visible = true;
// btn.click + = button1_click(windowname);
tim.Stop();
}
tim.Start();

如果 (Placement.showcmd == showwindowcommands.hide)
{
btn.Visible = 错误的;
tim.Stop();

}

}
}
}
抓住
{

}

}
 
最佳 底部