나는 Windows와 Mac OS X에서 영문판(미국판) 불여우 버전 2.0.0.3을 쓴다. 따라서 한글판 불여우에서는 이 글의 내용이 적용될 지 정확히 알지 못한다.

불여우의 주소 표시줄 옆에 있는 검색 칸을 검색 플러그인이라고 하는데, 영문판 불여우는 기본 검색 플러그인이 구글로 지정되어 있다.

여기서 가령 '이명박'이라는 키워드로 검색을 하면 검색 상단에 구글 뉴스 검색 결과가 아래 그림처럼 나타나게 된다.
구글 검색 상단 뉴스 검색 결과

<그림1>


여기서 제일 위에 있는 '이명박에 대한 뉴스 검색결과'라는 링크를 누르면 아래와 같이 완전히 깨진 결과를 볼 수 있다.
뉴스 검색결과 링크를 누른 화면

<그림1>의 화면의 주소는 이렇다.
http://www.google.com/search?q=%EC%9D%B4%EB%AA%85%EB%B0%95&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a

이 주소의 마지막 부분 "&client=firefox-a"를 뗀 주소로 이동하여 다시 '이명박에 대한 뉴스 검색결과'라는 링크를 누르면 이번에는 제대로 뉴스 검색 결과가 뜨는 것을 확인할 수 있다.

방금 삭제한 마지막 client라는 파라미터는 사용자의 검색 클라이언트가 불여우라는 것을 구글에 알려주어, 검색 결과에 같이 나타난 광고를 클릭하였을 경우 그 광고 수익의 일정 부분을 모질라 재단에 보내주기 위한 목적으로 사용된다고 한다.

나도 불여우를 아끼는 사용자로서 모질라 재단의 수익에 보탬을 주고 싶지만 검색 결과를 제대로 사용할 수 없는데 그게 다 무슨 소용인가.

그러면 이제 불여우의 구글 검색 플러그인을 고쳐서 client라는 파라미터를 아예 지워버리도록 하자.

Windows에서는 기본 설정대로 설치하였다면
C:\Program Files\Mozilla Firefox\searchplugins\google.xml
이라는 파일을 수정하면 된다.

Mac OS X에서는 응용 프로그램 폴더에서 Firefox라는 아이콘을 찾아서 마우스 오른쪽 클릭(혹은 Ctrl 클릭)하면 뜨는 메뉴에서 "패키지 내용 보기"를 한 후,
Contents/MacOS/searchplugins/google.xml
이라는 파일을 수정한다.

위에서 말한 xml 파일을 열어서 파일 제일 끝부분으로 가서 client 라는 파라미터를 더해주는 부분을 아래와 같이 주석처리 한다.
  <!--
  <MozParam name="client" condition="defaultEngine" trueValue="firefox-a" falseValue="firefox"/>
  -->

수정 후 불여우를 종료했다가 다시 시작하면 이제 깨지지 않는 구글 뉴스 검색 결과를 사용할 수 있다.
  1. yy 2007/05/31 00:00 답글수정삭제

    헛 이런 거였군;;

  2. U.Seung 2007/05/31 08:50 답글수정삭제

    모질라 재단에 수익이 감소할까요? ㅎ
    이정도 쿼리 감소는 껌값 차이도 안날 것 같긴 한뎅 ㅋㅋ

트랙백 주소 :: http://wafe.kr/7/trackback/
옵션
댓글 달기
SendMessage 함수는 지정된 윈도우로 메시지를 보내고, 메시지가 처리될 때까지 기다렸다가 메시지 핸들러가 반환한 값을 받아서 반환해주는 함수이다.

MFC에서는 OCX를 생성한 쓰레드가 아닌 다른 쓰레드에서는 OCX 이벤트를 발생시키는 FireXXX 함수를 호출할 수 없다. 따라서 OCX 안에서 작업 쓰레드를 따로 만들어서 작업하는 경우, 작업중에 OCX의 이벤트를 발생시키려면 OCX를 만든 쓰레드로 전환(컨텍스트 스위치)해야 하는데, 이 때 SendMessage 함수를 쓸 수 있다.

현재 쓰레드에서 만들지 않은 윈도우 핸들을 넣어서 SendMessage 함수를 호출하면, 현재 쓰레드는 block되고 그 윈도우를 만든 쓰레드로 작업이 전환된 후 이벤트 핸들러가 호출된다. 이벤트 핸들러가 결과를 반환하면 다시 SendMessage 함수를 호출한 쓰레드로 작업이 전환된다.

확인하기 위한 간단한 테스트 프로그램을 만들어봤다.

// 작업 쓰레드 본체
UINT ThreadFunc(LPVOID pParam)
{
       HWND *wnd = ((HWND *)pParam);
       TRACE(_T("thread id: %d -- sending message\n"), GetCurrentThreadId());
       int ret = SendMessage(*wnd, WM_USER + 10, NULL, NULL );

       TRACE(_T("thread id: %d -- "), GetCurrentThreadId());
       TRACE(_T( "SendMessageResult: %d\n"), ret);

       delete wnd;
       return 0;
}

void CThreadSendMessageTestDlg::OnBnClickedButton1()
{
       TRACE(_T("thread id: %d -- "), GetCurrentThreadId());
       TRACE(_T("begin new thread\n"));

       // 작업 쓰레드를 만들어서 현재 윈도우의 핸들을 전해줌.
       HWND *wnd = new  HWND;
       *wnd = this->GetSafeHwnd();
       AfxBeginThread(ThreadFunc, (LPVOID)(wnd));
}

LRESULT CThreadSendMessageTestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
       if (message == WM_USER + 10)
       {
               TRACE(_T("thread id: %d -- "), GetCurrentThreadId());
               TRACE(_T("got WM_USER + 10\n"));
               return -10;
       }

       return CDialog::WindowProc(message, wParam, lParam);
}


실행하면 이런 디버그 메시지가 나온다.
thread id: 204 -- begin new thread
thread id: 3692 -- sending message
thread id: 204 -- got WM_USER + 10
thread id: 3692 -- SendMessageResult: -10

쓰레드 아이디는 실행할 때마다 바뀐다.
트랙백 주소 :: http://wafe.kr/6/trackback/
옵션
댓글 달기