Изключване на друга стартирана програма програма
4 отговора
269 прегледа
Изключване на друга стартирана програма програма
Тия дни много въпроси задавам, ама ко да праиш...
Налага ми се от моето екзе да изключа друга стартирана програма(пак моя),
за да сменя екзето й. Мога да спра екзето, което изпълнявам, но как да намеря другата? Как може да се прихване ?
Налага ми се от моето екзе да изключа друга стартирана програма(пак моя),
за да сменя екзето й. Мога да спра екзето, което изпълнявам, но как да намеря другата? Как може да се прихване ?
Re: Изключване на друга стартирана програма програма
Един от вариантите е да я хвашен по надписа (caption) на прозореца.
uses Windows, Messages;
var h: HWND;
begin
h := FindWindow(nil, 'Main Form Caption');
if h <> 0 then PostMessage(h, WM_CLOSE, 0, 0);
end;
чети и дишай по-леко
uses Windows, Messages;
var h: HWND;
begin
h := FindWindow(nil, 'Main Form Caption');
if h <> 0 then PostMessage(h, WM_CLOSE, 0, 0);
end;
чети и дишай по-леко
Re: Изключване на друга стартирана програма програма
Или направо:
PostMessage(FindWindow(nil, 'Main Form Caption'), WM_CLOSE, 0, 0);
където 'Main Form Caption' е Caption-a другата ти програма.
Този подход естествено няма да сработи при смяна на Caption-a или съответно ако имаш променлив Caption. Има и други решения на проблема, едно от които е да си регистрираш WindowsMessage като спрямо параметрите му можеш да 'кажеш' на друга твоя програма да изпълни желания от теб код. Ако ти трябва подобно решение, кажи и ще изровя нещо от някой мой код.
PostMessage(FindWindow(nil, 'Main Form Caption'), WM_CLOSE, 0, 0);
където 'Main Form Caption' е Caption-a другата ти програма.
Този подход естествено няма да сработи при смяна на Caption-a или съответно ако имаш променлив Caption. Има и други решения на проблема, едно от които е да си регистрираш WindowsMessage като спрямо параметрите му можеш да 'кажеш' на друга твоя програма да изпълни желания от теб код. Ако ти трябва подобно решение, кажи и ще изровя нещо от някой мой код.
Re: Изключване на друга стартирана програма програма
Нека и аз да кажа кажа :-)
Значи за да не се вързвам с Caption на програмата си слагам Class на програмата за който разчитам да е уникален и после вместо да я търся по Title я търся по Class....
Пример:
type
TForm1 = class(TForm)
..........
procedure CreateParams(var Params: TCreateParams); override;
..........
end;
const
MyClassName = 'TUK_E_UNIKALNOTO';
....
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WinClassName := MyClassName;
end;
.....
procedure CheckForOtherCopy;
var zz:HWND;
begin
zz:=FindWindow(myClassName,nil);
if zz<>0 then ....
Нататък правиш каквото искаш...
Успех
Значи за да не се вързвам с Caption на програмата си слагам Class на програмата за който разчитам да е уникален и после вместо да я търся по Title я търся по Class....
Пример:
type
TForm1 = class(TForm)
..........
procedure CreateParams(var Params: TCreateParams); override;
..........
end;
const
MyClassName = 'TUK_E_UNIKALNOTO';
....
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
Params.WinClassName := MyClassName;
end;
.....
procedure CheckForOtherCopy;
var zz:HWND;
begin
zz:=FindWindow(myClassName,nil);
if zz<>0 then ....
Нататък правиш каквото искаш...
Успех
Re: Изключване на друга стартирана програма програма
Изглежда ми, че правиш програма с възможности за обновяване. Колегите са ти дали добри напътствия, но можеш да видиш и един друг подход, който бе дискутиран малко по-рано: [линк]. Успех!
Mixy
Mixy