Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从ASP.NET服务器将焦点设置为另一个窗口_C#_Asp.net Core_.net Core - Fatal编程技术网

C# 从ASP.NET服务器将焦点设置为另一个窗口

C# 从ASP.NET服务器将焦点设置为另一个窗口,c#,asp.net-core,.net-core,C#,Asp.net Core,.net Core,我目前正在开发一个Kiosk风格的应用程序,它将在Raspberry Pi 3B+上运行,其中我的前端是一个Chromium实例,在Kiosk模式下运行,后端是一个本地托管的ASP.NET Core 3.0项目。我现在的问题是,用户需要输入一些文本来搜索某些内容,但我只有触摸屏界面,没有键盘。所以现在我需要关注在后台运行的实例,我可以使用来关注它。当从终端运行命令时,这非常好,但当我的ASP.NET应用程序使用进程调用它时,这不起作用,下面是我的代码: Bash聚焦XVKBD/Chromium:

我目前正在开发一个Kiosk风格的应用程序,它将在Raspberry Pi 3B+上运行,其中我的前端是一个Chromium实例,在Kiosk模式下运行,后端是一个本地托管的ASP.NET Core 3.0项目。我现在的问题是,用户需要输入一些文本来搜索某些内容,但我只有触摸屏界面,没有键盘。所以现在我需要关注在后台运行的实例,我可以使用来关注它。当从终端运行命令时,这非常好,但当我的ASP.NET应用程序使用
进程调用它时,这不起作用,下面是我的代码:

Bash聚焦XVKBD/Chromium:

#显示XVKBD
wmctrl-一个xvkbd
#显铬
wmctrl-a铬
C#代码

public void FocusKeyboard()
{
var proc=新流程
{
StartInfo=newprocessstartinfo(“bash”,“wmctrl-avkbd\”)
};
proc.Start();
}
///从JS传入以告诉wmctrl要关注的内容
公共空白焦点铬(字符串标题)
{
var proc=新流程
{
StartInfo=newprocessstartinfo(“bash”,“$”\“wmctrl-a{title}\”)
};
proc.Start();
}
注意,前端运行的JavaScript通过signer调用C#代码

预期行为:当我调用
FocusKeyboard
方法时,它应该聚焦xvkbd实例,当我调用
FocusChromium
方法时,它应该聚焦Chromium实例

实际行为:它什么也不做


因此,我的问题是:如何在ASP.NET应用程序中为用户切换焦点?

与其尝试在web服务器上摆弄linux和x-session,不如研究chrome的扩展,它为您提供了一个虚拟键盘,例如。除了绕过所有这些麻烦,而且更简单,它还阻止用户访问系统键盘,用户可能会使用系统键盘来打破浏览器的kiosk模式。

您的web服务器没有在xserver上使用句柄运行。事实上,您根本不需要登录,可以远程访问服务器,而无需在raspberry上运行会话。调用图形应用程序不会在桌面上打开它,Web服务器启动的任何应用程序都将作为Web服务器用户运行,这通常受到相当大的限制,但同时可以访问所有Web服务器文件。我会寻找一个不同的解决方案,也许是网页上的javascript键盘。否则,你可能想在我似乎不明白的时候问一下。是否有任何c#代码实际正在执行?当您通过控制台而不是通过javascript调用c#代码时,会发生什么情况?当您从控制台运行c#代码时,它可以完美地工作。同样是的,C#代码正在服务器上执行,因此该代码的父进程是chrome/chrome的js解释器,C#进程的用户也是x会话上登录的用户?chrome中运行的Javascript通过WebSocket调用一个公开的信号器集线器,即信号器集线器(由ASP.NET应用程序拥有并实例化)是运行C#代码的进程。因此,JS的父进程是Chrome,而C#的父进程是我在终端中手动运行的ASP.NET进程