В диспетчере задач есть такой столбец "Пользователь" где пишется от кого запущен, админ или пользв, как вывести это? Пока что я смог только получать ID 1 или 0 (1-юзер, 0- админ), а нужно чтоб выдавало кто запустил процесс. Полная часть кода
UPD_1
Process[] proces;
private void GetProcesses()
{
ListViewItem row;
proces = Process.GetProcesses();
if (Convert.ToInt32(label2.Text) != proces.Length)
{
LstProc.Items.Clear();
for (int i = 0; i < proces.Length; i++)
{
row = new ListViewItem(proces[i].ProcessName);
row.SubItems.Add((proces[i].VirtualMemorySize64 / 2048).ToString() + " КБ");
row.SubItems.Add("Работает");
row.SubItems.Add(proces[i].SessionId.ToString());
LstProc.Items.Add(row);
List<ListViewItem> arrayToDelete = new List<ListViewItem>();
for (int j = 0; j < LstProc.Items.Count; j++)
if (LstProc.Items[j].SubItems[2].Text == "*")
arrayToDelete.Add(LstProc.Items[j]);
foreach (ListViewItem delete in arrayToDelete)
LstProc.Items.Remove(delete);
}
label2.Text = proces.Length.ToString();
}
}
using System.Management;
....
string[] propertiesToSelect = new[] { "Handle", "ProcessId" };
SelectQuery processQuery = new SelectQuery("Win32_Process", "Name = 'origin.exe'", propertiesToSelect); // тут нужно подставить имя процесса
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(processQuery))
using (ManagementObjectCollection processes = searcher.Get())
foreach (ManagementObject process in processes)
{
object[] outParameters = new object[2];
uint result = (uint)process.InvokeMethod("GetOwner", outParameters);
if (result == 0)
{
string user = (string)outParameters[0]; //тут получаем имя
// дальше делаем че надо
}
else
{
// тут код если GetOwner не сработал
}
}
original http://stackoverflow.com/questions/566835/how-to-get-the-user-name-or-owner-of-a-process-in-net/9013685#9013685
Получить все процессы можно так:
using System.Management;
...
ManagementObjectSearcher Processes = new ManagementObjectSearcher("SELECT * FROM Win32_Process");
foreach (ManagementObject Process in Processes.Get())
{
if (Process["ExecutablePath"] != null)
{
string[] OwnerInfo = new string[2];
Process.InvokeMethod("GetOwner", OwnerInfo);
string nameProc = Path.GetFileName(Process["ExecutablePath"].ToString());
string ownerProc = OwnerInfo[0];
}
}
Оригинал: http://stackoverflow.com/a/300535/7099599
Update 1
В твоем коде можно так (это и есть с помощью Win32 API):
List<ListViewItem> itemProc = new List<ListViewItem>(); // список процессов с параметрами
ManagementObjectSearcher Processes = new ManagementObjectSearcher("SELECT * FROM Win32_Process");
foreach (ManagementObject Process in Processes.Get())
{
if (Process["ExecutablePath"] != null)
{
row = new ListViewItem(Path.GetFileName(Process["ExecutablePath"].ToString()));
string[] OwnerInfo = new string[2];
Process.InvokeMethod("GetOwner", OwnerInfo);
//сразу добавляем массив параметров
row.SubItems.AddRange(new string[]
{
(Int64.Parse(Process["VirtualSize"].ToString()) / 1024).ToString(), // память
"Работает", // статус
Process["SessionId"].ToString(), // id сессии
OwnerInfo[0] // имя владельца
});
itemProc.Add(row);
}
}
itemProc.RemoveAll(x => x.SubItems[2].Text == "*"); // эта строка вместо всей той второй части с удалением
LstProc.Items.AddRange(itemProc.ToArray()); // теперь очищенный список itemProc передается в ListView
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Добавил иконки, но как теперь сдвинуть текст? Чтобы стало нормальноДобавление иконки:
ЗдравствуйтеУ меня такой вопрос: каким образом в C# WinForms можно реализовать компонент разворачивающегося текстового поля
Я использую entity-framework версии 61