/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Kan jeg se om et bestemt program allerede ~
Fra : Michael Vilhelmsen


Dato : 17-04-02 10:00

Hej

Jeg har lavet en lille "application launcher".

I den forbindelse, vil jeg gerne kunne se om et bestemt programm allerede
kører på maskinen.

Kan jeg det, når jeg ved, hvad EXE filen hedder.



--
Best Regards / Med venlig hilsen
___________
Michael Vilhelmsen
Microcom ApS, Denmark


 
 
David A. D. Konrad (17-04-2002)
Kommentar
Fra : David A. D. Konrad


Dato : 17-04-02 10:44

"Michael Vilhelmsen" <Michael.Vilhelmsen.NoSpam@Microcom.Com> skrev i en
meddelelse

> Jeg har lavet en lille "application launcher".
>
> I den forbindelse, vil jeg gerne kunne se om et bestemt programm allerede
> kører på maskinen.
>
> Kan jeg det, når jeg ved, hvad EXE filen hedder.

Ja, du kan finde navnene på alle kørende processer, og sætte dem ind i en
listbox f.eks således...

var H : HWnd;
s : pchar;
begin
getmem(s,255);
H:=self.handle;
while H<>0 do
begin
H:=GetWindow(H,GW_HWNDPREV);
getWindowText(H,s,255);
listbox1.items.add(s);
end;
end;

Istedet for at sætte navnene ind i en listbox, returnerer du en boolean der
angiver om et bestemt program kører, f.eks således

function AppIsRunning(handle:HWnd; name:string):boolean;
var H : HWnd;
s : pchar;
begin
getmem(s,255);
H:=handle;
while H<>0 do
begin
H:=GetWindow(H,GW_HWNDPREV);
getWindowText(H,s,255);
if s=name then
begin
result:=true;
exit;
end;
end;
end;

og f.eks tjekke, om Delphi 6 kører

procedure TForm1.Button1Click(Sender: TObject);
begin
if AppIsRunning(self.handle,'Delphi 6') then
begin
messagedlg('Delphi 6 kører!',mtInformation,[mbOk],0);
end;
end;




Michael Vilhelmsen (17-04-2002)
Kommentar
Fra : Michael Vilhelmsen


Dato : 17-04-02 12:37

Der er nu nogle sjove navne jeg får frem.
Såsom

