Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2007, 10:18   #1
shift_on_line
 
Регистрация: 10.04.2007
Сообщений: 6
Вопрос Статистика работы приложений

Хочу написать программу для сбора статистики работы приложений, только вот как отлавливать заголовки приложений?

Что мне нужно на примере программы Opera:
Если брать тот что выдаётся по GetWindowText то будет:
Код:
Delphi Sources - Форум по программированию на Delphi - Создать новую тему
Если брать по GetClassName :
Код:
OpWindow
Хотя в аналоге программы которую я хочу написать (Maxapt QuickEye Enterprise) определяется как:

Код:
Opera Internet Browser 8585
Как можно получить такую информацию о текущем активном окне, да и вообще о всех. Может у кого есть какиенибуть наработки?

Вот например список того что собрала у меня данная программа за время работы:

Код:
																	   Время	 Общее	 Доля
	 Имя программы (группы)											 активной  время	 активной
																		работы	работы	работы
	 Opera Internet Browser 8585										 32ч.20м. 103ч. 4м.  32 %
	 gta_sa.exe														  17ч.18м.  25ч.43м.  68 %
	 Network Assistant (Nassi) 4.1										9ч.34м. 2270ч.57м.  1 %
	 Miranda IM 0.7													   7ч. 1м. 2270ч.13м.  1 %
	 Офисные															  6ч.23м. 2271ч. 1м.  1 %
	 MPlayer for Windows 1.1											  5ч.27м.  45ч.59м.  12 %
	 Stream Sentinel 0.6												  3ч.10м.  53ч.14м.   6 %
	 The Bat! E-Mail Client 3.85										  2ч.30м. 2162ч.22м.  1 %
	 PHP Development Environment 1.7									  2ч.20м.   9ч. 5м.  26 %
	 WINCMD32.EXE														 1ч.58м.  52ч.15м.   4 %
	 Система управления архивом статей 6.0								1ч.42м.   6ч. 8м.  28 %
	 SJphone 1, 60														1ч.24м. 2269ч.14м.  1 %
	 Разработка														   1ч. 5м.   6ч.58м.  16 %
	 Мультимедиа														  0ч.56м. 2152ч.54м.  1 %
	 StrongDC++ 0, 6													  0ч.49м.  22ч.46м.   4 %
	 Warcraft III 1, 20												   0ч.42м.   1ч.46м.  40 %
	 Системные															0ч.37м. 2271ч. 4м.  1 %
	 UAZ 4x4 1.0														  0ч.36м.   0ч.38м.  94 %
	 samp.exe															 0ч.33м.  36ч.20м.   2 %
	 RollerCoaster Tycoon® 3 3.0										  0ч.31м.   0ч.40м.  77 %
	 VirtualDub Rus 1.71												  0ч.30м.   0ч.48м.  61 %
	 Firefox 1.8														  0ч.28м.   0ч.46м.  61 %
	 Outpost Firewall main module 3.5									 0ч.27м. 2270ч.60м.  1 %
	 X-Lite.exe														   0ч.26м.   1ч. 3м.  41 %
	 NOD32 Control Center GUI 2, 51									   0ч.25м. 2270ч.57м.  1 %
Вот только откуда получаются эти названия?... Как мне получить такиеже?
shift_on_line вне форума Ответить с цитированием
Старый 10.04.2007, 13:15   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

это не название окон, а названия процессов. Не путайте.
Пример с delphiworld.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,PSAPI,TlHelp32;

type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    procedure GetProcessList(var sl: TStrings);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure tform1.GetProcessList(var sl: TStrings);
var
  pe: TProcessEntry32;
  ph, snap: THandle; //дескрипторы  < процесса >  и снимка
  mh: hmodule; //дескриптор модуля
  procs: array[0..$FFF] of dword; //массив для хранения дескрипторов  < процессов >
  count, cm: cardinal; //количество  < процессов ] 
  i: integer;
  ModName: array[0..max_path] of char; //имя модуля
begin
  sl.Clear;
  if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
  begin //если это Win9x
    snap := CreateToolhelp32Snapshot(th32cs_snapprocess, 0);
    if integer(snap) = -1 then
    begin
      exit;
    end
    else
    begin
      pe.dwSize := sizeof(pe);
      if Process32First(snap, pe) then
        repeat
          sl.Add(string(pe.szExeFile));
        until not Process32Next(snap, pe);
    end;
  end
  else
  begin //Если WinNT/2000/XP
    if not EnumProcesses(@procs, sizeof(procs), count) then
    begin
      exit;
    end;
    for i := 0 to count div 4 - 1 do
    begin
      ph := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
        false, procs[i]);
      if ph > 0 then
      begin
        EnumProcessModules(ph, @mh, 4, cm);
        GetModuleFileNameEx(ph, mh, ModName, sizeof(ModName));
        sl.Add(string(ModName));
        CloseHandle(ph);
      end;
    end;
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
  tmp: TStrings;
begin
  tmp := memo1.Lines;
  GetProcessList(tmp);
end;

end.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 10.04.2007, 17:50   #3
shift_on_line
 
Регистрация: 10.04.2007
Сообщений: 6
По умолчанию

данный пример почемуто вывел только список процессов, а не их названия.. Может я что не так делаю?

shift_on_line вне форума Ответить с цитированием
Старый 10.04.2007, 20:12   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

а что ты подразумеваешь под названием?
если надо только имя экзешника то так

sl.Add(ExtractFileName(string(ModNa me)));
rpy3uH вне форума Ответить с цитированием
Старый 10.04.2007, 20:35   #5
shift_on_line
 
Регистрация: 10.04.2007
Сообщений: 6
По умолчанию

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
а что ты подразумеваешь под названием?
если надо только имя экзешника то так

sl.Add(ExtractFileName(string(ModNa me)));
нето, например для оперы "Opera Internet Browser 8585" как в проге Maxapt QuickEye Enterprise, прочитай плз первое сообщение.
shift_on_line вне форума Ответить с цитированием
Старый 17.04.2007, 10:59   #6
shift_on_line
 
Регистрация: 10.04.2007
Сообщений: 6
По умолчанию

Мне подсказали что это внутреннее имя exe...

Подскажите как получить внутреннее имя exe по ID процесса?
shift_on_line вне форума Ответить с цитированием
Старый 17.04.2007, 20:14   #7
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

посмотри в совйствах экзешников вкладку версия там будет то же самое
тебе надо получать свойства экзешников
rpy3uH вне форума Ответить с цитированием
Старый 18.04.2007, 09:44   #8
shift_on_line
 
Регистрация: 10.04.2007
Сообщений: 6
По умолчанию

Как вручную смотреть это я понял, спасибо.

Подскажите как это организовать програмно, хотябы небольшой примерчик - как по ID процесса получить его внутреннее имя..
shift_on_line вне форума Ответить с цитированием
Старый 19.04.2007, 20:03   #9
shift_on_line
 
Регистрация: 10.04.2007
Сообщений: 6
По умолчанию

Товарищи выручайте. Подскажите как получить
shift_on_line вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Фильтр приложений One.Love Общие вопросы Delphi 7 08.09.2008 01:10
Синхронизация приложений format Помощь студентам 2 13.04.2008 17:29
Статистика загрузок файлов Gribushkino PHP 3 07.04.2008 20:27
открываю документ. ввожу дату и другие данные, как сделать чтобы на другой странице велась статистика по Аленка Microsoft Office Excel 5 12.02.2008 17:36