如何控制硬盘、软驱、键盘、POWER等指示灯打开与关闭?

huaboy2004 2005-04-28 09:33:51
初步有以下想法:
1、硬盘指示灯
可以通过读写硬盘来实现,但是思路还不是很明朗,还有就是如何控制硬盘灯打开的次数,随机的选择1、2或3次

2、键盘指示灯
可以通过发送键盘消息实现,不知道是否可行,觉得打开没问题,不知道关闭会不会实现

3、软驱指示灯
这个就比较难了,因为要求不能放软盘,不能通过写软盘来实现

4、POWER灯
这个可以暂时不做了,WINDOWS下面没发现有控制这个灯的函数,估计不同的主板要写不同的寄存器

哪位大侠硬件了解比较多,请多多指教,这里多谢了!
...全文
606 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
huaboy2004 2005-05-17
  • 打赏
  • 举报
回复
没人回答我重新开贴
http://community.csdn.net/Expert/topic/4014/4014534.xml?temp=.6385767
huaboy2004 2005-05-17
  • 打赏
  • 举报
回复
接着UP
flashboy 2005-05-17
  • 打赏
  • 举报
回复
应该还是可以实现的可能的
huaboy2004 2005-05-17
  • 打赏
  • 举报
回复
UP
huaboy2004 2005-05-17
  • 打赏
  • 举报
回复
怎么就没人看一下了,UP一下也好啊,郁闷
huaboy2004 2005-05-16
  • 打赏
  • 举报
回复
好久没来了,怎么还是看不到有用的资料呢!现在具体解决键盘灯的问题,解决后100全给

*********模拟键盘虚拟按键问题***********
根据MSDN上面的提示,可以利用下面的函数控制键盘灯的on和off状态。
SetVirtualKey(BYTE bVKey, BOOL bState)
{
BYTE keyState[256];

GetKeyboardState((LPBYTE)&keyState);
if( (bState && !(keyState[bVKey] & 1)) ||
(!bState && (keyState[bVKey] & 1)) )
{
// Simulate a key press
keybd_event( bVKey,
0x45,
KEYEVENTF_EXTENDEDKEY | 0,
0 );

// Simulate a key release
keybd_event( bVKey,
0x45,
KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP,
0 );

// keyState[bVKey] = !(keyState[bVKey]&1);
// SetKeyboardState((LPBYTE)keyState);

}
}

我想控制Num Lock灯的开关,产生闪烁效果,用下面的函数实现:
void SetNumLockLed()
{
int nTimes = 3;
for(int i=0;i<nTimes;i++)
{
Sleep(1000);
SetVirtualKey(VK_NUMLOCK,FALSE); //关闭Num Lock灯
SetVirtualKey(VK_SCROLL,FALSE); //关闭Scroll Lock灯
SetVirtualKey(VK_CAPITAL,FALSE); //关闭Caps Lock灯
// AfxMessageBox("aa");
Sleep(1000);
SetVirtualKey(VK_NUMLOCK,TRUE); //打开Num Lock灯
SetVirtualKey(VK_SCROLL,TRUE); //打开Scroll Lock灯
SetVirtualKey(VK_CAPITAL,TRUE); //打开Caps Lock灯
// AfxMessageBox("bb");

}
}

现在的问题是我设定的times是3次,理论上应该是闪烁三次(关闭和打开各三次,交替执行)。实际情况确却是闪烁次数根本没有达到我的要求,只关闭了两次,打开了一次。当我用AfxMessageBox中断时,实际上是可以达到我的要求的,我不知道为什么连续执行时,为什么就不能执行相应的键盘事件。

大概原因应该是只执行了键盘事件,并没有改变保存键盘状态的缓冲区的数值,GetKeyboardState((LPBYTE)&keyState)都是取的最初的键盘状态,但是我试图在SetVirtualKey中加入
// keyState[bVKey] = !(keyState[bVKey]&1);
// SetKeyboardState((LPBYTE)keyState);
等语句,还是不能达到我的效果。各位大侠有什么意见,希望多多赐教,谢谢。
  • 打赏
  • 举报
