开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 334|回复: 14
收起左侧

[易语言] 有禁用USB供电的API吗?

[复制链接]
结帖率:84% (43/51)
发表于 2024-4-24 17:50:51 | 显示全部楼层 |阅读模式   广东省广州市
88精币
不是禁用设备或卸载设备这种哦。是彻底断掉指定USB端口的供电

类似于,安装USB驱动的时候鼠标和键盘会短暂断电灯不亮无响应的这种。
既然安装USB驱动的时候是可以断电的 那么应该是可以通过某些手段切断某个USB的供电的,但是我上网找了好久,也问了gpt没找到什么可用的方案


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:78% (62/80)

签到天数: 3 天

发表于 2024-4-24 17:51:53 | 显示全部楼层   江苏省徐州市
我昨天还在搜这个问题,  这么巧吗 ,这么冷门的需求都能碰到 ,哈哈哈
回复

使用道具 举报

结帖率:78% (62/80)

签到天数: 3 天

发表于 2024-4-24 17:52:25 | 显示全部楼层   江苏省徐州市
你是不是想重启模块用的
回复

使用道具 举报

结帖率:84% (43/51)

签到天数: 20 天

 楼主| 发表于 2024-4-24 17:54:03 | 显示全部楼层   广东省广州市
q517226994 发表于 2024-4-24 17:52
你是不是想重启模块用的

我是网银U盾,我想一直插着,需要的时候给电启动
回复

使用道具 举报

结帖率:84% (43/51)

签到天数: 20 天

 楼主| 发表于 2024-4-24 17:54:39 | 显示全部楼层   广东省广州市
q517226994 发表于 2024-4-24 17:52
你是不是想重启模块用的

你有没有什么好想法?
回复

使用道具 举报

结帖率:94% (196/208)

签到天数: 16 天

发表于 2024-4-24 17:58:25 | 显示全部楼层   黑龙江省伊春市
对于软件来说,禁用USB供电不像禁用或卸载设备那么直接。USB供电是由硬件控制的,一般是由主板的USB控制器来管理的。

对于Windows来说,你可以通过更改电源管理设置来控制USB设备的供电,但是您可能无法选择特定的USB端口。而且这通常是一个全局设置。

在设备管理器devmgmt.msc中,Windows提供了一个选项,允许电源管理关闭设备以节省电源,但这并不是断电,只是使设备进入省电模式。

在Linux系统下,你可能可以通过写入到/sys/bus/usb/devices/USB_ID/power/control中对USB供电进行控制,将值设为’off’以禁用设备供电。

然而,这只是电源的供应方式,并不能明确地切断USB端口的供电。我建议一种方法可能是尝试编写自己的驱动程序来控制USB控制器,但这可能需要更高级的技术知识和时间投入。但请注意,这样操作可能引发系统稳定性问题,因此需要谨慎进行。

我必须强调,尝试修改USB供电的行为可能会对设备造成潜在的损害。任何这样的尝试都应当在完全理解可能的后果后进行。
回复

使用道具 举报

结帖率:100% (11/11)

签到天数: 20 天

发表于 2024-4-24 18:05:11 | 显示全部楼层   福建省福州市
硬件层面改  类似于开机棒那种 通过wifi接收指令  控制断点送电就简单了
回复

使用道具 举报

结帖率:100% (2/2)

签到天数: 21 天

发表于 2024-4-24 18:13:42 | 显示全部楼层   山西省太原市
用户名205252 发表于 2024-4-24 17:54
我是网银U盾,我想一直插着,需要的时候给电启动

这种东西还是不用的时候拔了安全,咱就是说有这么懒么?
回复

使用道具 举报

结帖率:93% (66/71)

签到天数: 9 天

发表于 2024-4-24 18:23:46 | 显示全部楼层   山西省晋城市
要通过编程方式禁用USB设备的电源,可以使用`WinUsb_SetPowerPolicy` API来实现这一目的。这个API允许你设置USB设备的电源策略,包括禁用设备的电源。以下是如何使用这个API来禁用USB电源的步骤:

1. **获取USB接口句柄**:
   首先,你需要通过`WinUsb_Initialize`函数获取USB设备的接口句柄。

2. **设置电源策略**:
   使用`WinUsb_SetPowerPolicy`函数来设置电源策略。为了禁用USB设备的电源,你可能需要设置一个策略,使得设备在没有传输时不会自动进入挂起状态。

