Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];

Вниз

Как узнать какие программы на компьютере установлены? и как вывес   Найти похожие ветки 

 
MadGhost ©   (2005-04-28 14:29) [0]

Уважаемые мастера. Помогите пожалуйста в следующем вопросе.
Надо узнать какие программы установленны на компьютере, т.е. когда мы заходим в Пуск-Настройка-Панель управления-Установка и Удаление программ, там вылазит список программ, как мне узнать (где взять) этот список.
2. Как узнать какое железо установленно на компьютере? Свойства Мой компьютер-Диспетчер устройств, этот список нужен.
Помогите пожалуйста.


 
alpet ©   (2005-04-28 15:10) [1]

1. В реестре. Ключ вроде "HKLM\Software\Microsoft\Current Version\Uninstall", а его подключи - программы которые зарегистрированны.


 
MadGhost ©   (2005-04-28 16:36) [2]

аха, с этим разобрались :) спасибо.

остался вопрос как узнать какие железки установлены на компьютере?


 
dmitry501 ©   (2005-04-29 04:48) [3]

MadGhost ©   (28.04.05 16:36) [2]
Возможно эта статья из MSDN тебе поможет
Enumerating Current Devices

Applications can use the SetupDiGetClassDevsEx function to retrieve the list of current devices. The following example function demonstrates how to retrieve this list.

HDEVINFO DoDeviceEnum( GUID InterfaceClassGuid
)
/*
Routine Description:
   Retrieves the device information set that contains that contains
   the devices of the specified class.

Parameters:
   InterfaceClassGuid - The interface class GUID.

Return Value:
   If the function succeeds, the return value is a handle to the
   device information set.

   If the function fails, the return value is zero.
*/
{
   HDEVINFO DeviceInfoSet;
   HDEVINFO NewDeviceInfoSet;

   // Create a device information set that will be the container for
   // the device interfaces.

   DeviceInfoSet = SetupDiCreateDeviceInfoList(NULL, NULL);
   
   if(DeviceInfoSet == INVALID_HANDLE_VALUE) {
       Err = GetLastError();
       printf( "SetupDiCreateDeviceInfoList failed: %lx.\n", Err );
       return 0;
   }

   // Retrieve the device information set for the interface class.

   NewDeviceInfoSet = SetupDiGetClassDevsEx( InterfaceClassGuid,
       NULL,
       NULL,
       DIGCF_PRESENT | DIGCF_DEVICEINTERFACE,
       DeviceInfoSet,
       NULL,
       NULL
   );

   if(NewDeviceInfoSet == INVALID_HANDLE_VALUE)
   {
       Err = GetLastError();
       printf( "SetupDiGetClassDevsEx failed: %lx.\n", Err );
       return 0;
   }

   return NewDeviceInfoSet;
}
After you have registered to receive device interface notification messages, you can call this function to obtain a device information set that contains the current list of device interfaces. When you receive a DBT_DEVICEARRIVAL event, you can use the SetupDiOpenDeviceInterface function to add the device interface to the device information set. When you receive a DBT_DEVICEREMOVECOMPLETE event, you can use the SetupDiDeleteDeviceInterfaceData function to delete the device interface from the device information set.


 
MadGhost ©   (2005-04-29 10:35) [4]

во :))) почти замечательно, спасибо.
осталось только разобраться с параметром InterfaceClassGuid
что он есть и с чем его есть?


 
alpet ©   (2005-04-29 13:53) [5]

Код приведенной функции ориентирован на получение информации для конкретного устройства. Параметр InterfaceClassGuid - CLASSID этого устройства.

Из параметров SetupDiGetClassDevsEx:

If the DIGCF_DEVICEINTERFACE flag is set, ClassGuid represents an interface class; otherwise, ClassGuid represents a setup class.

If the DIGCF_ALLCLASSES flag is set, this parameter is ignored and the resulting list contains devices of all installed classes.

Получается если тебе нужна информация по всем устройствам - этот параметр тебе не нужен. Так что изучай функцию SetupDiGetClassDevs(Ex).


 
Chiburg   (2005-06-03 01:45) [6]


dmitry501 ©   (29.04.05 04:48) [3]
Возможно эта статья из MSDN тебе поможет


А можна популярнее для неопытного?


во :))) почти замечательно, спасибо.

