SQL2010. 11. 3. 19:45
#. 원인
 - Connection 객체나 PreparedStatement 객체를 사용 한 후 close 를 안해주었기 때문에 발생했을 확률이 매우 높습니다. 

#. 해결
 - 사용한 객체를 꼭 Close하도록 소스를 변경해 보시기 바랍니다.
Posted by 쿵캉켕
기타2010. 10. 16. 18:19
박효신의 나만 바라봐 완전 레알임 ㅠ
Posted by 쿵캉켕
C#2010. 7. 28. 18:10

IMessageFilter를 이용한 키보드 입력을 메시지 후킹하는 방법 입니다.

#. ex.
//IMessageFilter를 상속받는 클래스를 생성합니다.
public class MessageFilter : System.Windows.Forms.IMessageFilter
    {
        public bool PreFilterMessage(ref Message m)
        {
            switch(m.Msg)
            {
                //windows message를 사용하고 싶지만 만들어져 있는게 없는 관계로 winuser.h파일을 검색하여 찾았습니다.
                //WM_KEYDOWN = 256 번 입니다.
                case 256: // WM_KEYDOWN
                    //이 메시지를 통해 각 키들을 눌러본 결과
                    MessageBox.Show(m.LParam.ToInt32().ToString());

                    if( m.LParam.ToInt32() == 3866625 ) // F1 Key           
                    {
                        MessageBox.Show("현재 클릭한 버튼은 F1 입니다.");
                        return false;
                    }
                    else if( m.LParam.ToInt32() == 1048577) //Q
                    {
                        MessageBox.Show("현재 클릭한 버튼은 Q 입니다.");
                        return true;
                    }
                    else if( m.LParam.ToInt32() == 196609)  //2
                    {
                        MessageBox.Show("현재 클릭한 버튼은 2 입니다.");
                        return true;
                    }
                    break;
            }
            return false;
        }
    }


//적용하고자 하는 App의 생성자에 아래 내용을 입력합니다.
MessageFilter msgFilter = new MessageFilter();
Application.AddMessageFilter(msgFilter); //만들어 놓은 MessageFilter는 반드시 AddMessageFilter 메소드를 통해 추가해야 합니다.

#. 특징.
 - m.Msg를 통해 이벤트의 종류를 알아보고 그것에 대한 상세처리를 하단에서 하는 구조입니다.
 - return 값은 true와 false가 있습니다.
  -> true의 경우 메시지 후킹 후 현재 포커스된 컨트롤에게 해당 메시지를 보내줍니다.
  -> false의 경우 메시지 후킹 후 현재 포커스된 컨트롤에게 해당 메시지를 보내지 않습니다.

출처: 데브피아

Posted by 쿵캉켕
C#2010. 7. 28. 17:51

#. 내용.
 - 외부 라이브러리를 사용하기 위한 선언입니다. Dll 파일을 C# 프로젝트가 인식할 수 있도록 해야 하며 대게 해당 파일을 C:/Program Files/ 내지는 프로젝트 내의 bin/debug 또는 bin/release에 복사해 두면 됩니다.

#. 사용 방법.
using System.Runtime.InteropServices; //선언

//사용하고자 하는 dll 파일을 첫번째 인수에 넣음.
[DllImport("user32.dll")]

//public 및 static의 정적 메소드로 선언해야 하고, extern 한정자는 메소드가 C# 코드 외부에서 구현됨을 나타 냅니다.
public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
.
.
.
//이런 식으로 사용하면 됩니다.
hHook = SetWindowsHookEx(WH_MOUSE, MouseHookProcedure, (IntPtr)0, AppDomain.GetCurrentThreadId());

#. 주의사항.
 - 인자값과 리턴 값의 자료형을 정확하게 맞춰줘야 합니다. 그렇지 않을 경우 데이터를 주고 받다가 데이터가 소실되는 경우가 발생합니다.

Posted by 쿵캉켕
DirectShow2010. 7. 27. 13:49
#. 내용.
 - IMediaControl 인터페이스는 필터 그래프를 통과하는 데이터 플로우를 제어하는 메서드를 제공한다. 여기에는, 그래프를 실행, 포즈, 정지하는 메서드가 포함된다. 필터 그래프 매니저는, 이 인터페이스를 처리 하고 있다. 필터 그래프 상태의 더 자세한 정보는, 「필터 그래프의 데이터 플로우」를 참조할것.
 - IMediaControl 는 그래프를 생성 하는 Automation 호환의 메서드도 제공한다. 이러한 메서드는, Microsoft® Visual Basic® 애플리케이션에서의 사용을 목적으로 한 것으로, 더 자세한 정보는, 「Visual Basic 에서의 DirectShow 의 사용법」을 참조할것.

#. 메소드.
  IMediaControl 인터페이스는 IDispatch로부터 상속받아 사용하는 메소드 외에 다음의 메소드를 제공합니다.
 - Run: 필터 그래프의 모든 필터를 실행한다.
 - Pause: 필터 그래프의 모든 필터를 포즈한다.
 - Stop: 필터 그래프의 모든 필터를 정지한다.
 - StopWhenReady: 필터가 데이터를 큐에 넣어지도록(듯이) 필터 그래프를 포즈로 해, 다음에 필터 그래프를 정지한다.
 - GetState: 필터 그래프 상태를 얻어온다.

출처: http://www.telnet.or.kr/directx/htm/imediacontrolinterface.htm
Posted by 쿵캉켕
DirectShow2010. 7. 27. 11:57

#. 내용.
 - 이 인터페이스는 애플리케이션으로부터 필터 그래프를 생성하는 메소드를 제공합니다. IgraphBuilder는 IFilterGraph를 상속 받기 때문에 IFilterGraph에서 제공하는 그래프에 필터추가, 2개의 핀 간의 접속등의 기능을 제공합니다. IGraphBuilder는 이 기능들 외에 부분적인 정보로부터 그래프를 생성하는 메소드를 제공합니다. 이 인터페이스는 필터간의 관계를 정의할 수 있는 인터페이스 입니다.

#. 메소드.
  IFilterGraph로부터 상속받은 메소드 외에 다음과 같은 메소드를 제공합니다.
 - Connect: 2개의 핀을 접속합니다. 직접 접속할 수 없는 경우는 변환필터를 개입시켜 접속합니다.
 - Render: 지정된 출력 핀에 필터 체인을 추가해 렌더링 합니다.
 - RenderFile: 지정된 파일을 렌더링 하는 필터 그래프를 생성합니다.
 - AddSourceFilter: 특정의 파일에 대응하는 필터 그래프에 소스 필터를 추가합니다.
 - SetLogFile: 로그 파일을 작성합니다. 이 파일에는 조작을 실행하려고 했을 때에 행해진 각 액션이 출력됩니다.
 - Abort: 현재의 태스크로부터 생기는 한 빨리 돌아오도록 그래프 빌더에 요구합니다.
 - ShouldOperationContinue: 현재의 조작을 계속해야할 것인가 제발을 조회합니다. 그래프로부터의 요구에 근거해 어떠한 조작을 실행하고 있는 필터에서는, 이 메서드를 호출해, 그 조작이 계속해야할 것인가 제발을 판단할 수 있습니다. 보통, 애플리케이션으로부터 이 메서드를 호출할 것은 없습니다.

출처: http://www.telnet.or.kr/directx/htm/directshow.htm

Posted by 쿵캉켕