展开全部
//需要引用Microsoft.Win32;命名空间 写的有点麻烦
private void Form1_Load(object sender, EventArgs e)
{
listview1.Checkbox=true;//就是listview每行前面有个复选框, 这个属性名我忘了具体怎么写的了
listview1.View=View.Detials;
//HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 此键的子健为本机所有注册过的软件的卸载程序,通过此思路进行遍历安装的软件
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");
string[] key1 = key.GetSubKeyNames();//返回此键所有的子键名称
List<string> key2 = key1.ToList<string>();//因为有的项木有"DisplayName"或"DisplayName"的键值的时候要把键值所在数组中的的元素进行删除
RegistryKey subkey = null;
try
{
for (int i = 0; i < key2.Count; i++)
{
subkey = key.OpenSubKey(key2[i]);//通过list泛型数组进行遍历,某款软件项下的子键
if (subkey.GetValue("DisplayName") != null)
{
if (subkey.GetValue("DisplayIcon") != null)
{
string path = subkey.GetValue("DisplayIcon").ToString();
string SubPath = path.Substring(path.Length - 1, 1);//截取子键值的最后一位进行判断
if (SubPath == "o" || path.IndexOf("exe") == -1)//如果为o 就是ico 或 找不到exe的 表示为图标文件或只有个标识而没有地址的
{
key2.RemoveAt(i);//首先删除数组中此索引的元素
i -= 1;//把循环条件i的值进行从新复制,否则下面给listview的项的tag属性进行赋值的时候会报错
continue;
}
listView1.Items.Add(subkey.GetValue("DisplayName").ToString());//把软件名称添加到listview控件中
if (SubPath == "e")//如果为e 就代表着是exe可执行文件,
{
listView1.Items[i].Tag = path;//则表示可以直接把地址赋给tag属性
continue;
}
if (SubPath == "0" || SubPath == "1")//因为根据观察 取的是DisplayIcon的值 表示为图片所在路径 如果为0或1,则是为可执行文件的图标
{
path = path.Substring(0, path.LastIndexOf("e") + 1);//进行字符串截取,
listView1.Items[i].Tag = path;//则表示可以直接把地址赋给tag属性
continue;
}
}
else
{
key2.RemoveAt(i);//首先删除数组中此索引的元素
i -= 1;//把循环条件i的值进行从新复制,否则下面给listview的项的tag属性进行复制的时候会报错
continue;
}
}
else
{
key2.RemoveAt(i);//首先删除数组中此索引的元素
i = i - 1;//把循环条件i的值进行从新复制,否则下面给listview的项的tag属性进行复制的时候会报错
}
}
}
catch (Exception ex )
{
MessageBox.Show(ex.Message);
}
}
private void btn_start_Click(object sender, EventArgs e)
{
for (int i = 0; i < listView1.Items.Count; i++)
{
if (listView1.Items[i].Checked)
{
System.Diagnostics.Process.Start(listView1.Items[i].Tag.ToString());//启动所选中的软件
}
}
private void Form1_Load(object sender, EventArgs e)
{
listview1.Checkbox=true;//就是listview每行前面有个复选框, 这个属性名我忘了具体怎么写的了
listview1.View=View.Detials;
//HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 此键的子健为本机所有注册过的软件的卸载程序,通过此思路进行遍历安装的软件
RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall");
string[] key1 = key.GetSubKeyNames();//返回此键所有的子键名称
List<string> key2 = key1.ToList<string>();//因为有的项木有"DisplayName"或"DisplayName"的键值的时候要把键值所在数组中的的元素进行删除
RegistryKey subkey = null;
try
{
for (int i = 0; i < key2.Count; i++)
{
subkey = key.OpenSubKey(key2[i]);//通过list泛型数组进行遍历,某款软件项下的子键
if (subkey.GetValue("DisplayName") != null)
{
if (subkey.GetValue("DisplayIcon") != null)
{
string path = subkey.GetValue("DisplayIcon").ToString();
string SubPath = path.Substring(path.Length - 1, 1);//截取子键值的最后一位进行判断
if (SubPath == "o" || path.IndexOf("exe") == -1)//如果为o 就是ico 或 找不到exe的 表示为图标文件或只有个标识而没有地址的
{
key2.RemoveAt(i);//首先删除数组中此索引的元素
i -= 1;//把循环条件i的值进行从新复制,否则下面给listview的项的tag属性进行赋值的时候会报错
continue;
}
listView1.Items.Add(subkey.GetValue("DisplayName").ToString());//把软件名称添加到listview控件中
if (SubPath == "e")//如果为e 就代表着是exe可执行文件,
{
listView1.Items[i].Tag = path;//则表示可以直接把地址赋给tag属性
continue;
}
if (SubPath == "0" || SubPath == "1")//因为根据观察 取的是DisplayIcon的值 表示为图片所在路径 如果为0或1,则是为可执行文件的图标
{
path = path.Substring(0, path.LastIndexOf("e") + 1);//进行字符串截取,
listView1.Items[i].Tag = path;//则表示可以直接把地址赋给tag属性
continue;
}
}
else
{
key2.RemoveAt(i);//首先删除数组中此索引的元素
i -= 1;//把循环条件i的值进行从新复制,否则下面给listview的项的tag属性进行复制的时候会报错
continue;
}
}
else
{
key2.RemoveAt(i);//首先删除数组中此索引的元素
i = i - 1;//把循环条件i的值进行从新复制,否则下面给listview的项的tag属性进行复制的时候会报错
}
}
}
catch (Exception ex )
{
MessageBox.Show(ex.Message);
}
}
private void btn_start_Click(object sender, EventArgs e)
{
for (int i = 0; i < listView1.Items.Count; i++)
{
if (listView1.Items[i].Checked)
{
System.Diagnostics.Process.Start(listView1.Items[i].Tag.ToString());//启动所选中的软件
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询