Собственно почему одна и та же функция в разных местах кода выводит разные строки?(тело отметил линиями)
Код:
;{Константы setupapi.h ; Коды свойств реестра устройств ; (Коды, помеченные как доступные только для чтения (R), могут использоваться только для ; SetupDiGetDeviceRegistryProperty) ; ; Эти значения должны охватывать один и тот же набор свойств реестра ; как определено кодами CM_DRP в cfgmgr32.h. ; ; Обратите внимание, что коды SPDRP отсчитываются от нуля, а коды CM_DRP отсчитываются от единицы! #SPDRP_DEVICEDESC = $00000000;DeviceDesc (R/W) #SPDRP_HARDWAREID = $00000001;HardwareID (R/W) #SPDRP_COMPATIBLEIDS = $00000002;CompatibleIDs (R/W) #SPDRP_UNUSED0 = $00000003;unused #SPDRP_SERVICE = $00000004;Service (R/W) #SPDRP_UNUSED1 = $00000005;unused #SPDRP_UNUSED2 = $00000006;unused #SPDRP_CLASS = $00000007;Class (R--tied To ClassGUID) #SPDRP_CLASSGUID = $00000008;ClassGUID (R/W) #SPDRP_DRIVER = $00000009;Driver (R/W) #SPDRP_CONFIGFLAGS = $0000000A;ConfigFlags (R/W) #SPDRP_MFG = $0000000B;Mfg (R/W) #SPDRP_FRIENDLYNAME = $0000000C;FriendlyName (R/W) #SPDRP_LOCATION_INFORMATION = $0000000D;LocationInformation (R/W) #SPDRP_PHYSICAL_DEVICE_OBJECT_NAME = $0000000E;PhysicalDeviceObjectName (R) #SPDRP_CAPABILITIES = $0000000F;Capabilities (R) #SPDRP_UI_NUMBER = $00000010;UiNumber (R) #SPDRP_UPPERFILTERS = $00000011;UpperFilters (R/W) #SPDRP_LOWERFILTERS = $00000012;LowerFilters (R/W) #SPDRP_BUSTYPEGUID = $00000013;BusTypeGUID (R) #SPDRP_LEGACYBUSTYPE = $00000014;LegacyBusType (R) #SPDRP_BUSNUMBER = $00000015;BusNumber (R) #SPDRP_ENUMERATOR_NAME = $00000016;Enumerator Name (R) #SPDRP_SECURITY = $00000017;Security (R/W, binary form) #SPDRP_SECURITY_SDS = $00000018;Security (W, SDS form) #SPDRP_DEVTYPE = $00000019;Device Type (R/W) #SPDRP_EXCLUSIVE = $0000001A;Device is exclusive-access (R/W) #SPDRP_CHARACTERISTICS = $0000001B;Device Characteristics (R/W) #SPDRP_ADDRESS = $0000001C;Device Address (R) #SPDRP_UI_NUMBER_DESC_FORMAT = $0000001D;UiNumberDescFormat (R/W) #SPDRP_DEVICE_POWER_DATA = $0000001E;Device Power Data (R) #SPDRP_REMOVAL_POLICY = $0000001F;Removal Policy (R) #SPDRP_REMOVAL_POLICY_HW_DEFAULT = $00000020;Hardware Removal Policy (R) #SPDRP_REMOVAL_POLICY_OVERRIDE = $00000021;Removal Policy Override (RW) #SPDRP_INSTALL_STATE = $00000022;Device Install State (R) #SPDRP_LOCATION_PATHS = $00000023;Device Location Paths (R) #SPDRP_BASE_CONTAINERID = $00000024;Base ContainerID (R) #SPDRP_MAXIMUM_PROPERTY = $00000025;Upper bound on ordinals ;} ;{;Структуры Structure _GUID Data1.l; Data2.u; Data3.u; Data4.a[8]; EndStructure ; Structure _SP_DEVINFO_DATA cbSize.l;Размер в байтах структуры SP_DEVINFO_DATA ClassGuid._GUID;GUID класса установки устройства DevInst.l;Непрозрачный дескриптор экземпляра устройства (также известный как дескриптор devnode). ;Некоторые функции, такие как функции SetupDiXxx, принимают всю структуру SP_DEVINFO_DATA в качестве входных данных для идентификации ;устройства в наборе информации об устройстве. Другие функции, такие как функции CM_Xxx, такие как CM_Get_DevNode_Status, принимают этот ;дескриптор DevInst в качестве входных данных. *Reserved; EndStructure Structure _DEVPROPKEY; представляющию ключ свойства устройства в унифицированной модели свойств устройства fmtid._GUID;DEVPROPGUID pid.u;DEVPROPID(идентификатора свойства,Идентификатор свойства должен быть больше или равен двум) EndStructure ;}; ProcedureDLL.i Diologovoe_Okno_Config_Ustroistv() ;{;Форма If OpenWindow(#PB_Any, 0, 0,500, 500, "Конфигурация устройств", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) Protected PanelGadget1.i=PanelGadget(#PB_Any,0,0,500,500) AddGadgetItem(PanelGadget1, -1, "Все Устройства системы");1-я панель Protected TreeGadget1.i=TreeGadget(#PB_Any,0,0,492,400) Protected Handle = SetupDiGetClassDevs_(#Null,#Null,#Null,#DIGCF_ALLCLASSES) Protected DeviceInfoData._SP_DEVINFO_DATA ;ZeroMemory(@DeviceInfoData, SizeOf(SP_DEVINFO_DATA)); DeviceInfoData\cbSize = SizeOf(_SP_DEVINFO_DATA); DeviceIndex = 0; Protected *BUFF=AllocateMemory(10000) Protected kolihestvo_bait.l AddGadgetItem(TreeGadget1, -1, "Класс установки устройства", 0, 0) While SetupDiEnumDeviceInfo_(Handle,DeviceIndex,@DeviceInfoData)<>0; DeviceIndex+1 SetupDiGetDeviceRegistryProperty_(Handle,@DeviceInfoData,#SPDRP_CLASS,0,*BUFF,10000,0) AddGadgetItem(TreeGadget1, -1,PeekS(*BUFF,-1,#PB_Unicode), 0, 1) SetupDiGetDeviceRegistryProperty_(Handle,@DeviceInfoData,#SPDRP_CLASSGUID,0,*BUFF,10000,0) AddGadgetItem(TreeGadget1, -1,"GUID класса "+PeekS(*BUFF,-1,#PB_Unicode), 0, 2) ;=========== SetupDiGetDeviceRegistryProperty_(Handle,@DeviceInfoData,#SPDRP_FRIENDLYNAME,0,*BUFF,10000,0) AddGadgetItem(TreeGadget1, -1,"Понятное имя устройства "+PeekS(*BUFF,-1,#PB_Unicode), 0, 3) ;=========== SetupDiGetDeviceRegistryProperty_(Handle,@DeviceInfoData,#SPDRP_DEVICEDESC,0,*BUFF,10000,0) AddGadgetItem(TreeGadget1, -1,"Описание устройства "+PeekS(*BUFF,-1,#PB_Unicode), 0, 3) ;================== SetupDiGetDeviceRegistryProperty_(Handle,@DeviceInfoData,#SPDRP_FRIENDLYNAME,0,*BUFF,10000,0) AddGadgetItem(TreeGadget1, -1,"Понятное имя устройства "+PeekS(*BUFF,-1,#PB_Unicode), 0, 3) ;================= SetupDiGetDeviceRegistryProperty_(Handle,@DeviceInfoData,#SPDRP_MFG,0,*BUFF,10000,0) AddGadgetItem(TreeGadget1, -1,"Имя производителя устройства. "+PeekS(*BUFF,-1,#PB_Unicode) , 0, 3) Wend FreeMemory(*BUFF) EndIf ;} ;{;Обработчик сообщений Repeat Select WaitWindowEvent() Case #PB_Event_CloseWindow;{; End ;}; ;Case #PB_Event_Gadget ; Select EventGadget() ;EndSelect EndSelect ForEver;}; EndProcedure ;пример приминения Diologovoe_Okno_Config_Ustroistv()
Отредактировано Sergeihik (10.09.2022 16:35:08)