Q&A

  • 넷스케이프의 클래스명은??
IEhwnd := FindWindow('Netscape', nil);



if IEhwnd > 0 then begin

SendMessage(IEhwnd , WM_syscommand, SC_CLOSE, 0);

Application.ProcessMessages;

end;

넷스케이프가 열려 있으면 종료시키려 하는데 위의 소스에서

클래스명이 안 맞는 것 같은데

API함수 중에서 클래스명을 찾아주는 함수가 있던데

그 함수를 사용하려면 핸들을 알아야 하고 핸들을 찾으려면

클래스 이름을 알아야 하고.. 으으

하여튼 넷스케이프를 종료시키려면 어떻게 하는지요?

그리고 클래스 이름은 어떻게 알아냅니까?

초보의 질문이었습니다.

4  COMMENTS
  • Profile
    클라라 2000.02.24 10:28
    델초 wrote:

    > IEhwnd := FindWindow('Netscape', nil);

    >

    > if IEhwnd > 0 then begin

    > SendMessage(IEhwnd , WM_syscommand, SC_CLOSE, 0);

    > Application.ProcessMessages;

    > end;

    > 넷스케이프가 열려 있으면 종료시키려 하는데 위의 소스에서

    > 클래스명이 안 맞는 것 같은데

    > API함수 중에서 클래스명을 찾아주는 함수가 있던데

    > 그 함수를 사용하려면 핸들을 알아야 하고 핸들을 찾으려면

    > 클래스 이름을 알아야 하고.. 으으

    > 하여튼 넷스케이프를 종료시키려면 어떻게 하는지요?

    > 그리고 클래스 이름은 어떻게 알아냅니까?

    > 초보의 질문이었습니다.





    procedure TForm1.Button2Click(Sender: TObject);

    var IEhwnd:HWND;

    ttt:array[0..29]of char;

    xxx:integer;

    begin

    IEhwnd := FindWindow('Netscape', nil);

    //넷스케이프의 핸들을 알아오겠죠..

    //FindWindow(nil,'Netscape'); 이렇게 하면 윈도 캡션이

    //'Netscape'인 핸들을 받아오죠..

    xxx:= getclassname(IEhwnd,ttt,30);

    //GetClassName은 클래스명을 받아오는 함수인데요...

    //리턴값은 Int 입니다...

    //ttt는 클래스명을 저장할 버퍼이구요...

    //뒤에 30은 버퍼사이즈입니다..

    showmessage(ttt);

    //이렇게하면 클래스명이 메세지박스로 나오겠죠..

    end;



    음...원하시는 답변인지 ...

    부산/경상의 클라라 엿슴다!!!

  • Profile
    델초 2000.02.24 20:53
    클라라 wrote:

    > procedure TForm1.Button2Click(Sender: TObject);

    > var IEhwnd:HWND;

    > ttt:array[0..29]of char;

    > xxx:integer;

    > begin

    > IEhwnd := FindWindow('Netscape', nil);

    > //넷스케이프의 핸들을 알아오겠죠..

    > //FindWindow(nil,'Netscape'); 이렇게 하면 윈도 캡션이

    > //'Netscape'인 핸들을 받아오죠..

    > xxx:= getclassname(IEhwnd,ttt,30);

    > //GetClassName은 클래스명을 받아오는 함수인데요...

    > //리턴값은 Int 입니다...

    > //ttt는 클래스명을 저장할 버퍼이구요...

    > //뒤에 30은 버퍼사이즈입니다..

    > showmessage(ttt);

    > //이렇게하면 클래스명이 메세지박스로 나오겠죠..

    > end;

    >

    > 음...원하시는 답변인지 ...

    > 부산/경상의 클라라 엿슴다!!!



    답변 감사하합니다만

    IEhwnd := FindWindow('Netscape', nil);

    이렇게 해서는 넷스케이프의 핸들을 받아오지 못하더군요.

    그래서 질문을 올렸던 건데..

    위의 클라라님께서 올려 주신 소스는 제대로 실행이 되지 않습니다.

    FindWindow에서 첫번째 인자에는 클래스명이 들어가는 걸로 아는데

    넷스케이프의 클래스명은 Netscape가 아닌것 같습니다.

    그래서 넷스케이프의 클래스명을 알 수 있는 법도 같이 질문했구요.

  • Profile
    클라라 2000.02.25 09:40
    델초 wrote:

    > 클라라 wrote:

    > > procedure TForm1.Button2Click(Sender: TObject);

    > > var IEhwnd:HWND;

    > > ttt:array[0..29]of char;

    > > xxx:integer;

    > > begin

    > > IEhwnd := FindWindow('Netscape', nil);

    > > //넷스케이프의 핸들을 알아오겠죠..

    > > //FindWindow(nil,'Netscape'); 이렇게 하면 윈도 캡션이

    > > //'Netscape'인 핸들을 받아오죠..

    > > xxx:= getclassname(IEhwnd,ttt,30);

    > > //GetClassName은 클래스명을 받아오는 함수인데요...

    > > //리턴값은 Int 입니다...

    > > //ttt는 클래스명을 저장할 버퍼이구요...

    > > //뒤에 30은 버퍼사이즈입니다..

    > > showmessage(ttt);

    > > //이렇게하면 클래스명이 메세지박스로 나오겠죠..

    > > end;

    > >

    > > 음...원하시는 답변인지 ...

    > > 부산/경상의 클라라 엿슴다!!!

    >

    > 답변 감사하합니다만

    > IEhwnd := FindWindow('Netscape', nil);

    > 이렇게 해서는 넷스케이프의 핸들을 받아오지 못하더군요.

    > 그래서 질문을 올렸던 건데..

    > 위의 클라라님께서 올려 주신 소스는 제대로 실행이 되지 않습니다.

    > FindWindow에서 첫번째 인자에는 클래스명이 들어가는 걸로 아는데

    > 넷스케이프의 클래스명은 Netscape가 아닌것 같습니다.

    > 그래서 넷스케이프의 클래스명을 알 수 있는 법도 같이 질문했구요.





    그래서제가 IEhwnd := FindWindow(nil,'Netscape');

    이렇게 하면 윈도우 캡션이 'Netscape'인것의 핸들이 넘어온다고 적어 놨는데요..

    안되면 '계산기'를 실행시켜서 FindWindow(nil,'계산기') 이렇게 한번 해보세요...

    계산기의 클래스명이 넘어 오겠죠



    제가 넷스케이프가 없어서 테스트를 못해봤는데요

    델파이에 있는 winsight32로 넷스케이프의 클래스명을 알아보시는게 빠르겠네요..



  • Profile
    델초 2000.02.25 11:40
    Nethwnd := FindWindow('DMGFrame',nil); //--Netscape ClassName

    if Nethwnd > 0 then begin

    SendMessage(Nethwnd , WM_syscommand, SC_CLOSE, 0);

    Application.ProcessMessages;

    end;

    알려주신데로 Winsight32로 넷스케이프의 클래스명을 알아내어

    테스트해 보니 분명히 핸들을 찾아내는데 SendMessage로 종료가 안되네요.

    자꾸 귀찮게 해서 죄송합니다.