winform操作windows系统计算器
标签:summary windows flag async star public activate null syn
winform对系统计算器的调用,启动,最大化最小化显示,在mainwindow设置topmost=true时,正常显示计算器并置顶。
///
/// 获取窗体的句柄函数
///
/// 窗口类名
/// 窗口标题名
/// 返回句柄
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
///
/// 窗体的显示控制
///
/// 句柄
///
/// HIDE = 0
/// NORMAL = 1
/// MAXIMIZE = 3
/// SHOWNOACTIVATE = 4
/// SHOW = 5
/// MINIMIZE = 6
/// RESTORE = 9
/// SHOWDEFAULT = 10
///
[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd,int nCmdShow);
///
/// 更改子窗口,弹出窗口或顶级窗口的大小,位置和Z顺序。这些窗口是根据其在屏幕上的外观排序的。最顶部的窗口获得最高排名,并且是Z顺序中的第一个窗口。
///
/// 窗口的句柄
/// 在Z顺序中位于定位的窗口之前的窗口的句柄 0; 在前面 1; 在后面 -1; 在前面, 位于任何顶部窗口的前面 -2; 在前面, 位于其他顶部窗口的后面
///
///
///
///
/// 窗口尺寸和定位的标志
///
[DllImport("user32.dll")]
private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndlnsertAfter, int X, int Y, int cx, int cy, uint Flags);
//启动计算器
public void start_Calc()
{
AppLog.Info($"start calc ...");
// 获取查找窗体句柄(通过窗体标题名)
IntPtr calcHandle = FindWindow(null, "计算器");
if (calcHandle == IntPtr.Zero)
{
AppLog.Info($"pre start calc ...");
pcalc = Process.Start("calc.exe");
Thread.Sleep(800);
calcHandle = FindWindow(null, "计算器");
}
//将计算器显示为正常状态
bool resultSetWindowState = ShowWindowAsync(calcHandle, 1);
AppLog.Info($"set calc window status:{resultSetWindowState}");
//将计算器显示在最上层
bool result = SetWindowPos(calcHandle, new IntPtr(-1), 0, 0, 0, 0, 1 | 2);
AppLog.Info($"set calc status:{result}");
}
winform操作windows系统计算器
标签:summary windows flag async star public activate null syn
原文地址:https://www.cnblogs.com/teng-0802/p/11792834.html
评论