/ 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
Åbne et program og vente på det blir lukke~
Fra : david


Dato : 12-04-01 21:28

Åbne et program og vente på det blir lukket, hvordan gør jeg det???

--
Jonathan s
1.33 Tbird Overclok and cpuidmax program.
www.chiptek.org
www.tombstoneblues.com



 
 
Hans-Henrik Nielsen (12-04-2001)
Kommentar
Fra : Hans-Henrik Nielsen


Dato : 12-04-01 22:09

"david" <tabby@worldonline.dk> skrev i en meddelelse
news:OeoB6.36306$o4.2694392@news010.worldonline.dk...
> Åbne et program og vente på det blir lukket, hvordan gør jeg det???

Prøv dette:

function TForm1.WinExecAndWait32(FileName:String; Visibility : integer):
integer;
var
zAppName:array[0..512] of char;
zCurDir:array[0..255] of char;
WorkDir:String;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
begin
StrPCopy(zAppName,FileName);
GetDir(0,WorkDir);
StrPCopy(zCurDir,WorkDir);
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb := Sizeof(StartupInfo);

StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
if not CreateProcess(nil,
zAppName, { pointer to command line string }
nil, { pointer to process security
attributes }
nil, { pointer to thread security attributes }
false, { handle inheritance flag }
CREATE_NEW_CONSOLE or { creation flags }
NORMAL_PRIORITY_CLASS,
nil, { pointer to new environment block }
nil, { pointer to current directory name }
StartupInfo, { pointer to STARTUPINFO }
ProcessInfo) then Result := -1 { pointer to PROCESS_INF }

else begin
WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
GetExitCodeProcess(ProcessInfo.hProcess, LongWord(Result));
end;
end;

Mvh
Hans-Henrik




david (12-04-2001)
Kommentar
Fra : david


Dato : 12-04-01 22:59

Det skal lige siges jeg bruger Delphi 3 og jeg kan ikke få understående kode
til at virke, blir ved med at sige "undeclared identifier -longword" til >
GetExitCodeProcess(ProcessInfo.hProcess, LongWord(Result));


