Q&A

  • 질문이 두가지있어요..
죄송해요 아래꺼 제목을 잘못 올렸습니다.

비밀번호를 잘못 입력했는지 수정이 안되서

다시 올릴께요..



[첫번째 질문]

exParam := 'File1.exe'+' '+'param1+' '+ 'param2

winexec(Pchar(exParam),SW_SHOWNORMAL)

형식으로 특정 실행화일(File1.exe)을 실행을 시켰습니다.

(이것은 지난주에 안치봉님이 가르쳐주신 방법입니다.

안치봉님께 감사드립니다.)

그런데 위의 화일(File1.exe)을 실행시키기전에

그 화일이 이미 실행이 되어 있으면 그 화일을 종료를 하고

아규먼트를 다른 것을 주고 다시 실행시키고 싶거든요.

어케 하면 되는지 도움 부탁드립니다.





[두번째 질문]



내 컴퓨터의 IP 주소를 가져오는 방법좀 알려주세요.

이전의 Q&A 를 뒤져보니까 몇가지 답변이 있긴 한데요,

서버에 접속한 상태에서의 IP주소를 얻는 방법같아서요.

그냥 실행상태에서 내 IP주소를 알고만 싶은데,

어떻게 안될까요?

2  COMMENTS
  • Profile
    구창민 2000.01.08 22:38
    이수 wrote:

    > 죄송해요 아래꺼 제목을 잘못 올렸습니다.

    > 비밀번호를 잘못 입력했는지 수정이 안되서

    > 다시 올릴께요..

    >

    > [첫번째 질문]

    > exParam := 'File1.exe'+' '+'param1+' '+ 'param2

    > winexec(Pchar(exParam),SW_SHOWNORMAL)

    > 형식으로 특정 실행화일(File1.exe)을 실행을 시켰습니다.

    > (이것은 지난주에 안치봉님이 가르쳐주신 방법입니다.

    > 안치봉님께 감사드립니다.)

    > 그런데 위의 화일(File1.exe)을 실행시키기전에

    > 그 화일이 이미 실행이 되어 있으면 그 화일을 종료를 하고

    > 아규먼트를 다른 것을 주고 다시 실행시키고 싶거든요.

    > 어케 하면 되는지 도움 부탁드립니다.



    이수님 안녕하세요~ 저 구창민입니다.

    오프때 옆자리에 앉았었는데 혹 기억할려나? ^^

    화일이 이미 실행되어 있는지 알아보려면 먼저

    현재 실행되어 있는 화일목록을 몽땅 구한다음에

    그중에서 있나 찾아보고 죽여버리면 되죠.

    아래에 예를 들죠.

    먼저 uses 에 TlHelp32추가 하시구요,

    ...

    ...

    implementation

    {$R *.DFM}



    //현재 실행되어 있는 프로세서 목록을 구합니다.

    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;

    //실행되어 있는 프로세서 목록을 ListBox1에 구해낸다.

    Process32List(ListBox1.Items);

    end;





    //그럼 실행된 프로그램중에 이수님이 죽이기 원하는 프로세서가

    //떠있는지는 ListBox1의 목록중에서 뒤져봐야 겠지요?

    //그 뒤지는 부분의 코딩은 이수님이 직접 구현하세요.

    //IndexOf함수를 쓰면 금방 찾을수 있을겁니다.





    //거기 까지 되면 이제 죽여야지요.

    //아래는 원하는 프로세서 죽이는 버튼이벤트

    procedure TForm1.Button2Click(Sender: TObject);

    var

    hProcess: THandle;

    ProcId: DWORD;

    TermSucc: BOOL;

    begin

    // 현재 실행중인 process를 kill

    if ListBox1.ItemIndex < 0 then System.Exit;

    ProcId := DWORD(ListBox1.Items.Objects[ListBox1.ItemIndex]);

    // 존재하는 process object의 handle을 return한다

    hProcess := OpenProcess(PROCESS_ALL_ACCESS, TRUE, ProcId);

    if hProcess = NULL then

    ShowMessage('OpenProcess error !');

    // 명시한 process를 강제 종료시킨다

    TermSucc := TerminateProcess(hProcess, 0);

    if TermSucc = FALSE then

    ShowMessage('TerminateProcess error !')

    else

    ShowMessage(Format('Process# %x terminated successfully !', [ProcId]));

    end;



    end.







    > [두번째 질문]

    >

    > 내 컴퓨터의 IP 주소를 가져오는 방법좀 알려주세요.

    > 이전의 Q&A 를 뒤져보니까 몇가지 답변이 있긴 한데요,

    > 서버에 접속한 상태에서의 IP주소를 얻는 방법같아서요.

    > 그냥 실행상태에서 내 IP주소를 알고만 싶은데,

    > 어떻게 안될까요?



    이건 uses 에 WinSock추가하시구요

    아래 코드를 사용하세요.



    procedure TForm1.Button1Click(Sender: TObject);

    var

    WSAData : TWSAData;

    HostName, Address ,Domain,ComName: string;

    HostEnt : PHostEnt;

    I : DWord;

    begin

    WSAStartup(2, WSAData);

    SetLength(HostName,255);

    getHostname(PChar(HostName),255);

    Label1.Caption := HostName;

    SetLength(HostName,strLen(PChar(HostName)));

    HostEnt := getHostbyName(PChar(HostName));

    with HostEnt^ do

    Address := Format('%d.%d.%d.%d',[Byte(h_addr^[0]),Byte(h_addr^[1]),

    Byte(h_addr^[2]), Byte(h_addr^[3])]);

    Label2.Caption := Address;

    WSACleanup;



    I :=100;

    SetLength(Comname,255);

    GetComputername(PChar(Comname),i);

    Label7.Caption := Comname;

    end;

    그럼, 항상 즐거운 프로그래밍 하세요~



  • Profile
    이수 2000.01.10 18:32
    구창민님 정말 감사합니다.

    제가 창민님을 기억 못할리 있나요?



    가르쳐 주신방법 정말 감사합니다.

    헤헤 TlHelp32 을 Uses에 추가해야 하는 건 근데 왜 안갈켜 주셨나요?

    그거 찾느라 좀 헤맸답니다.

    그래두요, 덕분에 제가 원하는 기능을 구현했답니다.



    다시곰 감사 드리구요,

    앞으로도 많은 도움 기대해도 될까요?



    즐거운 프로그래밍하도록 열심히 노력하겠습니다.