안녕하세요..
제가 델파이로 입문한지 얼마되지 않아서 여러 황당한 질문을 하죠~?
그래두 답해주시는 모든 분께 감사드리며 한가지 더 여쭙겠습니다..
shellexecute로 화일을 하나 실행시켰습니다..
그런데 다시 shellexecute로 같은 화일을 실행시키면 당연히 또 하나가 실행됩니다..
이걸 막고 싶거든요..
shellexecute로 화일을 실행시키기전 그 화일이 실행되고 있는지 체크해서 실행되고 있으면 보여주기만 하고 실행되고 있지 않으면 실행시켜주고 싶거든요..
제가 넘 말이 많았나요~~?
암튼 이 부분에 대해서 좀 갈켜주세요..
그럼 수고하세요..
> 안녕하세요..
>
> 제가 델파이로 입문한지 얼마되지 않아서 여러 황당한 질문을 하죠~?
> 그래두 답해주시는 모든 분께 감사드리며 한가지 더 여쭙겠습니다..
>
> shellexecute로 화일을 하나 실행시켰습니다..
> 그런데 다시 shellexecute로 같은 화일을 실행시키면 당연히 또 하나가 실행됩니다..
>
> 이걸 막고 싶거든요..
> shellexecute로 화일을 실행시키기전 그 화일이 실행되고 있는지 체크해서 실행되고 있으면 보여주기만 하고 실행되고 있지 않으면 실행시켜주고 싶거든요..
>
> 제가 넘 말이 많았나요~~?
> 암튼 이 부분에 대해서 좀 갈켜주세요..
> 그럼 수고하세요..
안녕하세요~ 구창민입니다.
실행을 하기 전에 먼저 실행할 프로세서가 떠있는지
먼저 조사해서 만약 떠있다면 실행을 시키지 않으면
되겠네요.
아래 함수는 지금 떠있는 모든 프로세서를 ListBox1로
읽어 들이는 예제입니다.
ListBox에서 실행해야 할 화일이 이미 존재하는지는 구해내는
것은 지현님이 함수로 구현하세요.
그럼~ 즐거운 프로그래밍 되시길
// kernel32.dll을 사용하여 현재 떠있는 process를 읽어온다
procedure Process32List(Slist: TStrings);
var Process32: TProcessEntry32;
SHandle: THandle; // the handle of the Windows object
Next: BOOL;
begin
Process32.dwSize := SizeOf(TProcessEntry32);
SHandle := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if Process32First(SHandle, Process32) then
begin
Slist.AddObject(Process32.szExeFile, TObject(Process32.th32ProcessID));
repeat
Next := Process32Next(SHandle, Process32);
if Next then
Slist.AddObject(Process32.szExeFile, TObject(Process32.th32ProcessID));
until not Next;
end;
CloseHandle(SHandle);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items.Clear;
Process32List(ListBox1.Items);
end;