首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • C#能操作底层么??? 如监控U盘插入拔出、光驱监控的问题 进来看看
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 14:53:33 楼主
    C# WinForm  要求:


    用timer1:判断U盘是否已经插上并可以使用 如果是 在label1上显示插入U盘的盘符标签;
              如果用户拔出了U盘 在label1上显示"U盘被拔出!"  (都要考虑多U盘插入和拔出的问题)

    /////////////////////////////////////////////////////////////////////////////////////////////////////


    用timer2:判断当前光驱状态是否是弹开着的 如果是 实现光驱自动收进去 
    发现网上先面这段codes有问题 它并不能光驱收进去
    codes:
     
    using System.Runtime.InteropServices;

    [DllImport("winmm.dll", EntryPoint = "mciSendStringA", CharSet = CharSet.Ansi)]
    protected static extern int mciSendString(string lpstrCommand, StringBuilder lpstrReturnString, int uReturnLength, IntPtr hwndCallback);

    private void button1_Click(object sender, EventArgs e)
    {
          mciSendString("set  cdaudio  door  closed", null, 0, IntPtr.Zero);
    }
    大家看看 不知道是怎么回事呀  应该怎么修改 还是另有它法

    /////////////////////////////////////////////////////////////////////////////////////////////////////


    用timer3:判断光驱里是否有光盘 如果有 在label2上显示光驱盘符标签+"有光盘"字样 
                                  如果没有 就在label2上显示光驱盘符标签+"没有光盘"字样

    /////////////////////////////////////////////////////////////////////////////////////////////////////


    网上C#做这些的程序不多 有用C#做过类似程序的朋友帮我看看这个问题  希望能帮助小弟解决这些问题  如有提供实现所有功能codes的立即给全分  如果实在做不了的也没关系  帮顶有分  谢谢

    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hwk5
    • 等级:
    发表于:2008-05-13 15:05:061楼 得分:0
    顶起...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wfyfngu
    • 等级:
    发表于:2008-05-13 15:10:002楼 得分:0
    理论上可以

    C# code
    unsafe
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 15:12:363楼 得分:0
    还真没研究过
    顶一下。
    期待高手。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 15:17:204楼 得分:0
    可以慢慢想方法 不急  帮顶哦
    让我们顶起来
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • sdfiseven
    • 等级:
    发表于:2008-05-13 15:19:385楼 得分:0
    顶 等待高手
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mikebai
    • 等级:
    发表于:2008-05-13 15:26:516楼 得分:0
    不懂,猜想应该能做,但本质上调的是api....
    我前几天还写usb是否连上呢 ,是调用商家提供的api
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jinjazz
    • 等级:
    发表于:2008-05-13 15:30:507楼 得分:0
    C# code
    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices ; namespace WindowsApplication16 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } [StructLayout(LayoutKind.Sequential)] public struct DEV_BROADCAST_VOLUME { public int dbcv_size; public int dbcv_devicetype; public int dbcv_reserved; public int dbcv_unitmask; } protected override void WndProc(ref Message m) { // 发生设备变动 const int WM_DEVICECHANGE = 0x0219; // 系统检测到一个新设备 const int DBT_DEVICEARRIVAL = 0x8000; // 系统完成移除一个设备 const int DBT_DEVICEREMOVECOMPLETE = 0x8001; // 逻辑卷标 const int DBT_DEVTYP_VOLUME = 0x00000002; switch (m.Msg) { case WM_DEVICECHANGE: switch (m.WParam.ToInt32()) { case DBT_DEVICEARRIVAL: int devType = Marshal.ReadInt32(m.LParam, 4); if (devType == DBT_DEVTYP_VOLUME) { DEV_BROADCAST_VOLUME vol; vol = (DEV_BROADCAST_VOLUME)Marshal.PtrToStructure( m.LParam, typeof(DEV_BROADCAST_VOLUME)); MessageBox.Show(vol.dbcv_unitmask.ToString("x")); } break; case DBT_DEVICEREMOVECOMPLETE: MessageBox.Show("Removal"); break; } break; } base.WndProc(ref m); } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 15:54:058楼 得分:0
    楼上的什么意思  任何设备都监控么?
    继续up
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 16:03:489楼 得分:0
    关注!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jinjazz
    • 等级:
    发表于:2008-05-13 16:14:1810楼 得分:0
    只要有驱动器变化他就会响应。

    比如你把程序打开,然后插入光盘,他就会知道。

    自己动手测试~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 16:47:3411楼 得分:0
    完全可以
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 16:54:0112楼 得分:0
    7楼的方法应该没问题,自己先截获消息然后处理下就可以,不过和.net本身关系不大,用FCL只能查到当前驱动器的状态。
    第三个问题可以直接用System.IO.DriveInfo 来查询是否有光盘和读取卷标之类的东西,如果不要求实时的话,那么第一个问题用这个方法也可以(定期查询U盘数量及卷标)。判断光驱当前状态是开启还是关闭是个问题,有空了翻翻SDK看看能不能找到相关的方法,应该是有吧,以前是没注意过,开启/关闭光驱的方法倒是容易,直接调用API就是了。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 19:09:2913楼 得分:0
    to jinjazz:
    为什么窗体没有获取焦点的时候,程序也能捕捉到插入新设备的事件呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 20:50:1814楼 得分:0
    设备的更改是由系统通知的,不是有没有焦点的问题。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 20:55:4215楼 得分:0
    U盘的没见过,但我见过用C#代码控制摄像头,电子狗的,我想U盘也没什么问题,不过好像需要,硬件开发商提供一些接口一类的东西吧!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 21:00:1916楼 得分:0
    我只需要两样    U盘和光驱  就如我的题那样就行
    朋友们  帮顶一下  也是个值得研究的问题  不能沉下去呀 
    顶起一片天!!! 
    来者请至少做一件事:顶!!!  谢谢
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 21:25:1117楼 得分:0
    似乎跟VB6中的SysInfo实现的功能一样
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 22:03:1218楼 得分:0
    顶,有空试一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 22:03:3719楼 得分:0
    顶,有空试验一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 22:04:0720楼 得分:0
    有空试一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-13 23:34:0221楼 得分:0
    顶起,值得研究下!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-14 01:05:2822楼 得分:0
    引用 15 楼 bhsun 的回复:
    U盘的没见过,但我见过用C#代码控制摄像头,电子狗的,我想U盘也没什么问题,不过好像需要,硬件开发商提供一些接口一类的东西吧!

    原理根本就不一样的
    楼上的答案我没仔细看,但我觉得是正确的,系统会有很多事件的,跟厂家驱动没有什么关系

    2。我做过是可以关闭的,应该是你参数不对。但是判断是否探出好像很难,至少我见过有实现的但是我一直没找到答案
    3。判断是否有光碟是不是有事件就不知道了

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-14 14:37:3423楼 得分:0
    顶了.....
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-14 14:46:2924楼 得分:0
    问题够新鲜 希望有高人指点一下
    哥们也好学习一下


    up!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-14 14:51:5125楼 得分:0
    好像有个什么WMI编程,也可以控制
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-14 14:56:5326楼 得分:0
    ding
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-14 15:09:5027楼 得分:0
    谢谢各位  问题已经解决
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-14 15:15:0428楼 得分:0
    可以。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-14 15:23:4529楼 得分:0
    厉害 帮忙顶一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-14 15:44:2730楼 得分:0
    C#在一出来就说了,只能除了底层操作以外的一切应用,现在这个'一切'应用都成了问题,还不用说底层操作了,,现在搞个麻烦的互操来
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved