Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.03;
Скачать: CL | DM;

Вниз

Как определить запущено ли уже какое-то приложение или нет ?   Найти похожие ветки 

 
GreySerg   (2003-10-22 16:40) [0]

Как определить запущено ли уже какое-то приложение или нет ?


 
Style ©   (2003-10-22 16:42) [1]

Ну как если приложение Запущенно :) то это сразу видно:)

А если для своего проекта то так:

CreateMutex(nil,true,"BANK_MUTEX");

if(GetLastError = ERROR_ALREADY_EXISTS) then
begin
MessageDlg("Прога уже открыта блин",
mtError, [mbYes], 0);
Halt(0); // выход
end;


 
panov ©   (2003-10-22 16:43) [2]

В систем всегда запущены десятки и сотни приложений, так что какое-то все равно запущено, можно даже не проверять...


 
GreySerg   (2003-10-22 16:45) [3]

нет , мне не для своей проги,
одна прога prog1 проверяет , запущена ли другая прога prog2
как такое сделать ?


 
Style ©   (2003-10-22 16:46) [4]

Узнать открыто ли другое приложение можно либо с помощью Процессов

Либо Хотябы с помощью FindWindow (ClassName, Caption)
Наверняка у окна приложения есть какой нить класс или заголовок

Если FindWindow <> 0 то такое приложение уже открыто.


 
GreySerg   (2003-10-22 16:52) [5]

что за FindWindow , не могу найти в helpe его описание ?


 
Style ©   (2003-10-22 16:57) [6]

Напиши в редакторе слово FindWindow выдели его и нажми F1
Потому что FindWindow - это WinAPI references


 
GreySerg   (2003-10-22 16:57) [7]

нашёл описание, только как мне узнать класс окна , которое ищем ?


 
GreySerg   (2003-10-22 17:00) [8]

а можно пример использования ?


 
Style ©   (2003-10-22 17:02) [9]

размер 23K - http://hch.ru/upload/showin/showin.exe

ВОт качай старую програмульку
Если нажать на крестик (Картинка там такая) А потом тыкнуть на Окно - то она все тебе о нем расскажет.


 
Style ©   (2003-10-22 17:05) [10]

EnableWindow(
FindWindow("Shell_TrayWnd",""),
false);

Вот видиш FindWindow возвращает hwnd твоего TaskBar"а


 
ZEE ©   (2003-10-22 17:06) [11]

а можно и не FindWindow,
а Wnd:=GetWindow(0,GW_HWNDFIRST) + GetWindow(Wnd,GW_HWNDNEXT)


 
Style ©   (2003-10-22 17:10) [12]

Можно и так Только придется Класс и кэпшн проверять вручную.

А еще можно и EnumWindowsProc


 
GreySerg   (2003-10-22 17:14) [13]

мне надо определить запущена ли прога , которая висит в tray ?
как в таком случае быть ?
и не определил я с помощью той проги класс окна
попробую уточнить:
у меня есть prog2, который я запускаю из prog1 с помощью ShellExecute и prog2 висит в трее, а потом надо проверять запущена ли prog2, чтобы повторно не запускать


 
Style ©   (2003-10-22 17:16) [14]

Ну что у тебя за заголовок у проги???


 
Style ©   (2003-10-22 17:19) [15]

Ну так бы и сразу

Вот тебе пример запуска калькулятора!

procedure TFrm_Main.sb_calcClick(Sender: TObject);
var
Info: TShellExecuteInfo;
ExitCode: DWORD;
begin
FillChar(Info, SizeOf(Info), 0);
Info.cbSize := SizeOf(TShellExecuteInfo);

with Info do begin
fMask := SEE_MASK_NOCLOSEPROCESS;
Wnd := Application.Handle;
lpFile := "calc.exe";
lpParameters := "";
lpDirectory := "";
nShow := SW_NORMAL;
end;
ShellExecuteEx(@Info);
sb_calc.Enabled := false;
mi_calc.Enabled := false;

repeat
Application.ProcessMessages;
GetExitCodeProcess(Info.hProcess, ExitCode);
until (ExitCode <> STILL_ACTIVE) or Application.Terminated;

sb_calc.Enabled := true;
mi_calc.Enabled := true;
end;


 
GreySerg   (2003-10-22 17:19) [16]

заголовок - "Моя прога 2" :))
так что, мне по заголовку искать ... изврат, а если есть ещё такая же прога с таким же заголовком


 
GreySerg   (2003-10-22 17:21) [17]

ShellExecuteEx не поддерживается в Windows NT , мне надо чтобы поддерживалось


 
Style ©   (2003-10-22 17:24) [18]

Так там что написано!
[ Now Supported on Windows NT]


 
Игорь Шевченко ©   (2003-10-22 17:24) [19]

GreySerg (22.10.03 17:21)

Now supported переводится как "поддерживается"


 
GreySerg   (2003-10-22 17:26) [20]

Тьфу ты , точно :)) извиняюсь , я подумал что Not


 
Igit ©   (2003-10-22 17:29) [21]

//===Функции передается имя программы, или окна и если эта==================//=|
//===программа запущена Функция возвращает true=============================//=|
{}function CheckProg(const FileName:string): BOOL; //
{}begin //
{} //делаем "слепок" системы и ищем в нем процесс... //
{} h:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //
{} pe.dwSize:=SizeOf(pe); //
{} Process32First(h,pe); //
{} repeat //
{} if AnsiLowerCase(ExtractFileName(pe.szExeFile))=AnsiLowerCase(FileName)//
{} then //
{} begin //
{} Result:=true; //
{} CloseHandle(h); //
{} exit; //
{} end; //
{} until not Process32Next(h,pe); //
{}CloseHandle(h); //
{} {если окно сейчас существует, тогда возвращаем true} //
{} if findwindow(nil, PChar(FileName))<>0 then //
{} begin //
{} Result:=true; //
{} exit; //
{} end; //
{}Result:=false; //
{}end; //
//==========================================================================//=|


 
Style ©   (2003-10-22 17:29) [22]

Это наверное красный цвет пугает ;)


 
Igit ©   (2003-10-22 17:31) [23]

забыл:

var
h:THandle;
pe:PROCESSENTRY32;


 
GreySerg   (2003-10-22 18:31) [24]

всё получилось , спасибо
>Style ©
Этот код лучше не пользовать :

repeat
Application.ProcessMessages;
GetExitCodeProcess(Info.hProcess, ExitCode);
until (ExitCode <> STILL_ACTIVE) or Application.Terminated;

он загружает проц на 100%


 
Style ©   (2003-10-23 09:17) [25]

2 GreySerg [24]

Ну дык поставь Sleep(1);


 
GreySerg   (2003-10-23 11:58) [26]

2 Style ©

я по другому сделал :)



Страницы: 1 вся ветка

Текущий архив: 2003.11.03;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.026 c
1-8376
saNat
2003-10-22 02:21
2003.11.03
Незнаю в какой форум бросить - прочитайте plz


14-8621
Мазут Береговой
2003-10-14 06:43
2003.11.03
Windows XP и MTS


1-8395
udavf
2003-10-22 17:00
2003.11.03
Поместить форму на таскбар


3-8264
Yrtimd
2003-10-15 04:35
2003.11.03
Как узнать тип сервера БД?


14-8660
MsGuns
2003-10-15 16:49
2003.11.03
А что, маты в форуме разрешаются ?