A teď ke samotnému kódu. Kód který jsem napsal ukládá ihned po načtení do vlastnosti ItemsSource control ListBox a zapisuje počet získaných programů metodou WriteToTextBoxInstalledAppsCount, takže tyto 2 řádky můžete klidně nahradit podle svých potřeb. Kód pro načtení pomocí WMI vypadá takto:
List<string> appsNames = new List<string>();
private void FillListBoxAppsByManagementObject()
{
appsNames.Clear();
ManagementObjectCollection managementObjects;
ManagementObjectSearcher managementObjectSearcher;
managementObjectSearcher = new ManagementObjectSearcher(" Select* from Win32_Product");
managementObjects = managementObjectSearcher.Get();
ObservableCollection<installedapp> installedApps = new ObservableCollection<installedapp>();
foreach (ManagementObject managementObject in managementObjects)
{
object nameValue = managementObject[" Name"];
if (nameValue != null)
{
string appName = nameValue.ToString().Trim();
if (!appsNames.Contains(appName))
{
appsNames.Add(appName);
installedApps.Add(new InstalledApp { AppName = appName });
}
}
}
lbInstalledApps.ItemsSource = installedApps;
WriteToTextBoxInstalledAppsCount(installedApps);
}Kdežto kód pro načtení z registru vypadá takto (na 64bitovém systému, na 32bit OS bude určitě potřeba odstranit ty 2 odkazy které používají hodnotu Registry64 výčtu RegistryView):
List<string> appsNames = new List<string>();
private void FillListBoxAppsByRegistry()
{
appsNames.Clear();
ObservableCollection<installedapp> ias = new ObservableCollection<installedapp>();
RegistryView registryView32 = RegistryView.Registry32;
RegistryView registryView64 = RegistryView.Registry64;
GetInstalledAppsFromRegistry(ias, registryView32, RegistryHive.CurrentUser);
GetInstalledAppsFromRegistry(ias, registryView64, RegistryHive.CurrentUser);
GetInstalledAppsFromRegistry(ias, registryView32, RegistryHive.LocalMachine);
GetInstalledAppsFromRegistry(ias, registryView64, RegistryHive.LocalMachine);
lbInstalledApps.ItemsSource = ias;
WriteToTextBoxInstalledAppsCount(ias);
}
private void GetInstalledAppsFromRegistry(ObservableCollection<installedapp> ias, RegistryView registryView32, RegistryHive h)
{
string displayName;
RegistryKey key;
key = RegistryKey.OpenBaseKey(h, registryView32).OpenSubKey(@" SOFTWAREMicrosoftWindowsCurrentVersionUninstall");
foreach (String keyName in key.GetSubKeyNames())
{
RegistryKey subkey = key.OpenSubKey(keyName);
displayName = subkey.GetValue("DisplayName") as string;
if (!appsNames.Contains(displayName))
{
appsNames.Add(displayName);
if (displayName != null && displayName.Trim() != "")
{
ias.Add(new InstalledApp { AppName = displayName });
}
}
}
}Tak a já jdu konečně zjišťovat jak naprogramovat tetris protože můj předchozí pokus ho naprogramovat v Dartu, když jsem o tom měl minimální znalosti, nevyšel příliš úspěšně.
