1000分求SetupDi 类 API 函数的delphi接口 ( 积分: 0 )

  • 主题发起人 我是一只小小鸟
  • 开始时间

我是一只小小鸟

Unregistered / Unconfirmed
GUEST, unregistred user!
也就是 函数<br>SetupDiGetClassDevs, <br>SetupDiEnumDeviceInterfaces, <br>SetupDiGetInterfaceDeviceDetail,<br>SetupDiDestroyDeviceInfoList,<br>和其所需要的差数的delphi定义
 
也就是 函数<br>SetupDiGetClassDevs, <br>SetupDiEnumDeviceInterfaces, <br>SetupDiGetInterfaceDeviceDetail,<br>SetupDiDestroyDeviceInfoList,<br>和其所需要的差数的delphi定义
 
看来是没戏。哎只好找本C++的书看看了。
 
SetupDi是什么东东?DLL叫啥?
 
这个1000分我要了,联系我satanmonkey@21cn.com
 
先发个部分的,全的再去找<br>//--------------------------------------------------------------------<br>//<br>// &nbsp;SetupDI.pas<br>//<br>//--------------------------------------------------------------------<br>unit SetupDI;<br><br>interface<br><br>uses<br> &nbsp;Windows, Dialogs, SysUtils;<br><br>// GUID<br> &nbsp;type<br> &nbsp; &nbsp;P_GUID_ = ^_GUID_;<br> &nbsp; &nbsp;_GUID_ = record<br> &nbsp; &nbsp; &nbsp;Data1: DWord;<br> &nbsp; &nbsp; &nbsp;Data2: word;<br> &nbsp; &nbsp; &nbsp;Data3: word;<br> &nbsp; &nbsp; &nbsp;Data4: array [0..7] of Byte;<br> &nbsp; &nbsp;end;<br><br>// 側丄挿偄....柤慜....<br>// SP_DEVICE_INTERFACE_DETAIL_DATA_A, *PSP_DEVICE_INTERFACE_DETAIL_DATA_A;<br> &nbsp;type<br> &nbsp; &nbsp;P_SP_INTERF_DETAIL_ = ^_SP_INTERF_DETAIL_;<br> &nbsp; &nbsp;_SP_INTERF_DETAIL_ = packed record<br> &nbsp; &nbsp; &nbsp;cbSize: DWord;<br> &nbsp; &nbsp; &nbsp;DevPath: char; &nbsp; &nbsp; // 側傫偱億僀儞僞偱側偄偺丠<br> &nbsp; &nbsp;end;<br><br>// 偙傟傑偨...<br>// SP_DEVICE_INTERFACE_DATA, *PSP_DEVICE_INTERFACE_DATA;<br> &nbsp;type<br> &nbsp; &nbsp;P_SP_INTERF_ = ^_SP_INTERF_;<br> &nbsp; &nbsp;_SP_INTERF_ = record<br> &nbsp; &nbsp; &nbsp;cbSize: DWord;<br> &nbsp; &nbsp; &nbsp;Guid: _GUID_;<br> &nbsp; &nbsp; &nbsp;Flags: DWord;<br> &nbsp; &nbsp; &nbsp;Reserve: Pointer;<br> &nbsp; &nbsp;end;<br><br><br>// 偙傟偼宆偺愰尵偩偗偱偡丅<br>// SP_DEVINFO_DATA, *PSP_DEVINFO_DATA;<br> &nbsp;type<br> &nbsp; &nbsp;P_SP_INFO_ = ^_SP_INFO_;<br> &nbsp; &nbsp;_SP_INFO_ = record<br> &nbsp; &nbsp; &nbsp;cbSize: DWord;<br> &nbsp; &nbsp; &nbsp;Guid: _GUID_;<br> &nbsp; &nbsp; &nbsp;DevInst: DWord;<br> &nbsp; &nbsp; &nbsp;Reserve: DWord;<br> &nbsp; &nbsp;end;<br><br><br>type<br> &nbsp;TSetupDI = class( TObject )<br> &nbsp;private<br> &nbsp;public<br> &nbsp; &nbsp;constructor Create;<br> &nbsp; &nbsp;function GetPathName( const pGuid: P_GUID_; var PathName: array of char ): bool;<br> &nbsp;end;<br><br>implementation<br><br>//<br>// 巊梡偡傞娭悢孮偺愰尵 &nbsp; &nbsp;SetupApi.DLL 撪偵懚嵼<br>//<br>function SetupDiGetClassDevsA( Guid: P_GUID_; Enumrator: PChar; hPar: THANDLE; Flags: DWord ):<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; THANDLE; stdcall; external 'SETUPAPI.DLL';<br>function SetupDiEnumDeviceInterfaces( DevInfo: THANDLE; InfoData: P_SP_INFO_;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Guid: P_GUID_; Index: DWord; DevInterfD: P_SP_INTERF_ ):<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; bool; stdcall; external 'SETUPAPI.DLL';<br>function SetupDiDestroyDeviceInfoList( hPar: THANDLE ): bool; stdcall; external 'SETUPAPI.DLL';<br>function SetupDiGetDeviceInterfaceDetailA( DevInfo: THANDLE; InterData: P_SP_INTERF_;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InfoDetail: P_SP_INTERF_DETAIL_; DetailSize: DWord; ReqSize: PDWord;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InfoData: P_SP_INFO_ ): bool; stdcall; external 'SETUPAPI.DLL';<br><br><br>// use SetupDiGetClassDevsA<br>const DIGCF_DEFAULT &nbsp; &nbsp; &nbsp; &nbsp; = $001;<br>const DIGCF_PRESENT &nbsp; &nbsp; &nbsp; &nbsp; = $002;<br>const DIGCF_ALLCLASSES &nbsp; &nbsp; &nbsp;= $004;<br>const DIGCF_PROFILE &nbsp; &nbsp; &nbsp; &nbsp; = $008;<br>const DIGCF_DEVICEINTERFACE = $010;<br><br>//--------------------------------------------<br>// &nbsp;Constructor<br>//--------------------------------------------<br>constructor TSetupDI.Create;<br>begin<br> &nbsp;inherited Create;<br>end;<br><br>//--------------------------------------------<br>// &nbsp;GetPathName<br>//--------------------------------------------<br>function TSetupDI.GetPathName( const pGuid: P_GUID_; var PathName: array of char ): bool;<br>var<br> &nbsp;hDevInfo: THANDLE;<br> &nbsp;func_dev: P_SP_INTERF_DETAIL_;<br> &nbsp;devInfo_Data: _SP_INTERF_;<br> &nbsp;predi_len: DWord;<br> &nbsp;req_len: DWord;<br> &nbsp;retb: bool;<br>begin<br><br> &nbsp;//<br> &nbsp;// 埲壓偺娭悢孮偺徻偟偄摦嶌偵偮偄偰偼晄柧丅<br> &nbsp;// 偦偺偆偪嶨帍偵偰夝愢偝傟傞偲巚偄傑偡丅....<br> &nbsp;//<br> &nbsp;hDevInfo := SetupDiGetClassDevsA(<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; pGuid,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nil,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DIGCF_PRESENT or<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; DIGCF_DEVICEINTERFACE );<br><br> &nbsp;if INVALID_HANDLE_VALUE = hDevInfo then<br> &nbsp;begin<br> &nbsp; &nbsp;MessageDlg('SetupDiGetClassDevsA 幐攕', mtWarning,[mbYes], 0);<br> &nbsp; &nbsp;Result := False;<br> &nbsp; &nbsp;exit;<br> &nbsp;end;<br><br> &nbsp;devInfo_Data.cbSize := sizeof(_SP_INTERF_);<br> &nbsp;retb := SetupDiEnumDeviceInterfaces(<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hDevInfo,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;nil,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;pGuid,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;@devInfo_Data );<br> &nbsp;if not retb then<br> &nbsp;begin<br> &nbsp; &nbsp;SetupDiDestroyDeviceInfoList( hDevInfo );<br> &nbsp; &nbsp;MessageDlg('SetupDiEnumDeviceInterfaces 幐攕', mtWarning,[mbYes], 0);<br> &nbsp; &nbsp;Result := False;<br> &nbsp; &nbsp;exit;<br> &nbsp;end;<br><br> &nbsp;//<br> &nbsp;// 偙偺 bool 娭悢偼忢偵 False 偑曉傞丅 擂?..<br> &nbsp;//<br> &nbsp;SetupDiGetDeviceInterfaceDetailA(<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hDevInfo,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;@devInfo_Data,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;nil,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;@req_len,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;nil );<br><br> &nbsp;predi_len := req_len;<br> &nbsp;try<br> &nbsp; &nbsp;GetMem( func_dev, predi_len );<br> &nbsp;except<br> &nbsp; &nbsp;MessageDlg('Memory 晄懌', mtWarning,[mbYes], 0);<br> &nbsp; &nbsp;SetupDiDestroyDeviceInfoList( hDevInfo );<br> &nbsp; &nbsp;Result := False;<br> &nbsp; &nbsp;exit;<br> &nbsp;end;<br><br> &nbsp;func_dev.cbSize := sizeof( _SP_INTERF_DETAIL_ );<br> &nbsp;retb := SetupDiGetDeviceInterfaceDetailA(<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;hDevInfo,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;@devInfo_Data,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;func_dev,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;predi_len,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;@req_len,<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;nil );<br><br> &nbsp;if not retb then<br> &nbsp;begin<br> &nbsp; &nbsp;FreeMem( func_dev );<br> &nbsp; &nbsp;SetupDiDestroyDeviceInfoList( hDevInfo );<br> &nbsp; &nbsp;MessageDlg('SetupDiGetDeviceInterfaceDetailA 幐攕', mtWarning,[mbYes], 0);<br> &nbsp; &nbsp;Result := False;<br> &nbsp; &nbsp;exit;<br> &nbsp;end;<br><br> &nbsp;// 僪儔僀僶偺 PathName 偑曉傞丅<br> &nbsp;StrCopy( PathName, @func_dev.DevPath );<br><br> &nbsp;retb := SetupDiDestroyDeviceInfoList( hDevInfo );<br> &nbsp;if not retb then<br> &nbsp;begin<br> &nbsp; &nbsp;FreeMem( func_dev );<br> &nbsp; &nbsp;MessageDlg('SetupDiDestroyDeviceInfoList 幐攕', mtWarning,[mbYes], 0);<br> &nbsp; &nbsp;Result := False;<br> &nbsp; &nbsp;exit;<br> &nbsp;end;<br><br> &nbsp;FreeMem( func_dev );<br> &nbsp;Result := True;<br>end;<br><br>end.
 
找到全的了,还有示例<br>ftp://delphi-jedi.org/api/SetupAPI.zip <br>测试可以下<br>-----------<br>做人要厚道
 
jedi的这个,用起来有若干问题。<br>试试这个<br>http://www.kmabc.com/satan/SetupApi.rar<br><br>是以jedi那个改进的。不过也是有若干问题,主要是C的指针类型转换过来的问题,有的地方带了var,就应该不要用指针类型了,但是这个用了var 还用成指针,就搞成指针的指针,很是头疼,我是边用边改,写这些api的东西还是C方便。
 
jedi的这个是很久以前就有了,毕竟是翻译过来的,不能保证没有错,把自己用到的函数改一该。<br>不过我建议satanmonkey修改别人免费发布的源码最好保留原始的版权信息,你的版权信息也可以加在后面 [:D]
 
ok &nbsp;我试试 行了就给分
 
请 ypy 到<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3041316<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3041319<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3041338<br><br>请 satanmonkey 到<br><br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3041324<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3041327<br>http://www.delphibbs.com/delphibbs/dispq.asp?lid=3041329<br><br>领分
 
接受答案了.
 
顶部