2010년 1월 4일 월요일

스팸퇴치 우회시키기

어렵다고 생각하시겠지만.

 

php mail 함수로.

보내는 메일과 받는 메일만 같게 해주세요. 서버는 안전한 곳에 지정해놓고. 서버 감지한다면 꺼버리면 되고.

2009년 12월 26일 토요일

Aero를 이용한 투명 창 - DwmExtendFrameIntoClientArea()

이 글은 진모씨(필자)가 여러 자료들을 재구성하여 직접 작성한 글로 주소는 아래와 같습니다.

http://zplog.textcube.com/3

인용 글들

http://msdn.microsoft.com/ko-kr/magazine/cc163435.aspx

http://msdn.microsoft.com/ko-kr/library/aa969512(en-us,VS.85).aspx

http://msdn.microsoft.com/ko-kr/library/bb773244(en-us,VS.85).aspx

 

DwmExtendFrameIntoClientArea는 Vista에서 새롭게 지원하기 시작한 DWM의 새로운 API입니다.

DWM에 관한 정의는 아래와 같습니다.

Extends the window frame behind the client area.

윈도우 창틀을 클라이언트 창 뒷쪽까지 확장한다.

 

DWM은 Aero 기능이 활성화되어있지 않으면 사용이 불가능하므로 아래의 API를 먼저 사용해야 합니다.

DwmIsCompositionEnabled()

이 함수 외 다른 API를 선언하기 위해서는 dwmapi.h가 필요합니다.

이 헤더는 C#, C++에서만 이용할 수 있으므로 VB에서는 따로 선언해야 합니다.

각각 언어에 필요한 선언문은 아래와 같습니다.

C#, C#.NET,C++

 VB6

Private Declare Function DwmExtendFrameIntoClientArea Lib "dwmapi.dll" (ByVal hWnd As Long, margin As MARGINS) As Long

VB.NET

<DllImport("dwmapi.dll")> _
Public Shared Function DwmExtendFrameIntoClientArea(ByVal hWnd As IntPtr, ByRef pMarInset As Margin) As Integer
End Function

이 함수는 창의 핸들, 즉 hWnd라는 값을 사용합니다. 그리고, MARGINS라는 변수가 있습니다.

그러나 이 API를 사용하기 위해서는 하나의 Type0이 더 필요합니다. 그 타입의 이름은 MARGINS인데요, 이에 관한 설명은 http://msdn.microsoft.com/ko-kr/library/bb773244(en-us,VS.85).aspx의 Margin Structure이라는 글에 잘 나와있습니다.

 

MARGINS의 정의는 아래와 같습니다.

Returned by the GetThemeMargins function to define the margins of windows that have visual styles applied.

GetThemeMargins 함수의 반환값으로 사용되며, 시각 효과가 적용될 창의 테두리 크기를 나타낸다.

GetThemeMargins에 대해서는 다음 글에 소개해드립니다.

MARGIN의 구조는 아래와 같습니다.

cxLeftWidth
Width of the left border that retains its size.
왼쪽 테두리의 두께
cxRightWidth
Width of the right border that retains its size.
오른쪽 테두리의 두께
cyTopHeight
Width of the right border that retains its size.
위쪽 테두리의 두께
cyBottomHeight
Height of the bottom border that retains its size.
아래쪽 테두리의 두께

MARGINS는 uxtheme.h 파일에 들어있으며, Windows XP부터 사용 가능한 설정입니다.

 

MARGINS를 선언하기 위해서는 아래의 코드를 사용해야 합니다.

C#

[StructLayout(LayoutKind.Sequential)]
public struct MARGINS
{
    public int cxLeftWidth;      // width of left border that retains its size
    public int cxRightWidth; // width of right border that retains its size public int cyTopHeight;      // height of top border that retains its size
    public int cyBottomHeight;   // height of bottom border that retains its size
};

VB6:

Type MARGINS
   cxLeftWidth As Long
    cxRightWidth As Long
    cyTopHeight As Long
    cyBottomHeight As Long
End Type

C# 2008

//http://blog.naver.com/kanghuny222?Redirect=Log&logNo=70074822100

        struct Margins
        {
            public Margins(Thickness t)
            {
                Left = (int)t.Left;
                Right = (int)t.Right;
                Top = (int)t.Top;
                Bottom = (int)t.Bottom;
            }

            public int Left;
            public int Right;
            public int Top;
            public int Bottom;
        }

이제 MARGINS라는 변수를 선언한 뒤 API를 사용하기 위해서는 창의 배경색을 바꿔주야 합니다.

흰 색과 몇몇의 밝은 색들은 작동을 안했는데, 그 색의 목록은 직접 테스트해봐야 될 듯 합니다.

