Q&A

  • shellexecute 다시 실행할때..
안녕하세요..



제가 델파이로 입문한지 얼마되지 않아서 여러 황당한 질문을 하죠~?

그래두 답해주시는 모든 분께 감사드리며 한가지 더 여쭙겠습니다..



shellexecute로 화일을 하나 실행시켰습니다..

그런데 다시 shellexecute로 같은 화일을 실행시키면 당연히 또 하나가 실행됩니다..



이걸 막고 싶거든요..

shellexecute로 화일을 실행시키기전 그 화일이 실행되고 있는지 체크해서 실행되고 있으면 보여주기만 하고 실행되고 있지 않으면 실행시켜주고 싶거든요..



제가 넘 말이 많았나요~~?

암튼 이 부분에 대해서 좀 갈켜주세요..

그럼 수고하세요..

1  COMMENTS
  • Profile
    구창민 2000.01.06 22:56
    김지현 wrote:

    > 안녕하세요..

    >

    > 제가 델파이로 입문한지 얼마되지 않아서 여러 황당한 질문을 하죠~?

    > 그래두 답해주시는 모든 분께 감사드리며 한가지 더 여쭙겠습니다..

    >

    > 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;