Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как в программе узнать запущена другая программа? 
:(
    Опции темы
зятьМижуев
Дата 11.12.2004, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте . Прошу сообщить , как в программе узнать запущена другая программа или нет .
PM MAIL WWW   Вверх
SPrograMMer
Дата 11.12.2004, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Спамер :)
**


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

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



Как так?! Какая программа? Своя собственная?
Можно поточнее...



--------------------
животное = зверь
законченный гентушник
PM MAIL ICQ Jabber   Вверх
Ddddddelphi
Дата 11.12.2004, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а может через WinApi?

Это сообщение отредактировал(а) Ddddddelphi - 11.12.2004, 12:47
PM MAIL   Вверх
Bes
Дата 11.12.2004, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Найди в нете такую хелпу как Kuliba. Там точно было.
Способ еще зависит от того имеет ли др. приложение окно иил нет.

Вот из кулибы.
"
Получение списка запущеных приложений

Igor Nikolaev aKa The Sprite предлагает следующий код:


--------------------------------------------------------------------------------
Код
procedure TForm1.Button1Click(Sender: TObject);
VAR
Wnd : hWnd;
buff: ARRAY [0..127] OF Char;
begin
ListBox1.Clear;
Wnd := GetWindow(Handle, gw_HWndFirst);
WHILE Wnd <> 0 DO BEGIN {Hе показываем:}
IF (Wnd <> Application.Handle) AND {-Собственное окно}
IsWindowVisible(Wnd) AND {-Hевидимые окна}
(GetWindow(Wnd, gw_Owner) = 0) AND {-Дочернии окна}
(GetWindowText(Wnd, buff, sizeof(buff)) <> 0)
THEN BEGIN
GetWindowText(Wnd, buff, sizeof(buff));
ListBox1.Items.Add(StrPas(buff));
END;
Wnd := GetWindow(Wnd, gw_hWndNext);
END;
ListBox1.ItemIndex := 0;
end;  
"

Еще оттуда же.
"
Как получить хэндлы всех пpоцессов, котоpые запущены на данный момент в системе?

Nomadic отвечает:
Под Windows 95 это возможно с использованием вспомогательных инфоpмационных функций (tool help functions).

Для получения списка пpоцессов надо делать следующее:

Cпеpва вызывается фукция 
--------------------------------------------------------------------------------
    hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
// - получение снимка состояния системы  


Process32First() - получене инфоpмации о пеpвом пpоцессе в списке

Далее в цикле Process32Next() - получение инфоpмации о следующем пpоцессе в списке
Пример:
>== Режем pаз ==>



--------------------------------------------------------------------------------
    unit KernlUtl;

interface
uses TlHelp32, Windows, Classes, Sysutils;

procedure GetProcessList(List: TStrings);
procedure GetModuleList(List: TStrings);
function GetProcessHandle(ProcessID: DWORD): THandle;
procedure GetParentProcessInfo(var ID: DWORD; var Path: String);

const


PROCESS_TERMINATE         =  $0001;
PROCESS_CREATE_THREAD     =  $0002;
PROCESS_VM_OPERATION      =  $0008;
PROCESS_VM_READ           =  $0010;
PROCESS_VM_WRITE          =  $0020;
PROCESS_DUP_HANDLE        =  $0040;
PROCESS_CREATE_PROCESS    =  $0080;
PROCESS_SET_QUOTA         =  $0100;
PROCESS_SET_INFORMATION   =  $0200;
PROCESS_QUERY_INFORMATION =  $0400;
PROCESS_ALL_ACCESS        =
STANDARD_RIGHTS_REQUIRED or SYNCHRONIZE or $0FFF;


implementation

procedure GetProcessList(List: TStrings);
var

I: Integer;
hSnapshoot: THandle;
pe32: TProcessEntry32;
begin

List.Clear;
hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);


if (hSnapshoot = -1) then
Exit;
pe32.dwSize := SizeOf(TProcessEntry32);
if (Process32First(hSnapshoot, pe32)) then
repeat
I := List.Add(Format('%x, %x: %s',
[pe32.th32ProcessID, pe32.th32ParentProcessID, pe32.szExeFile]));
List.Objects[I] := Pointer(pe32.th32ProcessID);
until not Process32Next(hSnapshoot, pe32);


CloseHandle (hSnapshoot);
end;

procedure GetModuleList(List: TStrings);
var

I: Integer;
hSnapshoot: THandle;
me32: TModuleEntry32;
begin

List.Clear;
hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, 0);
if (hSnapshoot = -1) then
Exit;
me32.dwSize := SizeOf(TModuleEntry32);
if (Module32First(hSnapshoot, me32)) then
repeat
I := List.Add(me32.szModule);
List.Objects[I] := Pointer(me32.th32ModuleID);
until not Module32Next(hSnapshoot, me32);


CloseHandle (hSnapshoot);
end;

procedure GetParentProcessInfo(var ID: DWORD; var Path: String);
var

ProcessID: DWORD;
hSnapshoot: THandle;
pe32: TProcessEntry32;
begin

ProcessID := GetCurrentProcessID;
ID := -1;
Path := '';


hSnapshoot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);


if (hSnapshoot = -1) then
Exit;


pe32.dwSize := SizeOf(TProcessEntry32);
if (Process32First(hSnapshoot, pe32)) then
repeat
if pe32.th32ProcessID = ProcessID then
begin
ID := pe32.th32ParentProcessID;
Break;
end;
until not Process32Next(hSnapshoot, pe32);


if ID <> -1 then
begin
if (Process32First(hSnapshoot, pe32)) then
repeat
if pe32.th32ProcessID = ID then
begin
Path := pe32.szExeFile;
Break;
end;
until not Process32Next(hSnapshoot, pe32);
end;
CloseHandle (hSnapshoot);
end;

function GetProcessHandle(ProcessID: DWORD): THandle;
begin

Result := OpenProcess(PROCESS_ALL_ACCESS, True, ProcessID);
end;

end.  

"


P.S. седовательно надо это понимать так, что процесс иприложение не одно и то же.

Это сообщение отредактировал(а) p0s0l - 29.9.2005, 11:15
PM MAIL   Вверх
Medved
Дата 11.12.2004, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 7209
Регистрация: 15.9.2002
Где: Kazakhstan, Astan a

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



Используй FindWindow для главного окна чужого приложения. Это тебе и есть WinApi.

Цитата
The FindWindow function retrieves the handle to the top-level window whose class name and window name match the specified strings. This function does not search child windows.

HWND FindWindow(

    LPCTSTR lpClassName, // pointer to class name
    LPCTSTR lpWindowName  // pointer to window name
  );


Parameters

lpClassName

Points to a null-terminated string that specifies the class name or is an atom that identifies the class-name string. If this parameter is an atom, it must be a global atom created by a previous call to the GlobalAddAtom function. The atom, a 16-bit value, must be placed in the low-order word of lpClassName; the high-order word must be zero.

lpWindowName

Points to a null-terminated string that specifies the window name (the window's title). If this parameter is NULL, all window names match.


Return Values

If the function succeeds, the return value is the handle to the window that has the specified class name and window name.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.



--------------------
http://extreme.sport-express.ru/
...и неважно сколько падал, важно сколько ты вставал...
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

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


 




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


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

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