--
Jonathan s
1.33 Tbird Overclok and cpuidmax program.
www.chiptek.org
www.tombstoneblues.com
"Hans-Henrik Nielsen" <hansi@mail1.stofanet.dk> wrote in message
news:9b55m4$kb2$1@sunsite.dk...
> "david" <tabby@worldonline.dk> skrev i en meddelelse
> news:OeoB6.36306$o4.2694392@news010.worldonline.dk...
> > Åbne et program og vente på det blir lukket, hvordan gør jeg det???
>
> Prøv dette:
>
> function TForm1.WinExecAndWait32(FileName:String; Visibility : integer):
> integer;
> var
> zAppName:array[0..512] of char;
> zCurDir:array[0..255] of char;
> WorkDir:String;
> StartupInfo:TStartupInfo;
> ProcessInfo:TProcessInformation;
> begin
> StrPCopy(zAppName,FileName);
> GetDir(0,WorkDir);
> StrPCopy(zCurDir,WorkDir);
> FillChar(StartupInfo,Sizeof(StartupInfo),#0);
> StartupInfo.cb := Sizeof(StartupInfo);
>
> StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
> StartupInfo.wShowWindow := Visibility;
> if not CreateProcess(nil,
> zAppName, { pointer to command line string }
> nil, { pointer to process security
> attributes }
> nil, { pointer to thread security
attributes }
> false, { handle inheritance flag }
> CREATE_NEW_CONSOLE or { creation flags }
> NORMAL_PRIORITY_CLASS,
> nil, { pointer to new environment block }
> nil, { pointer to current directory name }
> StartupInfo, { pointer to STARTUPINFO }
> ProcessInfo) then Result := -1 { pointer to PROCESS_INF }
>
> else begin
> WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
> GetExitCodeProcess(ProcessInfo.hProcess, LongWord(Result));
> end;
> end;
>
> Mvh
> Hans-Henrik
>
>
>



david (12-04-2001)
Kommentar
Fra : david


Dato : 12-04-01 23:11

ok, jeg ændrede long til dword.

--
Jonathan s
1.33 Tbird Overclok and cpuidmax program.
www.chiptek.org
www.tombstoneblues.com
"david" <tabby@worldonline.dk> wrote in message
news:uApB6.36345$o4.2709195@news010.worldonline.dk...
> Det skal lige siges jeg bruger Delphi 3 og jeg kan ikke få understående
kode
> til at virke, blir ved med at sige "undeclared identifier -longword" til >
> GetExitCodeProcess(ProcessInfo.hProcess, LongWord(Result));
>
>
> --
> Jonathan s
> 1.33 Tbird Overclok and cpuidmax program.
> www.chiptek.org
> www.tombstoneblues.com
> "Hans-Henrik Nielsen" <hansi@mail1.stofanet.dk> wrote in message
> news:9b55m4$kb2$1@sunsite.dk...
> > "david" <tabby@worldonline.dk> skrev i en meddelelse
> > news:OeoB6.36306$o4.2694392@news010.worldonline.dk...
> > > Åbne et program og vente på det blir lukket, hvordan gør jeg det???
> >
> > Prøv dette:
> >
> > function TForm1.WinExecAndWait32(FileName:String; Visibility : integer):
> > integer;
> > var
> > zAppName:array[0..512] of char;
> > zCurDir:array[0..255] of char;
> > WorkDir:String;
> > StartupInfo:TStartupInfo;
> > ProcessInfo:TProcessInformation;
> > begin
> > StrPCopy(zAppName,FileName);
> > GetDir(0,WorkDir);
> > StrPCopy(zCurDir,WorkDir);
> > FillChar(StartupInfo,Sizeof(StartupInfo),#0);
> > StartupInfo.cb := Sizeof(StartupInfo);
> >
> > StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
> > StartupInfo.wShowWindow := Visibility;
> > if not CreateProcess(nil,
> > zAppName, { pointer to command line string }
> > nil, { pointer to process security
> > attributes }
> > nil, { pointer to thread security
> attributes }
> > false, { handle inheritance flag }
> > CREATE_NEW_CONSOLE or { creation flags }
> > NORMAL_PRIORITY_CLASS,
> > nil, { pointer to new environment block }
> > nil, { pointer to current directory name }
> > StartupInfo, { pointer to STARTUPINFO }
> > ProcessInfo) then Result := -1 { pointer to PROCESS_INF }
> >
> > else begin
> > WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
> > GetExitCodeProcess(ProcessInfo.hProcess, LongWord(Result));
> > end;
> > end;
> >
> > Mvh
> > Hans-Henrik
> >
> >
> >
>
>



david (12-04-2001)
Kommentar
Fra : david


Dato : 12-04-01 23:21

Hvordan gør jeg så, hvis mit program skal gøre noget når et bestemt program
starter og noget andet når det blir lukket ned.? Undskyld jeg spør så meget.

--
Jonathan s
1.33 Tbird Overclok and cpuidmax program.
www.chiptek.org
www.tombstoneblues.com
"Hans-Henrik Nielsen" <hansi@mail1.stofanet.dk> wrote in message
news:9b55m4$kb2$1@sunsite.dk...
> "david" <tabby@worldonline.dk> skrev i en meddelelse
> news:OeoB6.36306$o4.2694392@news010.worldonline.dk...
> > Åbne et program og vente på det blir lukket, hvordan gør jeg det???
>
> Prøv dette:
>
> function TForm1.WinExecAndWait32(FileName:String; Visibility : integer):
> integer;
> var
> zAppName:array[0..512] of char;
> zCurDir:array[0..255] of char;
> WorkDir:String;
> StartupInfo:TStartupInfo;
> ProcessInfo:TProcessInformation;
> begin
> StrPCopy(zAppName,FileName);
> GetDir(0,WorkDir);
> StrPCopy(zCurDir,WorkDir);
> FillChar(StartupInfo,Sizeof(StartupInfo),#0);
> StartupInfo.cb := Sizeof(StartupInfo);
>
> StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
> StartupInfo.wShowWindow := Visibility;
> if not CreateProcess(nil,
> zAppName, { pointer to command line string }
> nil, { pointer to process security
> attributes }
> nil, { pointer to thread security
attributes }
> false, { handle inheritance flag }
> CREATE_NEW_CONSOLE or { creation flags }
> NORMAL_PRIORITY_CLASS,
> nil, { pointer to new environment block }
> nil, { pointer to current directory name }
> StartupInfo, { pointer to STARTUPINFO }
> ProcessInfo) then Result := -1 { pointer to PROCESS_INF }
>
> else begin
> WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
> GetExitCodeProcess(ProcessInfo.hProcess, LongWord(Result));
> end;
> end;
>
> Mvh
> Hans-Henrik
>
>
>



Hans-Henrik Nielsen (13-04-2001)
Kommentar
Fra : Hans-Henrik Nielsen


Dato : 13-04-01 15:28

"david" <tabby@worldonline.dk> skrev i en meddelelse
news:wUpB6.36353$o4.2712379@news010.worldonline.dk...
> Hvordan gør jeg så, hvis mit program skal gøre noget når et bestemt
program
> starter og noget andet når det blir lukket ned.? Undskyld jeg spør så
meget.
Det er jo det gruppen er her for

Hvis du mener et specielt program, som f.eks. Notesblok, kan du prøve
nedenstående kode.
Husk iøvrigt at klippe i dine indlæg, og skrive under det citerede.

Mvh
Hans-Henrik
********************************************
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;
Memo1: TMemo;
procedure Timer1Timer(Sender: TObject);
procedure Startet(hwnd: HWND);
procedure Lukket(Tekst: String);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

{ Callback procedure til at finde alle åbne vinduer}
function EnumerateWindows(hWnd: HWND; lParam: LPARAM): BOOL; stdcall;

var
Form1: TForm1;
CheckHWND, KendteHWND: TStringList;

implementation
{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
var
i: integer;
begin
KendteHWND.Assign(CheckHWND);
CheckHWND.Clear;
EnumWindows(@EnumerateWindows,0);

For i:=KendteHWND.Count-1 downto 0 do
begin
if CheckHWND.IndexOf(KendteHWND.Strings[i])<0 then
Lukket(KendteHWND.Strings[i]);
end;
For i:=CheckHWND.Count-1 downto 0 do
begin
if KendteHWND.IndexOf(CheckHWND.Strings[i])<0 then
Startet(HWND(StrToInt(CheckHWND.Strings[i])));
end;
end;

function EnumerateWindows(hWnd: HWND; lParam: LPARAM): BOOL;
var
Class_Name: Array[0..255] of char;
begin
if (GetClassName(hwnd, Class_Name, 255) <> 0) and
(Class_Name = 'Notepad') then // Erstat evt. Notepad med en anden
klasse
CheckHWND.Add(IntToStr(hWnd));
Result:=TRUE;
end;

procedure TForm1.Startet(hwnd: HWND);
var
Tekst: Array[0..255] of char;
begin
GetWindowText(hwnd, Tekst, 255); // Find caption på vinduet
Memo1.Lines.Add(TimeToStr(now) + ' Startet: (HWND:'+IntToStr(HWND)+') '+
Tekst);
end;

procedure TForm1.Lukket(Tekst: string);
begin
Memo1.Lines.Add(TimeToStr(now)+ ' Lukket: (HWND:'+Tekst+')');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear;
Timer1.Interval:=1000; // check en gang pr. sek.
KendteHWND:=TStringList.Create;
CheckHWND:=TStringList.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
CheckHWND.Free;
KendteHWND.Free;
end;

end.



david (14-04-2001)
Kommentar
Fra : david


Dato : 14-04-01 16:29


"Hans-Henrik Nielsen" <hansi@mail1.stofanet.dk> wrote in message
news:9b72im$r5o$1@sunsite.dk...
> "david" <tabby@worldonline.dk> skrev i en meddelelse
> news:wUpB6.36353$o4.2712379@news010.worldonline.dk...
> > Hvordan gør jeg så, hvis mit program skal gøre noget når et bestemt
> program
> > starter og noget andet når det blir lukket ned.? Undskyld jeg spør så
> meget.
> Det er jo det gruppen er her for
>
> Hvis du mener et specielt program, som f.eks. Notesblok, kan du prøve
> nedenstående kode.
> Husk iøvrigt at klippe i dine indlæg, og skrive under det citerede.
>
> Mvh
> Hans-Henrik
> ********************************************
> unit Unit1;
> interface
> uses
> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
> StdCtrls, ExtCtrls;
>
> type
> TForm1 = class(TForm)
> Timer1: TTimer;
> Memo1: TMemo;
> procedure Timer1Timer(Sender: TObject);
> procedure Startet(hwnd: HWND);
> procedure Lukket(Tekst: String);
> procedure FormCreate(Sender: TObject);
> procedure FormDestroy(Sender: TObject);
> private
> { Private declarations }
> public
> { Public declarations }
> end;
>
> { Callback procedure til at finde alle åbne vinduer}
> function EnumerateWindows(hWnd: HWND; lParam: LPARAM): BOOL; stdcall;
>
> var
> Form1: TForm1;
> CheckHWND, KendteHWND: TStringList;
>
> implementation
> {$R *.DFM}
>
> procedure TForm1.Timer1Timer(Sender: TObject);
> var
> i: integer;
> begin
> KendteHWND.Assign(CheckHWND);
> CheckHWND.Clear;
> EnumWindows(@EnumerateWindows,0);
>
> For i:=KendteHWND.Count-1 downto 0 do
> begin
> if CheckHWND.IndexOf(KendteHWND.Strings[i])<0 then
> Lukket(KendteHWND.Strings[i]);
> end;
> For i:=CheckHWND.Count-1 downto 0 do
> begin
> if KendteHWND.IndexOf(CheckHWND.Strings[i])<0 then
> Startet(HWND(StrToInt(CheckHWND.Strings[i])));
> end;
> end;
>
> function EnumerateWindows(hWnd: HWND; lParam: LPARAM): BOOL;
> var
> Class_Name: Array[0..255] of char;
> begin
> if (GetClassName(hwnd, Class_Name, 255) <> 0) and
> (Class_Name = 'Notepad') then // Erstat evt. Notepad med en
anden
> klasse
> CheckHWND.Add(IntToStr(hWnd));
> Result:=TRUE;
> end;
>
> procedure TForm1.Startet(hwnd: HWND);
> var
> Tekst: Array[0..255] of char;
> begin
> GetWindowText(hwnd, Tekst, 255); // Find caption på vinduet
> Memo1.Lines.Add(TimeToStr(now) + ' Startet: (HWND:'+IntToStr(HWND)+') '+
> Tekst);
> end;
>
> procedure TForm1.Lukket(Tekst: string);
> begin
> Memo1.Lines.Add(TimeToStr(now)+ ' Lukket: (HWND:'+Tekst+')');
> end;
>
> procedure TForm1.FormCreate(Sender: TObject);
> begin
> Memo1.Clear;
> Timer1.Interval:=1000; // check en gang pr. sek.
> KendteHWND:=TStringList.Create;
> CheckHWND:=TStringList.Create;
> end;
>
> procedure TForm1.FormDestroy(Sender: TObject);
> begin
> CheckHWND.Free;
> KendteHWND.Free;
> end;
>
> end.
>
Jeg kan ikke bruge det ovenstående, jeg skal kunne nå at gøre nogle ting
inden programmet er startet.

--
Jonathan s
1.33 Tbird Overclok and cpuidmax program.
www.chiptek.org
www.tombstoneblues.com



Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408938
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste