Zabicie procesu pilotem TV

0

Witam
Może zacznę od problemu, który mnie męczy od kilku dni.

Robię taki programik mały do karty tv, otóż pilotem za pomocą Power załączam lub zamykam proces o programu karty, po czym wykonuje się coś tam.

Rozpoznanie zamykania procesu lub uruchamiania mam wrzucone do Timera.
Jeśli zamknę proces to Panel1.Caption:= 'Program wyłączony', jeśli uruchamiam proces to Panel1.Caption:= 'Program włączony'.

I tak jak już wspomniałem, całą tą procedurę mam w Timerze.
Jak zrobić rozpoznawanie zabicia lub uruchomienia procesu, ale nie wrzucając tego w Timer?

0

Zrób to poprzez komunikaty. Poczytaj o tym. odpowiednie obsłużenie aplikacji powoduje że jest ona "powiadamiana komunikatem" o tym że np został wciśnięty przycisk. Komunikaty ale poczytaj tez inne artykuły, jest to bardzo fajna sprawa. Jaki komunikat Ty powinieneś przechwycić i zaareagować na niego to już musisz sam sprawdzić jaki to jest.

0
function CheckProcess(Name: String): Boolean;
function ProcessList: TStringList;
var
  Handle: THandle;
  Process: TProcessEntry32;

begin
  Handle:=CreateToolHelp32SnapShot(TH32CS_SNAPALL, 0);
  Process.dwSize:=SizeOf(Process);
  Result:=TStringList.Create;
  if Integer(Process32First(Handle, Process)) <> 0 then
    repeat
      Result.Append(Process.szExeFile);
    until Integer(Process32Next(Handle, Process)) = 0;
      CloseHandle(Handle);
end;

var
  i: Integer;
  ProcessL: TStringList;

begin
  ProcessL := TStringList.Create;
  ProcessL := ProcessList;

  for i := 0 to ProcessL.Count-1 do
    if LowerCase(ProcessL[i]) = LowerCase(Name) then
      begin
        Result := True;

        Break;
      end
    else
      Result := False;
end;



procedure TForm1.Timer1Timer(Sender: TObject);
begin
     if CheckProcess('nazwa_procesu.exe') then 
           Panel1.Caption:='Program włączony'
     else
          Panel1.Caption:='Program wyłączony'
end; //1000 ms

Pytanie: jak zastąpić ten Timer czymś innym, aby w kółko nie wykonywała się procedura i nasłuchiwała czy proces jest, czy go nie ma, tylko żeby ta procedura z Panelem wykonała się jak zamkniemy faktycznie proces?

0

Napisałem CI, komunikaty. Obsłuż to komunikatem. Kod z timera przerób na procedure, która zostanie wywołana w momencie odebrania komunikatu. Poczytaj o tym.

System wysyła różne komunikaty, równie dobrze możesz nimi przechwycić moment skopiowania schowka lub kliknięcie jakiegoś klawisza itp.

0

No właśnie jak pisałem drugiego posta to wyprzedziłeś mnie. Czytam już o komunikatach. :)

Generalnie chodzi o to, że w moim programie jedna procedura wykonuje się odwójnie czyli w OnCreate i w Timerze, a chcę tylko gdy proces się fizycznie zamknie i spróbuję to obsłużyć tymi komunikatami.

0

Zacząłem wymyślac jakieś pierdoły z WM_Quit i nic. Poddaję się.
Nawet nie ma jakiego komponentu w Jedi paczce i na torry.net.

Szukam innego rozwiązania...;]

0

bo jesteś za głupi na to forum.

0
pff napisał(a)

bo jesteś za głupi na to forum.

Ty natomiast swoją ćwierćinteligentną odpowiedzią pokazujesz, że za głupi jesteś nawet na zagotowanie wody w czajniku.

BTW: http://www.google.pl/search?client=opera&rls=pl&q=delphi+wm_quit+message&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest

1 użytkowników online, w tym zalogowanych: 0, gości: 1