Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получения Списка ОПИСАНИЯ!!! запущеных процессов 
:(
    Опции темы
bigbuka
Дата 20.7.2010, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 1.10.2009

Репутация: нет
Всего: нет



можно ли как-то программно получить вот этот список описаний процессов?
если да то как?
Скрытый текст

user posted image

PM MAIL   Вверх
12usver12
Дата 21.7.2010, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 5.1.2007

Репутация: 1
Всего: 1



конечно можно, если эта твоя прога их как-то же получает  smile 
используй EnumWindows/GetWindowThreadProcessId
PM MAIL   Вверх
Abyx
Дата 21.7.2010, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 2
Всего: 10



это из ресурса versioninfo
PM MAIL   Вверх
bigbuka
Дата 21.7.2010, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 1.10.2009

Репутация: нет
Всего: нет



это не моя прога это диспетчер задач виндовс...))
PM MAIL   Вверх
borisbn
Дата 21.7.2010, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 6
Всего: 135



псевдо код:
Код

hProcessSnap = CreateToolhelp32Snapshot( ...
if (Process32First( hProcessSnap, &pe32 ) ) 
{
    GetFileVersionInfo( pe32.szExeFile, ...
    VerQueryValue( ... )
}
while ( Process32Next(hProcessSnap, &pe32)); 

ищи эти функции на http://msdn.microsoft.com


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bigbuka
Дата 22.7.2010, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 1.10.2009

Репутация: нет
Всего: нет



borisbn
спасибо большое за помощь
возникла другая проблема..так он отображает только процессы 32 бит...
на 64 битной системе не видно ни одного 64 бит процесса...подскажите как это исправить?

Это сообщение отредактировал(а) bigbuka - 22.7.2010, 20:01
PM MAIL   Вверх
jonie
Дата 22.7.2010, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118





--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
borisbn
Дата 22.7.2010, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 6
Всего: 135



м.б. вместо CreateToolhelp32Snapshot использовать какой-нибудь  CreateToolhelp64Snapshot ? Честно говоря, не знаю, есть ли такой, но поискать, думаю, стОит в этом направлении


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Dem_max
Дата 23.7.2010, 08:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



64 битные процессы так просто не увидишь да и информацию не получишь, если достучусь до исходниов то выложу код.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
bigbuka
Дата 23.7.2010, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 1.10.2009

Репутация: нет
Всего: нет



отлично...скорее бы достучались...а то очень надо..)
PM MAIL   Вверх
Dem_max
Дата 24.7.2010, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



собственно код на паскале, но я думаю трудностей не должно быть с переводом ибо все на WinAPI
Код


unit Unit1;

interface

uses
     TLHelp32,
     PsAPI,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  
function QueryFullProcessImageNameW(Process: THandle; Flags: DWORD; Buffer: PChar; Size: PDWORD): DWORD;
     stdcall; external 'kernel32.dll';

var
  Form1: TForm1;

implementation

{$R *.dfm}

Function GetProcessFilePath(PID: Cardinal): String;
     Function IsWin2k: Boolean;
     begin
          Result := (Win32MajorVersion = 5) and (Win32Platform = VER_PLATFORM_WIN32_NT);
     end;

     Function IsWinNT4: Boolean;
     begin
          Result := (Win32MajorVersion = 4) and (Win32Platform = VER_PLATFORM_WIN32_NT);
     end;
Const
     PROCESS_QUERY_LIMITED_INFORMATION = $1000;
var
     hP        :    THandle;
     Buffer    :    Array[0..MAX_PATH] of Char;
     S         :    DWORD;
begin
     Result := '';

     if PID > 0 then
     begin
          if IsWinNT4 or IsWin2K then
          begin
               hP := OpenProcess(PROCESS_QUERY_INFORMATION, False, PID);
               if hP > 0 then
                    if GetModuleFileNameEx(hP, 0, Buffer, Length(Buffer)) > 0 then Result :=
                         StringReplace(Buffer, '\??\', '', [rfReplaceAll, rfIgnoreCase]);
          end
          else
          begin
               hP := OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, False, PID);
               if hP > 0 then
                    if QueryFullProcessImageNameW(hP, 0, @Buffer, @S) > 0 then Result := String(Buffer);
          end;
          CloseHandle(hP);
     end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
     hSnapShot: THandle;
     ProcInfo: TProcessEntry32;


     hToken              :    THandle;
     SeDebugNameValue    :    Int64;
     tkp                 :    TOKEN_PRIVILEGES;
     ReturnLength        :    Cardinal;
begin
     ListBox1.Clear;

///   Добавляем привилегию   /////////////////////////////////////////////////////////////////////////////////
     if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then     ///
          exit;                                                                                            ///
                                                                                                           ///
     if not LookupPrivilegeValue( nil, 'SeDebugPrivilege', SeDebugNameValue ) then                         ///
     begin                                                                                                 ///
          CloseHandle(hToken);                                                                             ///
          exit;                                                                                            ///
     end;                                                                                                  ///
                                                                                                           ///
     tkp.PrivilegeCount:= 1;                                                                               ///
     tkp.Privileges[0].Luid := SeDebugNameValue;                                                           ///
     tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;                                                 ///
                                                                                                           ///
     AdjustTokenPrivileges(hToken,false,tkp,SizeOf(tkp),tkp,ReturnLength);                                 ///
     if GetLastError() <> ERROR_SUCCESS  then exit;                                                        ///
//////////////////////////////////////////////////////////////////////////////////////////////////////////////


     hSnapShot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
     if (hSnapShot <> THandle(-1)) then
     begin
          ProcInfo.dwSize := SizeOf(ProcInfo);
          if (Process32First(hSnapshot, ProcInfo)) then
          begin
               while (Process32Next(hSnapShot, ProcInfo)) do
               Begin
                    case ProcInfo.th32ProcessID of
                         4: ListBox1.Items.Add('[System]');
                    else
                         ListBox1.Items.Add(GetProcessFilePath(ProcInfo.th32ProcessID));
                    end;
               End;
          end;
          CloseHandle(hSnapShot);
     end;

///   Удаляем привилегию   ///////////////////////////////////////////////////////////
     tkp.Privileges[0].Attributes := 0;                                            ///
     AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength);    ///
     if GetLastError() <>  ERROR_SUCCESS then exit;                                ///