3. **使用`AUTO_SUSPEND`策略类型**:
   将`PolicyType`参数设置为`AUTO_SUSPEND`(0x81),并传递一个`Value`参数,该参数指向一个`UCHAR`变量。如果将此变量设置为`FALSE`,则可以阻止USB设备在没有传输时自动进入挂起状态。

以下是使用`WinUsb_SetPowerPolicy`禁用USB电源的示例代码:

```c
WINUSB_INTERFACE_HANDLE hDeviceHandle; // 假设这是通过WinUsb_Initialize获取的设备句柄
UCHAR disableAutoSuspend = FALSE; // 设置为FALSE以禁用自动挂起

// 设置电源策略,禁用自动挂起
BOOL result = WinUsb_SetPowerPolicy(
    hDeviceHandle,            // 接口句柄
    AUTO_SUSPEND,            // 策略类型
    sizeof(disableAutoSuspend), // Value缓冲区的大小
    &disableAutoSuspend      // 新的电源策略值
);

if (!result) {
    // 处理错误情况
    DWORD error = GetLastError();
    // 可以在这里输出错误信息或执行其他错误处理
}
```

请注意,禁用USB设备的电源可能会影响设备的功能和性能,因为某些设备依赖于定期的电源来维持其状态。此外,错误地使用API可能导致系统不稳定或其他意外行为,因此请确保你了解如何正确使用这些API,并在必要时咨询专业的开发文档或寻求技术支持。

易语言是一种中文编程语言,它允许开发者使用中文来编写程序。由于易语言并非主流编程语言,因此并没有官方的API直接对应于Windows的WinUsb API。但是,易语言支持调用Windows API,这意味着你可以使用易语言编写代码来调用`WinUsb_SetPowerPolicy`函数。

以下是将你提供的C代码转换成易语言伪代码的示例:

```e
.版本 2
.程序集 程序集1
.程序集 程序集1.程序集类型:无
.子程序 主程序
    .局部变量 hDeviceHandle, WINUSB_INTERFACE_HANDLE
    .局部变量 disableAutoSuspend, UCHAR, , FALSE
    .局部变量 result, BOOL
    .局部变量 error, DWORD

    // 假设hDeviceHandle是通过WinUsb_Initialize获取的设备句柄
    // hDeviceHandle = WinUsb_Initialize(...)

    // 设置电源策略,禁用自动挂起
    result = 调用WinUsb_SetPowerPolicy(hDeviceHandle, AUTO_SUSPEND, 大小(disableAutoSuspend), @disableAutoSuspend)

    .如果(结果 = 假)
        错误 = GetLastError()
        // 处理错误情况,例如弹出错误信息或记录日志
    .否则
        // 电源策略设置成功
    .如果结束
结束程序

.子程序 调用WinUsb_SetPowerPolicy, BOOL, 公开, 静态
    .参数 hDeviceHandle, WINUSB_INTERFACE_HANDLE
    .参数 PolicyType, ULONG
    .参数 ValueLength, ULONG
    .参数 Value, UCHAR 指针
    // 调用WinUsb_SetPowerPolicy API
    // 这里需要使用易语言的API声明和调用机制
    // 请根据实际情况调整参数传递和API声明
    // 返回调用结果
    返回(WinUsb_SetPowerPolicy(hDeviceHandle, PolicyType, ValueLength, Value))
```

请注意,上述代码只是一个示例,并不是可以直接在易语言环境中运行的代码。在易语言中调用Windows API时,需要使用易语言的API声明和调用机制,这可能涉及到使用`.DLL命令`或`.DLL`、`.DLL 参数`等关键字来声明和调用外部DLL中的函数。

由于易语言不是直接支持USB设备的高级操作,你可能需要查阅易语言的文档或社区提供的资源,以找到正确的方法来声明和调用Windows API。此外,错误处理和API调用的细节也需要根据易语言的具体语法进行调整。

回复

使用道具 举报

结帖率:99% (121/122)

签到天数: 17 天

发表于 2024-4-24 19:01:31 | 显示全部楼层   贵州省贵阳市
winAPI最多只能控制电源策略,不能直接切断物理供电。
另外,winAPI也没有直接切断usb供电的功能。(如果你够牛逼,可以写个驱动来直接控制硬件。要知道,直接和硬件通信,都是低级语言。当然易语言属于高级语言,所以是不可能实现的。)

综上所述,,,你还是考虑禁用、启用USB接口来的比较现实。
就算你够牛逼,能够随意切断、开启USB的供电,这种方法,也会对你的USB设备造成不可逆的损伤。不可取。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表