친구가 근무 중에 필요하다 하여 한 번 만들어 본 것.

MSN 2008 8.5.1302.1018 버전 기준

 

 

포인트는 'MSN 대화창의 ClassName 은 IMWindowClass 이고 Caption 에는 반드시 '- 대화하기' 라는 문구가 들어간다.' 라는 것이다.

윈도우를 다 뒤져서 MSN 대화창일 경우 투명도 조절폼을 붙여버리면 끝.

 

 

 

우선, Trackbar가 하나 박힌 AutoSize=True 인 폼을 하나 만든다.

이 폼을 나중에 MSN 대화창마다 생성하여 붙일 예정.

Trackbar 의 OnChange 에서 ParentWindow(=MSN 대화창)의 AlphaBlend 를 조절하면 됨.

// pHWND = MSN 대화창의 핸들

 

SetWindowLong(pHWND, GWL_EXSTYLE, GetWindowLong(pHWND, GWL_EXSTYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(pHWND,
0, Round((255*tbrAlpha.Position)/100), LWA_ALPHA);

뭐, 이런식으로...

 

 

 

 

 

 

 

 

투명도 조절창을 붙이기 위해 MSN 대화창을 찾아 뒤지는 건 EnumWindows 를 이용했다.

아래와 같은 함수를 만들어 놓고

 

function EnumWindowsProc(Wnd: HWND; lParam: DWORD): Boolean; stdcall;
var
  ClassName: String;
  Caption: String;
  CountfrmHide: Integer;

 

begin
  // String 배열 초기화
  SetLength(ClassName, MAX_PATH);
  SetLength(Caption, MAX_PATH);

 

  // ClassName, Caption 을 받아옴
  GetClassName(Wnd, PChar(ClassName), Length(ClassName));
  GetWindowText(Wnd, PChar(Caption), Length(Caption));

 

  // MSN 대화창일 경우 투명도 조절기를 붙임
  if (Pos('IMWindowClass', ClassName)>0) and (Pos('- 대화하기', Caption)>0) then begin
    CountfrmHide:=High(frmMain.frmSlide)+1;
    SetLength(frmMain.frmSlide, CountfrmHide+1);

    frmMain.frmSlide[CountfrmHide]:=TfrmHide.Create(Application);
    frmMain.frmSlide[CountfrmHide].pClassName:=ClassName;
    frmMain.frmSlide[CountfrmHide].pCaption:=Caption;
    frmMain.frmSlide[CountfrmHide].Show;

    SetParent(frmMain.frmSlide[CountfrmHide].Handle, Wnd);
  end;

 

  Result:=True;
end;

 

EnumWindows(@EnumWindowsProc,0);

하는 식으로 불러다 사용.

 

 

 

 

 

 

이 정도 힌트로 직접 만들어 보고 싶은 사람은 직접 만들어 보는 게 좋겠고,

귀찮은 사람은 첨부파일 다운로드 받아서 컴파일해서 사용하면 됨.

 

사용법

시작하면 트레이로 바로 들어감.

1. 트레이 아이콘에서 우클릭하면 나오는 메뉴 중 '조절기 달기'를 클릭하면 현재 떠 있는 모든 MSN 대화창의 우측 하단에 투명도 조절창이 달림. 샥샥 조절해서 쓰면 됨.

2. Ctrl + Shift 를 동시에 눌러도 같은 효과가 나게 만들어 놨음.

3. 트레이 메뉴든 Ctrl+Shift 를 하든 투명도 조절기를 달 때 마다 모든 창의 투명도는 100%로 됨.

 

 






Posted by bloodguy
,