如何在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 事件并将 EventArgsNewWindow 属性分配给新的 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服务程序中调用带窗口中的程序的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 Windows 控制台窗口的宽度?

求写一个win32api的c语言创建窗口的程序。要最简单的,带注释谢谢。

Python 如何获得一个Windows程序窗口,并在窗口里的当前

Firebase Cloud Functions:无法在“窗口”上执行“获取”:服务中的非法调用

从 C# 代码调用窗口服务 [关闭]

调用 window.open 时如何在 WPF/WebView2 应用程序中创建自定义窗口?