Поделись откровением, пожалуйста!


 
Грубич Женя   (2005-06-03 11:24) [7]

Подскажите, пожалуйста, что мне делать с этим сишным кодом, если я хочу написаь приложение с вышеупомянутыми возможностями (списк программ и девайсов) на Делфи.


 
Neznaika ©   (2005-06-03 11:28) [8]

>>Как узнать какие программы на компьютере установлены?

Искать все *.exe на винте :)


 
dmitry501 ©   (2005-06-03 11:50) [9]

Chiburg   (03.06.05 1:45) [6]
Грубич Женя   (03.06.05 11:24) [7]
Ну вот так примерно....


use SetupAPI;
.............................
const
 INVALID_HDEVINFO_VALUE = POINTER(DWORD(-1));
 GUID_DEVINTERFACE_DISPLAY_ADAPTER: TGUID = "{5b45201d-f2f2-4f3b-85bb-30ff1f953599}";
var
 DeviceInfoSet : HDEVINFO;
 NewDeviceInfoSet : HDEVINFO;
 NewDeviceInterfaceData : SP_DEVICE_INTERFACE_DATA;
 Dummy : TGUID;
 i:Cardinal;
begin
 // Создаем пустой device information set
 DeviceInfoSet := SetupDiCreateDeviceInfoList(NIL,0);
 if DeviceInfoSet = INVALID_HDEVINFO_VALUE then
 begin
       ShowMessage(Format("SetupDiGetClassDevsEx failed: %s", [SysErrorMessage(GetLastError)]));
       exit;
 end;
 // Получаем информацию о классе устройств
 NewDeviceInfoSet := SetupDiGetClassDevsEx(NIL,
       NIL,
       0,
       DIGCF_PRESENT OR DIGCF_DEVICEINTERFACE OR DIGCF_ALLCLASSES,
       DeviceInfoSet,
       NIL,
       NIL);
   if NewDeviceInfoSet = INVALID_HDEVINFO_VALUE then
   begin
       ShowMessage(Format("SetupDiGetClassDevsEx failed: %s", [SysErrorMessage(GetLastError)]));
       exit;
   end;
 // Получаем информацию об устройствах (только о первом дисплее!)
 ZeroMemory(@NewDeviceInterfaceData, Sizeof(NewDeviceInterfaceData));
 NewDeviceInterfaceData.cbSize := sizeof(SP_DEVICE_INTERFACE_DATA);
 if NOT SetupDiEnumDeviceInterfaces(NewDeviceInfoSet,
       NIL,
       GUID_DEVINTERFACE_DISPLAY_ADAPTER,
       0,
       NewDeviceInterfaceData) then
 begin
    ShowMessage(Format("SetupDiEnumDeviceInterfaces failed: %s", [SysErrorMessage(GetLastError)]));
    exit;
 end;

и т.д..............................


Чтобы это заработало, нужно скачать заголовочные файлы (Setup and Device Installer API interface) для Delphi.
Например здесь [ftp://delphi-jedi.org/api/Setupapi.zip]


 
Chiburg   (2005-06-03 13:38) [10]


dmitry501 ©   (03.06.05 11:50) [9]


Спасибо, сейчас попробую.


Чтобы это заработало, нужно скачать заголовочные файлы (Setup and Device Installer API interface) для Delphi.
Например здесь [ftp://delphi-jedi.org/api/Setupapi.zip]


Исправьте если вру, но по-моему, setupapi.dll - стандартная библиотека винды, или это не совсем то?


 
dmitry501 ©   (2005-06-06 04:57) [11]

Chiburg   (03.06.05 13:38) [10]
Исправьте если вру, но по-моему, setupapi.dll - стандартная библиотека винды, или это не совсем то?
Да



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.07.31;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.036 c
1-1121137529
gydvin
2005-07-12 07:05
2005.07.31
Richedit


3-1119601614
Валерий
2005-06-24 12:26
2005.07.31
DBGrid - полный, а DBListBox - пустой


4-1117228711
seamcat
2005-05-28 01:18
2005.07.31
Handl ы


14-1121060843
Antonn
2005-07-11 09:47
2005.07.31
Аналог ХР ного msconfig.exe в Win2K


14-1120815627
Macrodens
2005-07-08 13:40
2005.07.31
Кто знает, где можно скачать





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский