|
여러 질문을 하나의 글로 쓰시면 질문하시는 입장에서는 편하시겠지만 답변하는 입장에서는 좀 그렇습니다.
코드를 올려주신 두번째 문제에 대해서만 답변을 하지요. 나머지는 따로 질문을 올려주시길...
리스트박스에 빈 공백이 많이 나오는 것은 윈도우의 타이틀(캡션)을 얻기 위해 GetWindowText를 호출하셨는데 실제로
윈도우의 타이틀이 비어있기 때문입니다.
보여주신 소스는 프로세스 리스트를 얻는 소스가 아니라 탑레벨 윈도우의 리스트를 얻는 소스입니다.
윈도우 리스트를 얻는 함수인 EnumWindows()를 호출한 것 자체가 그걸 말해주는 거죠.
그리고 탑레벨 윈도우들 중에는 타이틀 문자열이 비어 있는 숨겨진 윈도우들이 많습니다. 이 리스트는 스파이에서도 똑같이
나옵니다.
GetWindowThreadProcessId()를 호출하신 걸로 봐서는, 아마도 원래는 이 함수를 통해서 여러 윈도우들 중에서
프로세스가 중복되지 않게 리스트를 얻으려는 목적이 있었던 거 같은데, GetWindowThreadProcessId()를 호출한 후
중복을 제거하려는 어떤 추가적인 코드도 없이 그냥 단순히 hWnd에서 바로 타이틀만 얻어서 리스트박스에 추가했기
때문입니다.
그럼...
강성운 님이 쓰신 글 :
: C++빌더 시작한지 2틀된 초짜입니다^^ 좀 많은 도움 부탁드리구요~
: 저같은 초짜에게 도움좀 주실분은 메신저좀 알려주세요 ㅠ.ㅠ
: ##########################################################
: 1) C++ Builder에서 자체적으로 TCP/IP를 지원하나요?
: ##########################################################
: 2) 제가 컴퓨터의 프로세스 정보를 얻어왔는데요~
: ##########################################################
: Form3에 리스트를 열거든요~ 근데.. 리스트에 공백이 많네요..
: 공백없이 뜨게 할 방법은 없을까요??^^
: ------------------------------------------------------------------
: bool __stdcall EnumProc(HWND hWnd,/*LPARAM*/long/*lp*/) {
: unsigned long* pPid; //LPDWORD
: unsigned long result; //DWORD
: void *hg; //HGLOBAL
: unsigned long id;
:
: if(hWnd==NULL)
: return false;
:
: hg = GlobalAlloc(GMEM_SHARE,sizeof(unsigned long));
: pPid = (unsigned long *)GlobalLock(hg);
:
: result = GetWindowThreadProcessId(hWnd,pPid);
:
: if(result){
: char title[100];
: GetWindowText(hWnd,title,110);
: Form3->ListBox1->Items->Add((AnsiString)title);
: }
: else{
: GlobalUnlock(hg);
: GlobalFree(hg);
: return false;
: }
: GlobalUnlock(hg);
: GlobalFree(hg);
: return true;
: }
: -------------------- 클릭하였을때 ----------------------------------------
: void __fastcall TForm3::a2Click(TObject *Sender)
: {
: long lp=0;
: ListBox1->Enabled=true;
: ListBox1->Clear();
: EnumWindows((WNDENUMPROC)EnumProc,lp);
: }
: ------------------------------------------------------------------------
: ##########################################################
: 3. 클라이언트에서 소켓으로 접속을 하면 그 리스트 만큼의 크기로
: 폼 위에 상태창을 띄우려고 하거든요..
: 대략 인터페이스는 그냥 컴퓨터이름, 빨간신호, 파란신호 이게 끝임니다~
: 뽀인트는.. 접속된 수만큼 컴퓨터를 폼에 그려주는겁니다 ㅎㅎ
: 어떻게 하면 될까요..
: ##########################################################
: 4. 컴퓨터에서 스크린샷을 찍어서 Image에 출력은 확인했는데요
: 파일 송수신으로 다른 컴퓨터에 보내야 해서요..
: JPEG로 변형시키는 방법을 좀 알았으면 합니다.
: 어떻게 하면 될까요 ...
: ##########################################################
: 좀 많은 도움을 주시면 제가 학생이라 드릴건 없고.. 도토리라도 드릴게요 ㅠ.ㅠ.ㅠ
|