cmd 调用 win8 app(via URL)

文章详细介绍了如何通过ShellExecute命令在MFC程序中调用Win8相机应用,解决了无法直接通过事件调用的问题,并讨论了为相机应用创建桌面快捷方式的难点,最终决定自定义开发相机应用。


由于DirectShow,multiMedia技术获得摄像头的分辨率不能调节,于是只能用Win8自带的相机了。

我们软件是基于MFC开发的,如果能在软件中通过事件调用Win8的相机APP,那么问题也就解决了。

于是搜索了一些资料,确实找到相关的一些内容,比如:
可以用Metro App Link给已有的一些APP建立桌面快捷方式。

可以用Cmd语句调用win8 app。

其实上面两种的方式是一样的,简单介绍一下如何给Win8 app建立桌面的快捷方式——通过URL
首先,打开控制面板,用“类别”查看,进入程序;
点击“始终使用指定的程序打开某种文件类型”;
可以看到某些特定程序的协议,(貌似今天上传不了图片)自己打开看看吧,在最下面:

最后找到想要建立快捷方式的APP相应的URL

在桌面新建快捷方式,在目标中输入“C:\Windows\System32\cmd.exe /c start "" "***:"  &&exit”
其中***就是App的URL。

然后在MFC程序中就可以用ShellExecute命令调用这个lnk快捷方式,打开win8的应用程序了。

BUT。。。。。。。。。

问题就是相机APP没有URL啊!!!!!!!!!

太奇怪了,其他几乎所有的app都可以找到相应的URL,就是相机这个App没有...
而且用了上面的”metro app link“软件 建立快捷方式,也唯独没有相机的。。

所以,上面的方法在我们软件中又不可行了............................................

 

好在,试了一下自己写的APP,打包安装以后,是有URL的,所以就要自己重新写个相机的APP。

同时也整合了一下我们软件中其他功能,例如传感器(sensor),gps,读写txt文件等,详情请见下一篇。

调用grant_app_all_permissions()方法,打印台打印: 🔍 正在获取应用 com.baidu.searchbox 的所有权限... ⚠️ dumpsys 未找到权限,尝试解析 APK 中的 AndroidManifest.xml... ❌ 未找到任何权限声明,请检查 ADB 输出或手动提供权限列表 涉及的代码如下: def grant_app_all_permissions(self): """ 自动获取应用所有权限并授予(ADB + 弹窗处理) """ print(f"🔍 正在获取应用 {self.package} 的所有权限...") permissions = self.get_app_all_permissions() if not permissions: print("❌ 未找到任何权限声明,请检查 ADB 输出或手动提供权限列表") return print(f"🔑 检测到 {len(permissions)} 个权限,开始授予...") self._grant_permissions_via_adb(permissions) self._handle_runtime_permissions() def get_app_all_permissions(self): """ 获取应用权限(优先 dumpsys,失败后解析 APK) """ permissions = self._get_app_permissions_via_adb() if not permissions: print("⚠️ dumpsys 未找到权限,尝试解析 APK 中的 AndroidManifest.xml...") # permissions = self._get_permissions_from_apk() return permissions def _get_app_permissions_via_adb(self): """ 通过 ADB 解析应用声明的权限(兼容不同设备格式) """ cmd = f'adb shell pm dump {self.package}' try: # ✅ 强制指定 UTF-8 编码并忽略非法字符 result = subprocess.check_output(cmd, shell=True, text=True, encoding='utf-8', errors='ignore') permissions = set() # 匹配所有权限声明段(兼容不同设备格式) for section in re.findall( r"(?:declared permissions:|requested permissions:|REQUESTED PERMISSIONS|GRANTED PERMISSIONS):\n(.*?)(?=\n\n|\Z)", result, re.DOTALL): for line in section.strip().split('\n'): perm_match = re.match(r"^\s*([^\s:]+)", line) if perm_match: perm = perm_match.group(1) if perm.startswith("android.permission.") or perm.startswith("com.baidu."): permissions.add(perm) return list(permissions) except UnicodeDecodeError as e: print(f"⚠️ 检测到编码错误,尝试使用 UTF-8 解码...") return self._get_app_permissions_via_adb() # 递归重试 except Exception as e: print(f"❌ 获取权限列表失败: {e}") return []
最新发布
08-12
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值