- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Creat on 2019-06-12
2019-06-12 12:00:52 By 独立观察员
独立观察员 2019年6月12日
有的时候我们程序需要启动外部程序来配合实现某些功能,比如启动一个 Cef 相关程序来承载网页。那
么如果那个外部程序并没有实现单例启动,我们程序去启动它的时候就有可能启动了多个,这样轻则造
成系统卡顿,重则引发
Bug。这肯定是我们不想看到的,所以本文来探讨如何在启动某个外部程序时,始终只会启动一个。
先来看看外部程序(其实不用关心),其中有一个这样的类:
public class BoundObject
{
[DllImport("user32.dll", EntryPoint = "ShowWindow", SetLastError = true)]
static extern bool ShowWindow(IntPtr hWnd, uint nCmdShow);
/// <summary>
/// 是否关闭:1-隐藏 2-关闭
/// 用法:onclick="javascript:alert('1');BoundObject.CloseFlag('1');"
/// </summary>
public void CloseFlag(string flag)
{
if (flag == "1")
{
System.Diagnostics.Process[] processes = System.Diagnostics.Process.
GetProcessesByName("CefApp");
if (processes.Length >= 1)
{
Console.WriteLine($"当前系统中有该程序在运行,将隐藏该
程序");
//ShowWindow(processes[0].MainWindowHandle, 0); //
隐藏;
ShowWindow(processes[0].MainWindowHandle, 6);
//最小化;
}
}
else if (flag == "2")
{
Console.WriteLine($"程序即将退出...");
Environment.Exit(0);
}
}
}
Creat on 2019-06-12
关键的就是flag == "1" 里面的内容,先获取所有名为"CefApp"的进程,如果大等1,表示进程已经存在,
这里是将其隐藏,用的是系统的 ShowWindow 方法。
另外,与本文无关,但是有助于理解使用场景的是:该程序为一个 Cef 相关程序,以上的类可用于让 Cef
中承载的网页能够通过 JS 调用到这个 C# 的方法,进而进行隐藏或关闭控制。相关设置如下:
CefSharp.Wpf.ChromiumWebBrowser webView = new CefSharp.Wpf.ChromiumWebBrowser();
var bindScriptOption = new CefSharp.BindingOptions();
bindScriptOption.CamelCaseJavascriptNames = false;
webView.RegisterJsObject("BoundObject", new BoundObject(), bindScriptOption);
回归正题,现在来看看主程序里面:
System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("CefApp");
if (processes.L
您可能关注的文档
- 5640_Unity_容器简单使用方法_unity-simple-use.pdf
- 5640_Unity_容器简单使用方法_unity-simple-use_20200512_082301.pdf
- 5675_搭建_Frp_来远程内网_Windows_和_Linux_机子_frp-windows-linux.pdf
- 5705_PDF目录编辑器使用介绍_spire-pdf-tool.pdf
- 5705_PDF目录编辑器使用介绍_spire-pdf-tool_20191216_155213.pdf
- 5705_PDF目录编辑器使用介绍_spire-pdf-tool_20200302_230233.pdf
- 5757_使用_Floccus_插件和坚果云同步_Chrome_类浏览器书签_floccus-chrome-bookmarks.pdf
- 5772_在香蕉派的树莓派系统上配置_Syncthing_自启动_bananapi-syncthing-autostart.pdf
- 5809_ASP.NET_Core_MVC_网站学习笔记_asp-net-core-mvc-learning.pdf
- 5819_WPF原生绑定和命令功能使用指南_wpf-binding-and-command.pdf
- 2024年物业客服个人工作总结(优选16篇).docx
- 2024年物业实习总结报告7篇.docx
- 2024年物业品质管理经理岗位职责4篇.docx
- 医学生临床见习实习报告{范本3篇}.docx
- 医学生理学问答题及答案.docx
- 2024年04月国家艺术基金管理中心应届毕业生招考聘用笔试历年(难与易错考点荟萃)高频考题后附答案详解.docx
- 2024年04月四川省武胜县2024年上半年“小平故里英才”引进急需紧缺专业人才笔试历年(难与易错考点荟萃)高频考题后附答案详解.docx
- 2024年04月山东菏泽市定陶区技工学校招考聘用8人笔试历年(难与易错考点荟萃)高频考题后附答案详解.docx
- 2024年04月山东菏泽东明县职业中等专业学校招考聘用教师30人笔试历年(难与易错考点荟萃)高频考题后附答案详解.docx
- 2024年04月山东济南市教育局所属学校(单位)招考聘用114人笔试历年(难与易错考点荟萃)高频考题后附答案详解.docx
文档评论(0)