【问题标题】:Run Camera App of Windows 10 from Desktop Application从桌面应用程序运行 Windows 10 的相机应用程序
【发布时间】:2016-09-14 22:40:01
【问题描述】:

我只需要在 c# 中运行 Windows 10 的默认相机应用程序。 我尝试了不同的方法,例如:

process.start("camera.exe"):
ms-camera://
microsoft.windows.camera

但都失败了。

它不是商店应用,所以我不能使用“launch URI”方法。

【问题讨论】:

标签: c# win-universal-app


【解决方案1】:

使用它来启动相机应用:

Process.Start("microsoft.windows.camera:");

【讨论】:

  • 有没有不使用物理相机的相机模拟?我的笔记本电脑中没有安装 USB 摄像头或摄像头。因此,我想知道是否有任何相机模拟可以用作 UWP 应用的物理相机?
  • 这很酷,即使是从命令行工作,例如启动 microsoft.windows.camera:
【解决方案2】:

相机应用程序是通用 Windows 应用程序,因此您不能简单地执行 *.exe。使用 Nasreddine 所示的注册协议或通过IApplicationActivationManager 使用此方法。

使用来自this answer的源代码

public enum ActivateOptions
{
    None = 0x00000000,  // No flags set
    DesignMode = 0x00000001,  // The application is being activated for design mode, and thus will not be able to
                                // to create an immersive window. Window creation must be done by design tools which
                                // load the necessary components by communicating with a designer-specified service on
                                // the site chain established on the activation manager.  The splash screen normally
                                // shown when an application is activated will also not appear.  Most activations
                                // will not use this flag.
    NoErrorUI = 0x00000002,  // Do not show an error dialog if the app fails to activate.                                
    NoSplashScreen = 0x00000004,  // Do not show the splash screen when activating the app.
}

[ComImport, Guid("2e941141-7f97-4756-ba1d-9decde894a3d"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IApplicationActivationManager
{
    // Activates the specified immersive application for the "Launch" contract, passing the provided arguments
    // string into the application.  Callers can obtain the process Id of the application instance fulfilling this contract.
    IntPtr ActivateApplication([In] String appUserModelId, [In] String arguments, [In] ActivateOptions options, [Out] out UInt32 processId);
    IntPtr ActivateForFile([In] String appUserModelId, [In] IntPtr /*IShellItemArray* */ itemArray, [In] String verb, [Out] out UInt32 processId);
    IntPtr ActivateForProtocol([In] String appUserModelId, [In] IntPtr /* IShellItemArray* */itemArray, [Out] out UInt32 processId);
}

[ComImport, Guid("45BA127D-10A8-46EA-8AB7-56EA9078943C")]//Application Activation Manager
class ApplicationActivationManager : IApplicationActivationManager
{
    [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)/*, PreserveSig*/]
    public extern IntPtr ActivateApplication([In] String appUserModelId, [In] String arguments, [In] ActivateOptions options, [Out] out UInt32 processId);
    [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
    public extern IntPtr ActivateForFile([In] String appUserModelId, [In] IntPtr /*IShellItemArray* */ itemArray, [In] String verb, [Out] out UInt32 processId);
    [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
    public extern IntPtr ActivateForProtocol([In] String appUserModelId, [In] IntPtr /* IShellItemArray* */itemArray, [Out] out UInt32 processId);
}

然后通过其 AppUserModelID Microsoft.WindowsCamera_8wekyb3d8bbwe!App 启动相机应用程序:

private void button3_Click(object sender, EventArgs e)
{
    ApplicationActivationManager appActiveManager = new ApplicationActivationManager();
    uint pid;
    appActiveManager.ActivateApplication("Microsoft.WindowsCamera_8wekyb3d8bbwe!App", null, ActivateOptions.None, out pid);
}

【讨论】:

  • 我尝试了两种方法,但都失败了第一种方法显示弹出屏幕以在窗口商店中查看新应用第二种方法发送异常
  • 我已经在windows 10上成功测试了这两种方法。可能你已经卸载了电脑上的相机应用。您可以在计算机上从 Windows 10 的开始菜单中启动相机应用吗?
  • 我可以从 menu 启动它。能否请您检查一下您的答案。
  • 请将 Startmenü 中条目的屏幕截图和正在运行的 App 的屏幕截图添加到问题中,以便我们知道我们在谈论同一件事
猜你喜欢
  • 2015-11-28
  • 2010-10-30
  • 2015-04-20
  • 2018-12-04
  • 1970-01-01
  • 2017-09-16
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多