如何禁用蓝牙 如何禁用蓝牙,用代码,麻烦知道的兄弟提点一下 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentConrolSet\Control\Class\{E0CBF06C-CD8B-4647-BB8A-263B43F0F974},跟这个键值有关 http://www.qqread.com/delphi/d352249.html unit untMain;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,SetupAPI, ComCtrls, StdCtrls, ImgList;type TForm1 = class(TForm) btn1: TButton; lv1: TListView; il1: TImageList; procedure btn1Click(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } function GetDeviceClassName(aGUID: TGUID): string; //function IsDisableable(WY_dwDevID:Integer;WY_hDevInfo:Cardinal): Boolean; public { Public declarations } end;var Form1: TForm1; ClassImageListData: SP_CLASSIMAGELIST_DATA; {设备类型图标结构,全局变量,退出时释放.}implementation{$R *.dfm}function IsDisableable(WY_dwDevID:Integer;WY_hDevInfo:Cardinal): Boolean;//var//WY_DevInfoData:SP_DEVINFO_DATA;//WY_dwDevStatus,WY_dwProblem:integer;beginResult := false;end;function ChangeDeviceState(hDevInfo: HDEVINFO; NewStatus: DWORD;SelectedItem: DWORD): Boolean;varPropChangeParams: SP_PROPCHANGE_PARAMS;DeviceInfoData: SP_DEVINFO_DATA;beginResult := False;DeviceInfoData.cbSize := SizeOf(SP_DEVINFO_DATA);if not SetupDiEnumDeviceInfo(hDevInfo, SelectedItem, @DeviceInfoData) then Exit;// Set the PropChangeParams structure.PropChangeParams.ClassInstallHeader.cbSize := SizeOf(SP_CLASSINSTALL_HEADER);PropChangeParams.ClassInstallHeader.InstallFunction := DIF_PROPERTYCHANGE;PropChangeParams.Scope := DICS_FLAG_GLOBAL;PropChangeParams.StateChange := NewStatus;if not SetupDiSetClassInstallParams(hDevInfo, @DeviceInfoData,PSP_CLASSINSTALL_HEADER(@PropChangeParams), SizeOf(PropChangeParams)) thenExit;// Call the ClassInstaller and perform the change.if not SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo,@DeviceInfoData) thenExit;Result := True;end;function ControlDisk(nStatus, nIndex: Integer): Boolean;varGuid: TGUID ;GUIDString: string;hDevInfo: Cardinal;i: DWORD;DeviceInfoData: SP_DEVINFO_DATA;beginResult := False;if (nStatus = -1) then Exit;ZeroMemory(@Guid, sizeof(TGUID));case nIndex of0: // 0 代表软驱GUIDString := '{4D36E980-E325-11CE-BFC1-08002BE10318}';1: // 1 代表光驱GUIDString := '{4D36E965-E325-11CE-BFC1-08002BE10318}';2: // 2 代表USBGUIDString := '{36FC9E60-C465-11CF-8056-444553540000}';end; Guid := StringToGUID(GUIDString);hDevInfo := SetupDiGetClassDevs(@Guid, nil, HWND(nil), DIGCF_PRESENT);if (hDevInfo = INVALID_HANDLE_VALUE) then Exit;ZeroMemory(@DeviceInfoData, SizeOf(SP_DEVINFO_DATA));DeviceInfoData.cbSize := SizeOf(SP_DEVINFO_DATA);i := 0;while SetupDiEnumDeviceInfo(hDevInfo, i, @DeviceInfoData) dobeginif nStatus= 1 thenResult := ChangeDeviceState(hDevInfo, DICS_ENABLE, i)else if nStatus = 2 thenResult := ChangeDeviceState(hDevInfo, DICS_DISABLE, i);Inc(i);end;SetupDiDestroyDeviceInfoList(hDevInfo);end;procedure TForm1.btn1Click(Sender: TObject);varhDevInfo: Cardinal;DeviceInfoData: SP_DEVINFO_DATA; {设备信息结构}i: Integer;DataT, Buffersize: DWORD;Buffer: PAnsiChar;List: TListItem;index: Integer;begin{ 获取设备信息句柄 }lv1.Items.BeginUpdate;DeviceInfoData.cbSize := SizeOf(SP_DEVINFO_DATA);hDevInfo := SetupDiGetClassDevs(nil, nil, 0,DIGCF_PRESENT or DIGCF_ALLCLASSES);if hDevInfo = INVALID_HANDLE_VALUE then Exit;{ 设备图标数据结构 }ClassImageListData.cbSize := SizeOf(SP_CLASSIMAGELIST_DATA);{ 获取设备图标数据 }if SetupDiGetClassImageList(@ClassImageListData) thenbegin{ 赋句柄给ImageList }il1.Handle := ClassImageListData.ImageList;{ TreeView图标指定到ImageList }lv1.SmallImages := il1;end;i := 0;Buffersize := 256;DeviceInfoData.cbSize := SizeOf(SP_DEVINFO_DATA);GetMem(Buffer, Buffersize);{ 枚举设备信息 }while SetupDiEnumDeviceInfo(hDevInfo, i, @DeviceInfoData) dobegin{ 获取设备信息包括GUID和名称 }SetupDiGetDeviceRegistryProperty(hDevInfo, @DeviceInfoData,SPDRP_DEVICEDESC, @DataT, PByte(Buffer), Buffersize, nil);Inc(i);List := lv1.Items.Add;{ 获取制定GUID(设备类型)的图标索引 }if SetupDiGetClassImageIndex(@ClassImageListData,@DeviceInfoData.ClassGuid, @index) then{ 制定显示图标 }List.ImageIndex := index;{ 通过GUID获取设备类型(Class) }List.Caption := GetDeviceClassName(DeviceInfoData.ClassGuid);{ 转换GUID到字符串 }List.SubItems.Add(GUIDToString(DeviceInfoData.ClassGuid));{ 显示设备名称 }List.SubItems.Add(Buffer);{ 设备状态 }if IsDisableable(i ,hDevInfo) thenList.SubItems.Add('True')elseList.SubItems.Add('False');end;if Buffer <> nil then FreeMem(Buffer);if (GetLastError() <> NO_ERROR) and(GetLastError() <> ERROR_NO_MORE_ITEMS) thenExit;{ 释放 DeviceInfoData, hDevInfo }SetupDiDestroyDeviceInfoList(hDevInfo);lv1.Items.EndUpdate;end;{最后在退出程序时释放 SetupDiDestroyClassImageList(@ClassImageListData); }{ 获取设备类型 }function TForm1.GetDeviceClassName(aGUID: TGUID): string;varClassName: PChar;ClassNameSize: DWORD;beginClassNameSize := 0;GetMem(ClassName, ClassNameSize);{ 利用GUID返回设备类型名 }while not SetupDiClassNameFromGuid(@aGUID, ClassName, ClassNameSize,@ClassNameSize) dobeginif GetLastError() = ERROR_INSUFFICIENT_BUFFER thenbeginif ClassName <> nil then FreeMem(ClassName);GetMem(ClassName, ClassNameSize);end elseBreak;end;Result := ClassName;if ClassName <> nil then FreeMem(ClassName);end; {设备禁用的代码,是从网上改些一个C++代码的,还没来得及加注解,先看着,以后加.}procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);beginSetupDiDestroyClassImageList(@ClassImageListData);end;end.我整理了一下,还差一个函数IsDisableable这是c的代码,我不懂cBOOL IsDisableable(DWORD WY_dwDevID, HDEVINFO WY_hDevInfo){ SP_DEVINFO_DATA WY_DevInfoData = {sizeof(SP_DEVINFO_DATA)}; DWORD WY_dwDevStatus,WY_dwProblem; if(!SetupDiEnumDeviceInfo(WY_hDevInfo,WY_dwDevID,&WY_DevInfoData)) { OutputDebugString("SetupDiEnumDeviceInfo FAILED"); return FALSE; }这是c代码的网址:http://blog.csdn.net/goingup/archive/2006/02/01/590683.aspx它既然可以禁用光驱,也应该可以禁用蓝牙希望对你有帮助 0: // 0 代表软驱 GUIDString := '{4D36E980-E325-11CE-BFC1-08002BE10318}'; 1: // 1 代表光驱 GUIDString := '{4D36E965-E325-11CE-BFC1-08002BE10318}'; 2: // 2 代表USB GUIDString := '{36FC9E60-C465-11CF-8056-444553540000}'; end; Guid := StringToGUID(GUIDString);只要在注册表中找到相应的键值就可以 谢谢楼上的大哥,不过我试了,好像还是没有效果,USB确实是可以的,蓝牙好像没效果 ADODataset 与 query 如果嵌套一个子窗体到当前窗体,如何以局部变量的方式进行访问?非常着急,请高手不吝赐教。 这是怎么回事呢 关于控件图标问题!怎么关联。 怎样列出某窗口下所有Edit控件~有源码给分? 请教如何判断SQLSERVER数据库表中的某个字段内有无记录? ★ 你是否经常使用资源 ?? ●关注有分 + ●给你个软件 根据协议怎的用程序建立一个待发送的数据包 QRGROUP 用法? 如何判断query中的数据已经被修改 取消TcxshellListView双击打开 紧急求助::我的delphi2007 启动不成一个整体了
unit untMain;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,SetupAPI, ComCtrls, StdCtrls, ImgList;type
TForm1 = class(TForm)
btn1: TButton;
lv1: TListView;
il1: TImageList;
procedure btn1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
function GetDeviceClassName(aGUID: TGUID): string;
//function IsDisableable(WY_dwDevID:Integer;WY_hDevInfo:Cardinal): Boolean; public
{ Public declarations }
end;var
Form1: TForm1;
ClassImageListData: SP_CLASSIMAGELIST_DATA; {设备类型图标结构,全局变量,退出时释放.}
implementation{$R *.dfm}
function IsDisableable(WY_dwDevID:Integer;WY_hDevInfo:Cardinal): Boolean;
//var
//WY_DevInfoData:SP_DEVINFO_DATA;
//WY_dwDevStatus,WY_dwProblem:integer;
begin
Result := false;
end;function ChangeDeviceState(hDevInfo: HDEVINFO; NewStatus: DWORD;
SelectedItem: DWORD): Boolean;
var
PropChangeParams: SP_PROPCHANGE_PARAMS;
DeviceInfoData: SP_DEVINFO_DATA;
begin
Result := False;DeviceInfoData.cbSize := SizeOf(SP_DEVINFO_DATA);
if not SetupDiEnumDeviceInfo(hDevInfo, SelectedItem, @DeviceInfoData) then Exit;// Set the PropChangeParams structure.
PropChangeParams.ClassInstallHeader.cbSize := SizeOf(SP_CLASSINSTALL_HEADER);
PropChangeParams.ClassInstallHeader.InstallFunction := DIF_PROPERTYCHANGE;
PropChangeParams.Scope := DICS_FLAG_GLOBAL;
PropChangeParams.StateChange := NewStatus;if not SetupDiSetClassInstallParams(hDevInfo, @DeviceInfoData,
PSP_CLASSINSTALL_HEADER(@PropChangeParams), SizeOf(PropChangeParams)) then
Exit;// Call the ClassInstaller and perform the change.
if not SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo,
@DeviceInfoData) then
Exit;Result := True;
end;function ControlDisk(nStatus, nIndex: Integer): Boolean;
var
Guid: TGUID ;
GUIDString: string;
hDevInfo: Cardinal;
i: DWORD;
DeviceInfoData: SP_DEVINFO_DATA;
begin
Result := False;
if (nStatus = -1) then Exit;ZeroMemory(@Guid, sizeof(TGUID));
case nIndex of
0: // 0 代表软驱
GUIDString := '{4D36E980-E325-11CE-BFC1-08002BE10318}';
1: // 1 代表光驱
GUIDString := '{4D36E965-E325-11CE-BFC1-08002BE10318}';
2: // 2 代表USB
GUIDString := '{36FC9E60-C465-11CF-8056-444553540000}';
end;
Guid := StringToGUID(GUIDString);hDevInfo := SetupDiGetClassDevs(@Guid, nil, HWND(nil), DIGCF_PRESENT);
if (hDevInfo = INVALID_HANDLE_VALUE) then Exit;ZeroMemory(@DeviceInfoData, SizeOf(SP_DEVINFO_DATA));
DeviceInfoData.cbSize := SizeOf(SP_DEVINFO_DATA);i := 0;
while SetupDiEnumDeviceInfo(hDevInfo, i, @DeviceInfoData) do
begin
if nStatus= 1 then
Result := ChangeDeviceState(hDevInfo, DICS_ENABLE, i)
else if nStatus = 2 then
Result := ChangeDeviceState(hDevInfo, DICS_DISABLE, i);
Inc(i);
end;SetupDiDestroyDeviceInfoList(hDevInfo);
end;procedure TForm1.btn1Click(Sender: TObject);
var
hDevInfo: Cardinal;
DeviceInfoData: SP_DEVINFO_DATA; {设备信息结构}
i: Integer;
DataT, Buffersize: DWORD;
Buffer: PAnsiChar;
List: TListItem;
index: Integer;
begin
{ 获取设备信息句柄 }
lv1.Items.BeginUpdate;
DeviceInfoData.cbSize := SizeOf(SP_DEVINFO_DATA);
hDevInfo := SetupDiGetClassDevs(nil, nil, 0,
DIGCF_PRESENT or DIGCF_ALLCLASSES);
if hDevInfo = INVALID_HANDLE_VALUE then Exit;
{ 设备图标数据结构 }
ClassImageListData.cbSize := SizeOf(SP_CLASSIMAGELIST_DATA);
{ 获取设备图标数据 }
if SetupDiGetClassImageList(@ClassImageListData) then
begin
{ 赋句柄给ImageList }
il1.Handle := ClassImageListData.ImageList;
{ TreeView图标指定到ImageList }
lv1.SmallImages := il1;
end;i := 0;
Buffersize := 256;
DeviceInfoData.cbSize := SizeOf(SP_DEVINFO_DATA);
GetMem(Buffer, Buffersize);
{ 枚举设备信息 }
while SetupDiEnumDeviceInfo(hDevInfo, i, @DeviceInfoData) do
begin{ 获取设备信息包括GUID和名称 }
SetupDiGetDeviceRegistryProperty(hDevInfo, @DeviceInfoData,
SPDRP_DEVICEDESC, @DataT, PByte(Buffer), Buffersize, nil);
Inc(i);
List := lv1.Items.Add;
{ 获取制定GUID(设备类型)的图标索引 }
if SetupDiGetClassImageIndex(@ClassImageListData,
@DeviceInfoData.ClassGuid, @index) then
{ 制定显示图标 }
List.ImageIndex := index;
{ 通过GUID获取设备类型(Class) }
List.Caption := GetDeviceClassName(DeviceInfoData.ClassGuid);
{ 转换GUID到字符串 }
List.SubItems.Add(GUIDToString(DeviceInfoData.ClassGuid));
{ 显示设备名称 }
List.SubItems.Add(Buffer);
{ 设备状态 }
if IsDisableable(i ,hDevInfo) then
List.SubItems.Add('True')
else
List.SubItems.Add('False');end;
if Buffer <> nil then FreeMem(Buffer);
if (GetLastError() <> NO_ERROR) and
(GetLastError() <> ERROR_NO_MORE_ITEMS) then
Exit;
{ 释放 DeviceInfoData, hDevInfo }
SetupDiDestroyDeviceInfoList(hDevInfo);
lv1.Items.EndUpdate;
end;{最后在退出程序时释放 SetupDiDestroyClassImageList(@ClassImageListData); }
{ 获取设备类型 }
function TForm1.GetDeviceClassName(aGUID: TGUID): string;
var
ClassName: PChar;
ClassNameSize: DWORD;
begin
ClassNameSize := 0;
GetMem(ClassName, ClassNameSize);
{ 利用GUID返回设备类型名 }
while not SetupDiClassNameFromGuid(@aGUID, ClassName, ClassNameSize,
@ClassNameSize) do
begin
if GetLastError() = ERROR_INSUFFICIENT_BUFFER then
begin
if ClassName <> nil then FreeMem(ClassName);
GetMem(ClassName, ClassNameSize);
end else
Break;
end;
Result := ClassName;
if ClassName <> nil then FreeMem(ClassName);
end; {设备禁用的代码,是从网上改些一个C++代码的,还没来得及加注解,先看着,以后加.}procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
SetupDiDestroyClassImageList(@ClassImageListData);
end;end.我整理了一下,还差一个函数IsDisableable这是c的代码,我不懂cBOOL IsDisableable(DWORD WY_dwDevID, HDEVINFO WY_hDevInfo)
{
SP_DEVINFO_DATA WY_DevInfoData = {sizeof(SP_DEVINFO_DATA)};
DWORD WY_dwDevStatus,WY_dwProblem;
if(!SetupDiEnumDeviceInfo(WY_hDevInfo,WY_dwDevID,&WY_DevInfoData))
{
OutputDebugString("SetupDiEnumDeviceInfo FAILED");
return FALSE;
}这是c代码的网址:http://blog.csdn.net/goingup/archive/2006/02/01/590683.aspx
它既然可以禁用光驱,也应该可以禁用蓝牙
希望对你有帮助
GUIDString := '{4D36E980-E325-11CE-BFC1-08002BE10318}';
1: // 1 代表光驱
GUIDString := '{4D36E965-E325-11CE-BFC1-08002BE10318}';
2: // 2 代表USB
GUIDString := '{36FC9E60-C465-11CF-8056-444553540000}';
end;
Guid := StringToGUID(GUIDString);只要在注册表中找到相应的键值就可以