如何在windows服务程序中调用带窗口中的程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在windows服务程序中调用带窗口中的程序相关的知识,希望对你有一定的参考价值。
打开windows系统的系统服务,有以下几种方式: 1、右击我的电脑/计算机,点击管理,打开计算机管理。 依次选择服务和应用程序——服务。 2、使用快捷键和命令: 同时按下win+r键,在运行窗口中输入services.msc,即可打开服务。 参考技术A 修改注册表 在“开始→运行”中键入“regedit.exe”,打开“注册表编辑器”,展开分支“HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services”,在右侧窗格中显示的就是本机安装的服务项。 如果要新建服务,只须点击“编辑→新建→项”,然后为此项. 参考技术B ShellExecute函数原型及参数含义如下:ShellExecute(
HWND hwnd, //父窗口句柄 (如:NULL,Handle等)
LPCSTR lpOperation, //操作类型 (如:"open")*要加英文双引号
LPCSTR lpFile, //要进行操作的文件或路径
LPCSTR lpParameters, //当lpOperation为“explore”时指定要传递的参数,通常设为NULL
LPCSTR lpDirectory, //指定默认目录,通常设为NULL
INT nShowCmd //文件打开的方式,以通常方式还是最大化或最小化显示,一般为SW_SHOWNORMAL
)
例子如下:
//调用计算器
ShellExecute(NULL,"open","calc.exe",NULL,NULL,SW_SHOWNORMAL);
//调用记事本
ShellExecute(NULL,"open","NOTEPAD.EXE",NULL,NULL,SW_SHOWNORMAL);本回答被提问者采纳
调用 window.open 时如何在 WPF/WebView2 应用程序中创建自定义窗口?
【中文标题】调用 window.open 时如何在 WPF/WebView2 应用程序中创建自定义窗口?【英文标题】:How to create custom windows in a WPF / WebView2 application when window.open is called? 【发布时间】:2021-12-03 06:23:05 【问题描述】:我有一个 Webview2 应用程序,它需要能够拦截 window.open
调用并以某种方式配置生成的窗口(例如,使其不可调整大小、无框、删除出现的默认位置栏等)。
到目前为止,我知道我需要拦截 NewWindowRequested
事件并将 EventArgs
的 NewWindow
属性分配给新的 Webview2 控件,但是我无法让它工作,而且我没有'没有找到任何文档列出尝试这样做的示例。
我正在使用 WPF。
还请注意,我对 WPF 和 WebView2 都是新手,所以也许我正在做的事情完全没有意义。
这大概是我的代码:
public static async void CoreWebView2_NewWindowRequested(object sender, CoreWebView2NewWindowRequestedEventArgs e)
var obj = e.GetDeferral(); // I think I need to do this to ensure that the resulting window ends up as the return of window.open
var win = new System.Windows.Window(); // create my WPF window
var w = new WebView2(); // create my Webview control
win.Content = w; // site the Webview control?
await w.EnsureCoreWebView2Async(MainWindow.Webview.CoreWebView2.Environment);
e.NewWindow = w.CoreWebView2;
obj.Complete();
我看到的问题是EnsureCoreWebView2Async
返回的Task
永远不会完成。
我的设置是否正确?为什么EnsureCoreWebView2Async
不解析?
【问题讨论】:
试试:public async void CoreWebView2_NewWindowRequested
然后你可以await
。
但是async void
中的异常不会导致进程崩溃吗?我的意思是我想我可以用 try/catch 包装所有东西,但有点烦人;也许这就是我会做的。 @PoulBak
async void
是专门为事件处理程序设计的,只能用于此目的。如果你不await
,那就是“一劳永逸”。
@PoulBak 好的,我会更新我的代码。虽然它不能解决我的问题
@PoulBak 似乎调用win.Show()
使其工作并且任务完成
【参考方案1】:
看来我必须致电win.Show()
才能完成EnsureCoreWebView2Async
Task
。
也许我真的只想在 webview 内容加载后才显示窗口,但这至少是一个好的开始。
【讨论】:
以上是关于如何在windows服务程序中调用带窗口中的程序的主要内容,如果未能解决你的问题,请参考以下文章
求写一个win32api的c语言创建窗口的程序。要最简单的,带注释谢谢。
Python 如何获得一个Windows程序窗口,并在窗口里的当前