回复
不知道楼主有何用意?
huaboy2004 2005-04-29
  • 打赏
  • 举报
回复
大家有什么资料share一下吗,谢谢各位帮忙了
Kudeet 2005-04-29
  • 打赏
  • 举报
回复
gz
oyljerry 2005-04-29
  • 打赏
  • 举报
回复
键盘上指示灯,有些可以模拟键盘按键来实现
其他灯应该是硬件来控制的,软件不好实现
wolong98 2005-04-29
  • 打赏
  • 举报
回复
2、键盘指示灯 这个我以前好像见过例子,找找先

其它的好像都是硬件控制的,软件控制不可行
huaboy2004 2005-04-29
  • 打赏
  • 举报
回复
一定是没看我的标题,当然是想要有用的资料
qrlvls 2005-04-29
  • 打赏
  • 举报
回复
并非所有的都可以实现,有些是直接通过硬件实现的
不过你仍然可以看看DDK中的代码来查找一些信息
第9章 Windows相关技术 337 9.1 磁盘信息 338 0520 获取驱动器的卷标 338 0521 检测软驱是否有软盘 339 0522 判断是否插入存储器 339 0523 判断光驱是否有光盘 339 0524 判断驱动器类型 340 0525 获取磁盘序列号 341 0526 获取磁盘空间信息 342 9.2 磁盘操作 343 0527 格式化磁盘 343 0528 关闭磁盘共享 343 0529 设置磁盘卷标 343 0530 磁盘碎片整理 344 0531 从FAT32转换为NTFS 344 0532 隐藏磁盘分区 345 0533 显示被隐藏的磁盘分区 345 0534 如何更改分区号 346 0535 如何监视硬盘 346 9.3 系统控制与调用 347 0536 调用外部程序的方法 347 0537 调用创建快捷方式向导 348 0538 访问启动控制面板中的各项 348 0539 控制光驱的弹开与关闭 349 0540 实现关闭、重启和注销计算机 349 0541 关闭打开显示器 350 0542 打开关闭屏幕保护 350 0543 关闭当前输入法 350 0544 程序发出提示音 351 0545 列举系统中的可执行文件 351 9.4 应用程序操作 352 0546 如何确定应用程序没有响应 352 0547 检索任务管理器中的任务列表 353 0548 判断某个程序是否运行 353 0549 设计具有插件功能的应用程序 355 0550 怎样在程序中执行DOS命令 359 0551 修改其他进程中窗口的标题 359 0552 如何设计换肤程序 360 0553 PE档案格式分析 364 0554 修改应用程序图标 365 0555 列举应用程序使用的dll文件 368 0556 调用具有命令行参数的应用程序 369 0557 在程序中调用一个子进程直到其结束 371 0558 提取并保存应用程序图标 371 9.5 系统工具 373 0559 为程序添加快捷方式 373 0560 用列表显示系统正在运行的程序 375 0561 如何获得毫秒级时间 376 0562 注册和卸载组件 376 0563 清空回收站 377 0564 如何在程序中显示文件属性对话框 377 9.6 桌面相关 377 0565 隐藏和显示桌面文件 377 0566 隐藏和显示开始按钮 378 0567 隐藏和显示Windows任务栏 378 0568 判断屏幕保护程序是否在运行 379 0569 判断系统是否使用大字体 379 0570 获取任务栏属性 379 0571 获取任务栏窗口句柄 379 0572 隐藏任务栏时钟 380 0573 改变桌面背景颜色 380 0574 获取桌面列表视图句柄 380 9.7 系统信息 380 0575 获取CPU ID值 380 0576 获取CPU时钟频率 381 0577 获得Windows和System的路径 381 0578 获取特殊文件夹路径 382 0579 检测系统启动模式 382 0580 判断操作系统类型 383 0581 获取当前系统的运行时间 383 0582 如何获取Windows 2000系统启动时间 384 0583 获取处理器信息 385 0584 通过内存映射实现传送数据 385 0585 检测是否安装声卡 387 0586 获取当前用户名 387 0587 获取系统环境变量 387 0588 修改计算机名称 388 0589 获取当前屏幕颜色质量 388 0590 获得当前屏幕的分辨率 388 9.8 进程与线程 389 0591 如何使用TLS 389 0592 创建线程 389 0593 创建用户界面线程 390 0594 终止线程的方法 390 0595 使进程处于睡眠状态 391 0596 启动记事本并控制关闭 391 0597 创建闪屏线程 392 0598 利用互斥对象实现线程同步 393 0599 利用临界区实现线程同步 395 0600 利用事件对象实现线程同步 396 0601 用信号量实现线程同步 398 0602 挂起系统 399 0603 调用记事本程序并暂停其运行 399 0604 等待打开的记事本程序关闭 400 0605 禁止程序重复运行 400 0606 在Visual C++与Delphi间实现对象共享 401 9.9 消息 402 0607 如何自定义消息 402 0608 如何向Windows注册消息 402 0609 PostMessage和SendMessage函数的区别 402 0610 利用WM_COPYDATA消息实现进程间数据传递 403 9.10 剪贴板 404 0611 列举剪贴板中数据类型 404 0612 监视剪贴板复制过的内容 405 0613 通过剪贴板传递全局数据 406 9.11 鼠标键盘 407 0614 交换鼠标左右键 407 0615 设置鼠标双击的时间间隔 407 0616 获得鼠标键数 407 0617 获取鼠标下窗体句柄 407 0618 模拟鼠标单击按钮 409 0619 在程序中添加快捷键 410 0620 在对话框中使用加速键 411 0621 处理鼠标滚轮消息 411 0622 获取键盘按键 412 0623 获取键盘类型及功能号 412 0624 控制键盘指示灯 413 9.12 动态链接库与钩子 414 0625 从动态库中获取位图资源 414 0626 屏蔽键盘POWER键 415 0627 屏蔽键盘WIN键 415 0628 禁止使用 Alt+F4 键来关闭窗体 416 0629 枚举模块中的所有图标 417 0630 使用模块对话框资源 418 0631 替换应用程序中对话框资源 419 0632 可导出的动态链接库函数 420 0633 动态链接库动态加载 420
第9章 Windows相关技术 337 9.1 磁盘信息 338 0520 获取驱动器的卷标 338 0521 检测软驱是否有软盘 339 0522 判断是否插入存储器 339 0523 判断光驱是否有光盘 339 0524 判断驱动器类型 340 0525 获取磁盘序列号 341 0526 获取磁盘空间信息 342 9.2 磁盘操作 343 0527 格式化磁盘 343 0528 关闭磁盘共享 343 0529 设置磁盘卷标 343 0530 磁盘碎片整理 344 0531 从FAT32转换为NTFS 344 0532 隐藏磁盘分区 345 0533 显示被隐藏的磁盘分区 345 0534 如何更改分区号 346 0535 如何监视硬盘 346 9.3 系统控制与调用 347 0536 调用外部程序的方法 347 0537 调用创建快捷方式向导 348 0538 访问启动控制面板中的各项 348 0539 控制光驱的弹开与关闭 349 0540 实现关闭、重启和注销计算机 349 0541 关闭打开显示器 350 0542 打开关闭屏幕保护 350 0543 关闭当前输入法 350 0544 程序发出提示音 351 0545 列举系统中的可执行文件 351 9.4 应用程序操作 352 0546 如何确定应用程序没有响应 352 0547 检索任务管理器中的任务列表 353 0548 判断某个程序是否运行 353 0549 设计具有插件功能的应用程序 355 0550 怎样在程序中执行DOS命令 359 0551 修改其他进程中窗口的标题 359 0552 如何设计换肤程序 360 0553 PE档案格式分析 364 0554 修改应用程序图标 365 0555 列举应用程序使用的dll文件 368 0556 调用具有命令行参数的应用程序 369 0557 在程序中调用一个子进程直到其结束 371 0558 提取并保存应用程序图标 371 9.5 系统工具 373 0559 为程序添加快捷方式 373 0560 用列表显示系统正在运行的程序 375 0561 如何获得毫秒级时间 376 0562 注册和卸载组件 376 0563 清空回收站 377 0564 如何在程序中显示文件属性对话框 377 9.6 桌面相关 377 0565 隐藏和显示桌面文件 377 0566 隐藏和显示开始按钮 378 0567 隐藏和显示Windows任务栏 378 0568 判断屏幕保护程序是否在运行 379 0569 判断系统是否使用大字体 379 0570 获取任务栏属性 379 0571 获取任务栏窗口句柄 379 0572 隐藏任务栏时钟 380 0573 改变桌面背景颜色 380 0574 获取桌面列表视图句柄 380 9.7 系统信息 380 0575 获取CPU ID值 380 0576 获取CPU时钟频率 381 0577 获得Windows和System的路径 381 0578 获取特殊文件夹路径 382 0579 检测系统启动模式 382 0580 判断操作系统类型 383 0581 获取当前系统的运行时间 383 0582 如何获取Windows 2000系统启动时间 384 0583 获取处理器信息 385 0584 通过内存映射实现传送数据 385 0585 检测是否安装声卡 387 0586 获取当前用户名 387 0587 获取系统环境变量 387 0588 修改计算机名称 388 0589 获取当前屏幕颜色质量 388 0590 获得当前屏幕的分辨率 388 9.8 进程与线程 389 0591 如何使用TLS 389 0592 创建线程 389 0593 创建用户界面线程 390 0594 终止线程的方法 390 0595 使进程处于睡眠状态 391 0596 启动记事本并控制关闭 391 0597 创建闪屏线程 392 0598 利用互斥对象实现线程同步 393 0599 利用临界区实现线程同步 395 0600 利用事件对象实现线程同步 396 0601 用信号量实现线程同步 398 0602 挂起系统 399 0603 调用记事本程序并暂停其运行 399 0604 等待打开的记事本程序关闭 400 0605 禁止程序重复运行 400 0606 在Visual C++与Delphi间实现对象共享 401 9.9 消息 402 0607 如何自定义消息 402 0608 如何向Windows注册消息 402 0609 PostMessage和SendMessage函数的区别 402 0610 利用WM_COPYDATA消息实现进程间数据传递 403 9.10 剪贴板 404 0611 列举剪贴板中数据类型 404 0612 监视剪贴板复制过的内容 405 0613 通过剪贴板传递全局数据 406 9.11 鼠标键盘 407 0614 交换鼠标左右键 407 0615 设置鼠标双击的时间间隔 407 0616 获得鼠标键数 407 0617 获取鼠标下窗体句柄 407 0618 模拟鼠标单击按钮 409 0619 在程序中添加快捷键 410 0620 在对话框中使用加速键 411 0621 处理鼠标滚轮消息 411 0622 获取键盘按键 412 0623 获取键盘类型及功能号 412 0624 控制键盘指示灯 413 9.12 动态链接库与钩子 414 0625 从动态库中获取位图资源 414 0626 屏蔽键盘POWER键 415 0627 屏蔽键盘WIN键 415 0628 禁止使用 Alt+F4 键来关闭窗体 416 0629 枚举模块中的所有图标 417 0630 使用模块对话框资源 418 0631 替换应用程序中对话框资源 419 0632 可导出的动态链接库函数 420 0633 动态链接库动态加载 420

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