You can gather the information about what's in the Add/Remove Programs List by using the following in a MOF. Hope this helps!:
#pragma namespace("\\\\.\\root\\cimv2"
instance of __Win32Provider as $InstProv
{
Name = "RegProv" ;
ClsId = "{fe9af5c0-d3b6-11ce-a5b6-00aa00680c3f}" ;
};
instance of __InstanceProviderRegistration
{
Provider = $InstProv;
SupportsPut = TRUE;
SupportsGet = TRUE;
SupportsDelete = FALSE;
SupportsEnumeration = TRUE;
};
instance of __Win32Provider as $PropProv
{
Name = "RegPropProv";
Clsid = "{72967901-68EC-11d0-B729-00AA0062CBB7}";
};
instance of __PropertyProviderRegistration
{
Provider = $PropProv;
SupportsPut = TRUE;
SupportsGet = TRUE;
};
#pragma namespace("\\\\.\\root\\CIMV2"
[dynamic, provider("RegProv"

,
ClassContext("local|HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall"

]
class Quick_Software_Inventory
{
[key]
string SoftwareTitle;
[PropertyContext("DisplayName"

] string Name;
[PropertyContext("DisplayVersion"

] string Version;
};
#pragma namespace("\\\\.\\root\\cimv2\\sms"

[SMS_Report(TRUE),
SMS_Group_Name("Quick Software Inventory"

,
ResID(5900),ResDLL("SMS_RXPL.dll"

,
SMS_Class_ID("MICROSOFT|Quick_Software_Inventory|1.0"

]
class Quick_Software_Inventory : SMS_Class_Template
{
[SMS_Report(TRUE),key]
string SoftwareTitle;
[SMS_Report(TRUE)]
string Name;
[SMS_Report(TRUE)]
string Version;
};