//////////////////////////////////////////////////////////////////////////////////////
end;

end.


Это сообщение отредактировал(а) Dem_max - 24.7.2010, 18:16


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
bigbuka
Дата 24.7.2010, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 1.10.2009

Репутация: нет
Всего: нет



не я такое уже написал и она говори тока 32 бит процессы...
PM MAIL   Вверх
DarthTon
Дата 24.7.2010, 20:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 106
Регистрация: 7.2.2009

Репутация: 5
Всего: 6



Ну вот этот код у меня отлично отображает 64-битные процессы:

Код

#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <tlhelp32.h>

int main( )
{
  HANDLE hProcessSnap;
  HANDLE hProcess;
  PROCESSENTRY32 pe32;
  DWORD dwPriorityClass,dwCount=0;

  // Take a snapshot of all processes in the system.
  hProcessSnap = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
  if( hProcessSnap == INVALID_HANDLE_VALUE )
    return 0;

  // Set the size of the structure before using it.
  pe32.dwSize = sizeof( PROCESSENTRY32 );

  // Retrieve information about the first process,
  // and exit if unsuccessful
  if( !Process32First( hProcessSnap, &pe32 ) )
  {
    CloseHandle( hProcessSnap );          // clean the snapshot object
    return 0;
  }

  // Now walk the snapshot of processes, and
  // display information about each process in turn
  do
  {
      printf("%d\t%s\n", pe32.th32ProcessID  ,pe32.szExeFile );
      dwCount++;
  } while( Process32Next( hProcessSnap, &pe32 ) );

  printf("Total number:  %d\n", dwCount);
  CloseHandle( hProcessSnap );
  return 0;
}


Если это не поможет, то EnumProcesses тебе в помощь. Ну и работать с 64-битными процессами все же желательно из 64-битного процесса.
PM MAIL   Вверх
Dem_max
Дата 26.7.2010, 09:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



DarthTon твой код без привилегий не будет видеть 64 битные процессы. в 32 битном приложении


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
icecrashldr
Дата 26.7.2010, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 5.7.2010

Репутация: нет
Всего: нет



ZwQuerySystemInformation, если и он не увидит, то только 64 разрядные приложение поможет... 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0615 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.