그러나 분명한 점은, 창의 색조가 배경색과 같다는 점이었습니다.

 

C#에서 이 API를 사용하는 방법은 아래와 같습니다.

HRESULT ExtendIntoClientBottom(HWND hwnd)
{
   //Set margins, extend bottom
   MARGINS margins = {왼쪽 테두리,오른쪽 테두리,위쪽 테두리,아래쪽 테두리};
   HRESULT hr = S_OK;

   //extend frame on bottom of client area
   hr = DwmExtendFrameIntoClientArea(hwnd,&margins);
   if (SUCCEEDED(hr))
   {
      //do more things
   }
   return hr;
}

VB6:

'http://cafe.naver.com/myvb/25119

Private Sub Form_Load()
    Dim Margin As MARGINS
   
   Margin.cxLeftWidth = 왼쪽 테두리
   Margin.cxRightWidth = 오른쪽 테두리
   Margin.cyTopHeight = 위쪽 테두리
   Margin.cyBottomHeight = 아래쪽 테두리
   
    DwmExtendFrameIntoClientArea Me.hWnd, Margin
End Sub

C# NET

즐프로그의 시작

이 블로그는 진모씨의 IT블로그!의 주인인 진모씨가 창설한 블로그입니다.

앞으로 프로그래밍에 대한 내용을 다룰려고 합니다.

많은 기대 해주세요.

2009년 8월 2일 일요일

봉사캠프 다녀왔습니다.

에... 이 블로그에는 첫번째 글이네요.

 

그저께부터 오늘까지 봉사캠프 다녀왔습니다.

이름은 2009 TopsLove 청소년 환경 자원봉사 캠프인데요.

 

일정을 소개하자면...

 

1일째에는 그냥 약식으로 치어방류시키고 숙소에 돌아왔군요. 늦게 도착해서 간단한 교육만 받게 되었습니다.

 

 

2일째에는...

혹시 태안 천연사구라고 아세요? 신두리사구라고 우리 나라에서는 드문 '모래쌓인 언덕'이죠.

그런데 이 사구가외래식물때문에 숲으로 변하고 있답니다. 저라면 좋을텐데 천연기념물이 파괴된다는 이유로 태안 주민들은 싫어하더군요.

 

두번째로는 조별로 역할을 나눠서 마을분들에게 선물포장을 하고 배달을 해드렸습니다. 선물은 생필품이었는데요, 정확히는 스낵면, 옥시크린, 그리고 등등이었던 것 같습니다. 이덕분에 저는 어깨 빠질지경이 다 되고 보람은 그래도 철철!

 

세번째로는 환경골든벨을 실시했습니다. 예선은 OX퀴즈로 진행했는데 국번없이 128이 환경어쩌구 번호냐는 문제에서 친구덕분에 틀렸습니다...! 그래도 재미있었습니다. 1등이 상품인 레모나-C였나 하여튼 비타민 C를 멀리 뿌려서 한 개 득템하였습니다. 꽤나 시군요.

 

마지막 밤이라 하는 둘째날 밤에는... 보통 사람들은 뭘 할 것 같나요?

한번 맞춰보세요.

여백을 드립니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

바로...

 

밤새 놀았죠. 이 덕분에 집에 귀환하는 길에 3시간동안 퍼자게 되었군요.

 

드디어 마지막 날, 3일째에는 봉사활동은 안하고, 아침먹고 폐단식하고 점심먹고 버스에 올랐습니다. 대략 3시간 30분동안 온 것 같군요. 2시 30분쯤에 출발해서 6시에 도착했습니다.

 

 

2박3일동안 별로 삶에서 느끼지 못했던 인간성도 느낄 수 있었고, 재미있었고, 무엇보다 보람찼군요.

무사히 봉사캠프를 마쳐서 뿌듯합니다.

 

'봉사학습'이라는 개념에 맞게 정말 제 교육상으로도 많은 도움이 되었습니다. 2박3일동안 정말 봉삿일때문에 아무 생각도 할 새가 없었어요.

 

그런데 한가지 문제점은...

(제 살도 아니고 제 모기도 아니에요 - 네이버 사진 펌이니까...)

 

진모씨:아악 저리 가란 말이야 이 모기 당신놈아

모기:시끄러 이 당신놈아 그냥 피나 기부할 것이지 헌혈하라는데 왜 말이 이리 많아

 

 

...

 

갑자기 가려워지네요...

긁적긁적 긁작긁작

 

 

일정이 아주 빠듯하시지만 않다면 저는 지금 봉사활동을 떠나는 것을 강력히 추천합니다. 젊은 몸 집안에서만 썩히지 마시구요...