是修改注册表还是用其他的技术,请大侠帮忙,非常感谢

解决方案 »

  1.   

    用C#控制中断还不如在Bios里设置。
      

  2.   

    估计必须要修改注册表,可以将光驱隐藏起来的,不过这不能起到作用,你找找win32的api看有没有方法能够实现,我感觉应该有的
      

  3.   

    谢谢,不过好想WMI,搞不定,而注册表好像也行不通
      

  4.   

    WMI搞不定,注册表好像也不行,请高手提供一个方法
      

  5.   

    用注册表绝对是可以禁光驱与USB的,
    串口与并口没有试过,我估计也是可以的
      

  6.   

    xupc(寻巢鸟) ( ) 信誉:97  2006-06-02 15:15:00  得分: 0  
     
     
       用注册表绝对是可以禁光驱与USB的,
    串口与并口没有试过,我估计也是可以的
      
     
    请告诉我修改哪个键值
      

  7.   

    注册表似乎必须重新登陆一次才能生效。键值有两个,一个是NoDriver,一个是NoViewOnDriver,似乎。
      

  8.   

    光驱:
    注册表项HKEY_USERS\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\ Policies\Explorer,新建DWORD值NoDrives,并将键值改为40(假设光驱是G盘),然后关闭注册表编辑器,重新启动电脑,就会把光驱隐藏起来,其他人在Windows下就无法使用了。
      

  9.   

    下面代码可以禁用启用系统中的设备,这个程序是列举出所有的光驱,让用户选择然后进行禁用和启用,因为界面中使用了列表控件控制列举和选择设备,所以直接复制这段代码可能不好用,你可以研究一下。
    ControlPower函数的第一个参数为0禁用,为1启用。
    效果和在设备管理器中的操作一样
    这是在C++下的代码,将函数封成Dll在C#下调用就可以了。
    void FormatMSG(DWORD dwError,LPTSTR *lpszMsg)
    {
    BOOL bOK = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM|FORMAT_MESSAGE_ALLOCATE_BUFFER,NULL,dwError,MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),(LPTSTR)lpszMsg,0,NULL);
    if (!bOK) 
    {
    HMODULE hDll = LoadLibraryEx(_T("netmsg.dll"),NULL,DONT_RESOLVE_DLL_REFERENCES);
    if (NULL != hDll) 
    {
    FormatMessage(FORMAT_MESSAGE_FROM_HMODULE|FORMAT_MESSAGE_FROM_SYSTEM,hDll,dwError,MAKELANGID(LANG_CHINESE,SUBLANG_CHINESE_SIMPLIFIED),(LPTSTR)lpszMsg,0,NULL);
    FreeLibrary(hDll);
    }
    }
    }BOOL ChangeStatus(DWORD NewStatus,DWORD SelectedItem,HDEVINFO hDevInfo)
    {
    LPTSTR lpszMsg = NULL;
    HCURSOR hCursor = NULL;
    try
    {
    SP_PROPCHANGE_PARAMS PropChangeParams = {sizeof(SP_CLASSINSTALL_HEADER)};
    SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
    hCursor = SetCursor(LoadCursor(NULL,IDC_WAIT));
    if (!SetupDiEnumDeviceInfo(hDevInfo,SelectedItem,&DeviceInfoData)) 
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    }
    PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
    PropChangeParams.Scope = DICS_FLAG_GLOBAL;
    PropChangeParams.StateChange = NewStatus;
    if(!SetupDiSetClassInstallParams(hDevInfo,&DeviceInfoData,(SP_CLASSINSTALL_HEADER *)&PropChangeParams,sizeof(PropChangeParams)))
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    }
    if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,hDevInfo,&DeviceInfoData))
    {
    FormatMSG(GetLastError(), &lpszMsg);
    throw lpszMsg;
    }
    SetCursor(hCursor);
    return TRUE;
    }
    catch(TCHAR *pszError)
    {
    SetCursor(hCursor);
    ::MessageBox(NULL,pszError,_T("提示"),MB_OK);
    if(NULL != lpszMsg)
    {
    LocalFree((HLOCAL)lpszMsg);
    }
    return FALSE;
    }
    }
    BOOL ControlPower(int nStatus,CString devicename)
    {
    if (-1 == nStatus) 
    {
    return FALSE;
    }
    LPTSTR lpszMsg = NULL;
    try
    {
    TCHAR *GUIDString = NULL;
    GUID guid;
    ZeroMemory(&guid,sizeof(GUID));
    GUIDString = _T("4D36E965-E325-11CE-BFC1-08002BE10318");
    UuidFromString((unsigned char *)GUIDString,&guid);
    hDevInfo = SetupDiGetClassDevs(&guid,NULL,NULL,DIGCF_PRESENT);
    if(INVALID_HANDLE_VALUE == hDevInfo)
    {
    FormatMSG(GetLastError(),&lpszMsg);
    throw lpszMsg;
    }
    DWORD i;
    SP_DEVINFO_DATA DeviceInfoData;
    ZeroMemory(&DeviceInfoData,sizeof(SP_DEVINFO_DATA));
    DeviceInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
    CHAR deviceid[1024];
    for (i = 0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData);++i)
    {
    SetupDiGetDeviceInstanceId(hDevInfo,&DeviceInfoData,deviceid,1024,NULL);
    if (deviceid == devicename)
    {
    if(1 == nStatus)
    {
    ChangeStatus(DICS_ENABLE,i,hDevInfo);
    }
    else if(0 == nStatus)
    {
    ChangeStatus(DICS_DISABLE, i, hDevInfo);
    }
    }
    }
    return SetupDiDestroyDeviceInfoList(hDevInfo);
    }
    catch(TCHAR *pszError)
    {
    ::MessageBox(NULL,pszError,_T("提示"),MB_OK);
    if(NULL != lpszMsg)
    {
    LocalFree((HLOCAL)lpszMsg);
    }
    return FALSE;
    }
    return FALSE;
    }