- SYsfader (3 gange
- En masse tomme linie.

Og det program, som jeg ser efter hedder egentlig Epc.Exe (eller Easy Pos
Console), men ingen af de navne fremkommer. I stedet fremkommer en tekst
som:

onsdag den 17 april 2000 12:57:30


Det var ikke helt det jeg regnede med.

--
Best Regards / Med venlig hilsen
___________
Michael Vilhelmsen
Microcom ApS, Denmark


David A. D. Konrad (17-04-2002)
Kommentar
Fra : David A. D. Konrad


Dato : 17-04-02 13:16

"Michael Vilhelmsen" <Michael.Vilhelmsen.NoSpam@Microcom.Com> skrev i en
meddelelse news:Xns91F38A722C862MichaelVilhelmsenNoS@212.54.64.135...
> Der er nu nogle sjove navne jeg får frem.
> Såsom
>
> - SYsfader (3 gange
> - En masse tomme linie.

(...)

Men, jeg skriver netop PROCESSER! Alt hvad der er "levende" i windows, der
gælder eksempelvis også dit ur, er et program, dvs en proces med sin egen
handle. Du kan ikke med et enkelt kald skelne imellem hvad der er hvad -
der skal mere til, men i relation til dit behov er det ligegyldigt. Ærlig
talt havde jeg forventet, at du ville synes det var sjovt at se hvilke
processer der kører i baggrunden - det er jo lidt ala din taskmanager

Så brug dog denne function i stedet, den skulle gøre _nøjagtigt_ det du
ønsker ;-P

function isAppRunning(name : string):boolean;
var IsRunning, ContinueTest: Boolean;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
IsRunning := False;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueTest := Process32First(FSnapshotHandle, FProcessEntry32);
while ContinueTest do begin
IsRunning :=
UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(name);
if IsRunning then
ContinueTest := False
else
ContinueTest := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
result:=IsRunning;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if isAppRunning('notepad.exe') then messagedlg('notepad kører',
mtInformation,[mbOk],0);
end;




David A. D. Konrad (17-04-2002)
Kommentar
Fra : David A. D. Konrad


Dato : 17-04-02 13:20

"David A. D. Konrad" <david_konrad@hotmail.com> skrev i en meddelelse
news:a9jp13$7er$1@sunsite.dk...

(...)

Husk i øvrigt at inkludere TLHelp32 i din uses erklæring...



Michael Vilhelmsen (17-04-2002)
Kommentar
Fra : Michael Vilhelmsen


Dato : 17-04-02 13:50

Det er også ganske sjovt at se, hvad der kører på maskinen, og rutinerne er
heller ikke overflødige !

Det var bare ikke lige det jeg havde forventet.

Jeg siger indtil nu tusind tak for hjælpen.



--
Best Regards / Med venlig hilsen
___________
Michael Vilhelmsen
Microcom ApS, Denmark


David A. D. Konrad (17-04-2002)
Kommentar
Fra : David A. D. Konrad


Dato : 17-04-02 13:54

"Michael Vilhelmsen" <Michael.Vilhelmsen.NoSpam@Microcom.Com> skrev i en
meddelelse

> Jeg siger indtil nu tusind tak for hjælpen.

Selv tak. Håber den anden metode var tilfredstillende...




Michael Vilhelmsen (17-04-2002)
Kommentar
Fra : Michael Vilhelmsen


Dato : 17-04-02 14:12

Fuldt ud tilfredsstillende.

Nu har jeg et helt andet spørgsmål

Det program, som jeg starter hedder EASYPOSKONTOR.EXE.

Men den finder ikke programmet som kørende på maskinen, selvom det er
kørende.

Jeg har så fundet ud af, at på min WIndows 2000 pro. hedder programmet i
flg. taskmanageren

EASYPOSKONTOR.E

Og ikke andet.

Er det normalt ?




--
Best Regards / Med venlig hilsen
___________
Michael Vilhelmsen
Microcom ApS, Denmark


David A. D. Konrad (17-04-2002)
Kommentar
Fra : David A. D. Konrad


Dato : 17-04-02 14:29

"Michael Vilhelmsen" <Michael.Vilhelmsen.NoSpam@Microcom.Com> skrev i en
meddelelse

> Jeg har så fundet ud af, at på min WIndows 2000 pro. hedder programmet i
> flg. taskmanageren
>
> EASYPOSKONTOR.E

Utroligt. Jeg kan faktisk reproducere fejlen - også hvis jeg f.eks kalder et
program "dette_er_en_test.exe" eller lignende. Det ser ud som om, at
taskmanageren cutter alle bogstaver over den 15' karakter væk. Pinligt,
synes jeg. Tak for oplysningen.

> Er det normalt ?

Åbenbart...!!?? szExeFile i TProcessEntry32 er et array af widechars der kan
gå op til MAX_PATH, der er defineret som 260. Jeg har aldrig været opmærksom
på den "detalje" før, må jeg erkende, og efter som windows TaskManager
opfører sig på samme måde, er det åbenbart ret generelt.

Jeg ville cutte alle karakterer efter det 15' tegn væk fra "name" i
funktionen, hvis den er længere end 15 karakterer, og sammenligne med
resten. Der er vist ikke andre udveje. Vel kan der så opstå konflikter med
exe-filer der hedder det samme, men det _burde_ kun være et sjældent
forekommende problem, med mindre man kalder en række programmer for
eksempelvis detteerendnuentest1, detteerendnuentest2, detteerendnuentest3
I øvrigt burde man egentlig også lade være med at UpperCase' filnavnet,
så.




David A. D. Konrad (17-04-2002)
Kommentar
Fra : David A. D. Konrad


Dato : 17-04-02 14:29

"Michael Vilhelmsen" <Michael.Vilhelmsen.NoSpam@Microcom.Com> skrev i en
meddelelse

> Jeg har så fundet ud af, at på min WIndows 2000 pro. hedder programmet i
> flg. taskmanageren
>
> EASYPOSKONTOR.E

Utroligt. Jeg kan faktisk reproducere fejlen - også hvis jeg f.eks kalder et
program "dette_er_en_test.exe" eller lignende. Det ser ud som om, at
taskmanageren cutter alle bogstaver over den 15' karakter væk. Pinligt,
synes jeg. Tak for oplysningen.

> Er det normalt ?

Åbenbart...!!?? szExeFile i TProcessEntry32 er et array af widechars der kan
gå op til MAX_PATH, der er defineret som 260. Jeg har aldrig været opmærksom
på den "detalje" før, må jeg erkende, og efter som windows TaskManager
opfører sig på samme måde, er det åbenbart ret generelt.

Jeg ville cutte alle karakterer efter det 15' tegn væk fra "name" i
funktionen, hvis den er længere end 15 karakterer, og sammenligne med
resten. Der er vist ikke andre udveje. Vel kan der så opstå konflikter med
exe-filer der hedder det samme, men det _burde_ kun være et sjældent
forekommende problem, med mindre man kalder en række programmer for
eksempelvis detteerendnuentest1, detteerendnuentest2, detteerendnuentest3
I øvrigt burde man egentlig også lade være med at UpperCase' filnavnet,
så.






Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste