You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测基于Delphi 10.1+Windows11的程序是否具备摄像头访问权限?

检测Delphi程序中TdxCameraControl的摄像头访问权限(Windows 11)

在Windows 11环境下,结合Delphi 10.1与DevExpress的TdxCameraControl组件,可通过以下两种方式检测摄像头访问权限:

方法一:利用TdxCameraControl组件自身特性判断

组件的启动状态和设备列表可间接反映权限情况:

  • 先刷新设备列表:dxCameraControl1.DeviceManager.Refresh;
  • 若dxCameraControl1.DeviceManager.Devices.Count = 0,可能是无设备或权限被拒,进一步尝试激活组件:
    dxCameraControl1.Active := True;
    if not dxCameraControl1.Active then
    begin
      // 权限被拒或设备不可用,可结合OnError事件排查
      ShowMessage('无摄像头访问权限或设备不可用');
    end;
    
  • 可通过组件的OnError事件捕获具体错误,若错误代码为ERROR_ACCESS_DENIED(值为5),则明确是权限问题。

方法二:调用Windows原生隐私权限API直接检测

Windows 10及以上提供了直接检查摄像头隐私权限的API,Windows 11完全兼容,步骤如下:

  1. 手动声明API类型与函数(Delphi 10.1无自带声明):
    type
      PCameraPrivacySettings = ^TCameraPrivacySettings;
      TCameraPrivacySettings = record
        Size: DWORD;
        CameraAccessAllowed: BOOL;
        CameraCaptureAllowed: BOOL;
        CameraStreamingAllowed: BOOL;
      end;
    
      function CheckCameraPrivacySettings(hWnd: HWND; var Settings: TCameraPrivacySettings): HRESULT; stdcall; external 'user32.dll' delayed;
    
  2. 编写检测函数:
    function HasCameraAccessPermission: Boolean;
    var
      Settings: TCameraPrivacySettings;
      HR: HRESULT;
    begin
      Result := False;
      ZeroMemory(@Settings, SizeOf(Settings));
      Settings.Size := SizeOf(Settings);
      HR := CheckCameraPrivacySettings(0, Settings);
      if Succeeded(HR) then
        Result := Settings.CameraAccessAllowed and Settings.CameraCaptureAllowed;
    end;
    
  3. 调用检测函数:
    if HasCameraAccessPermission then
      ShowMessage('已拥有摄像头访问权限')
    else
      ShowMessage('无摄像头访问权限');
    

注意事项

  • 若API调用失败(仅可能发生在低于Windows 10 1607的系统,Windows 11无需担心),可回退到方法一判断
  • 建议结合两种方法:先通过API快速判断系统权限,再通过组件启动验证设备可用性

内容的提问来源于stack exchange,提问作者Jack Gurun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:07:15