Deadly Angel :: Eocs, Arian4u/2u, NotoriosBIG

블로그 옮깁니다.
블로그 옮깁니다. 산개한 블로그 집합;; 다시 정리... ↓

http://blog.naver.com/eocsdev


블로그 옮깁니다.
블로그 옮깁니다. 산개한 블로그 집합;; 다시 정리... ↑

by 데들리엔젤 | 2009/05/12 14:50 | 주절주절 | 트랙백 | 덧글(0)

Subversion과 Trac을 이용한 프로젝트 관리

( 기록중... : Last Updated 03.16 )


[ 다운로드 및 설치 ]

1. VisualSVN 설치

    다운로드 : http://www.visualsvn.com/visualsvn/

2. TortoiseSVN 설치 (언어팩 포함)

    다운로드 : http://sourceforge.net/project/showfiles.php?group_id=138498

3. Trac 설치

    다운로드 : http://www.visualsvn.com/server/trac/


[ 설정 ]

1. Repository 만들기

   /branch : 개발 버전
   /tag : 배포 버전
   /trunk : 코어 버전

2. Trac 설정

   1) 설치된 trac 파일을 VisualSVN 폴더로 카피

   2) 프로젝트의 trac 만들기

       - trac-admin [TRAC경로] initenv

         예) trac-admin D:\Trac\TestProject initenv

   3) VisualSVN과의 연동 설정

       - trac URI 인식
         . ~...~\VisualSVN Server\httpd-wrapper.bat 에 추가
           : set PYTHONHOME=%~dp0\Trac\python

       - trac 디렉토리 지정
         . ~...~\VisualSVN Server\conf\httpd-custom.conf 수정
           <Location /trac>
           SetHandler mod_python
           PythonInterpreter main_interpreter
           PythonHandler trac.web.modpython_frontend
           PythonOption TracEnvParentDir D:\Trac
           PythonOption TracUriRoot /trac

   4) 환경 설정

      - 관리자 권한 설정

         . trac-admin 디렉토리경로 permission add 계정또는그룹 TRAC_ADMIN

      - trac.ini 수정 : 생성한 프로젝트 trac 각종 설정

         . 로고 이미지 변경
           : D:\Trac\TestProject\htdocs 폴더에 이미지 파일을 카피한 후

           [header_logo]
           alt = ~~~ALT 텍스트
           height = -1
           link = ~~~홈디렉토리
           src = site/test_logo.jpg
           width = -1

         . 메뉴명 수정
           : 아래의 섹션 추가

           [mainnav]
           wiki.label = Home
           timeline.label = Log
           roadmap.label = Milestone
           browser.label = Source Browser
           tickets.label = View Issue <-- 메뉴 라벨 변경
           tickets.href = /report/1 <-- 링크 변경
           newticket.label = Write Issue
           search.label = Search

by 데들리엔젤 | 2009/03/16 13:35 | Dev. Management | 트랙백(1) | 덧글(0)

Full Path로 디렉토리 만들기

=================
CTRL+C, CTRL+V
=================
- 자신이 고민하여 만들어보았거나, 내용을 충분히 이해하고 사용해야겠습니다. ^^;
   . 내공부족, 절대허덕, 복사지존


void CTest...::Test...()
{
   CString strFullPath = _T("D:\\Test\\TestBub\\2009");
   if(MakeFullPathDirectory(strFullPath))
      // ... ... To Do ... ...
}

BOOL CTest...::MakeFullPathDirectory(CString strFullPath)
{
   int nLoop = -1;
   CString strMakeFolder = _T("");
   strMakeFolder = strFullPath;

   nLoop = strMakeFolder.Find("\\", 0);
   while((nLoop = strMakeFolder.Find("\\", nLoop + 1)) >= 0)
      ::CreateDirectory(strMakeFolder.Left(nLoop), NULL);

   ::CreateDirectory(strMakeFolder, NULL);

   return TRUE;
}

by 데들리엔젤 | 2009/03/13 15:09 | VC++ | 트랙백 | 덧글(0)

SPY를 통해 찾은 하위핸들에 메시지 던지기

=================
CTRL+C, CTRL+V
=================
- 자신이 고민하여 만들어보았거나, 내용을 충분히 이해하고 사용해야겠습니다. ^^;
   . 내공부족, 절대허덕, 복사지존

SPY로 본 그대로 걍 무식하게 찾아내려가서 핸들을 잡고 그 녀석한테 메시지를 던집니다.
ClassID로 찾거나, 윈도우타이틀로 찾거나 유일한 값으로 찾아 내려가면 됩니다.

void CCRINGDlg::OnButton2()
{
 HWND hWnd = NULL;
 // EOCS - 최상위 윈도우를 찾고,
 hWnd = ::FindWindow(NULL, _T("My Application"));
 if(hWnd)
 {
  // EOCS : SPY를 통해 보았던 하위 윈도우를 찾아 내려가 보세.
  hWnd = ::FindWindowEx(hWnd, NULL, NULL, _T("DUIBaseHWNDHost"));
  hWnd = ::FindWindowEx(hWnd, NULL, _T("DirectUIHWND"), NULL);
  hWnd = ::FindWindowEx(hWnd, NULL, _T("Shell Embedding"), NULL);
  hWnd = ::FindWindowEx(hWnd, NULL, _T("Shell DocObject View"), NULL);
  hWnd = ::FindWindowEx(hWnd, NULL, _T("Internet Explorer_Server"), NULL);
  hWnd = ::FindWindowEx(hWnd, NULL, _T("AfxOleControl80sud"), NULL);
  hWnd = ::FindWindowEx(hWnd, NULL, NULL, _T("EOCSTEST"));

  if(hWnd)
   ::PostMessage(hWnd, WM_U_APPSENDMSG, (WPARAM)1, (LPARAM)1);
 }
}


메시지를 받는 EOCSTEST에서 WM_U_APPSENDMSG 에 대한 ON_MESSAGE 처리하면 끝입니다.

by 데들리엔젤 | 2008/11/04 15:19 | VC++ | 트랙백 | 덧글(0)

Kill Process

=================
CTRL+C, CTRL+V
=================
- 자신이 고민하여 만들어보았거나, 내용을 충분히 이해하고 사용해야겠습니다. ^^;
   . 내공부족, 절대허덕, 복사지존

아래 함수 원형은 어딘가에서 보고 드르륵 긁었던거 같네요 ^^;

BOOL CMainFrame::KillProcess(CString sExeName)
{
 /************************************************************************/
 /* Eocs_2007_0823 : Kill Process by Exe Name
 /************************************************************************/
    sExeName.MakeUpper();

    HANDLE hSnapshot = CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS, 0 );

    if ( (int)hSnapshot != -1 )
    {
        PROCESSENTRY32 pe32 ;
        pe32.dwSize=sizeof(PROCESSENTRY32);
        BOOL bContinue ;
        CString strProcessName;

        if ( Process32First ( hSnapshot, &pe32 ) )
        {
            do
            {
                strProcessName = pe32.szExeFile; //strProcessName이 프로세스 이름;
                strProcessName.MakeUpper();
                if( ( strProcessName.Find(sExeName,0) != -1 ) )
                {
                    HANDLE hProcess = OpenProcess( PROCESS_ALL_ACCESS, 0, pe32.th32ProcessID );
                    if( hProcess )
                    {
                        DWORD       dwExitCode;
                        GetExitCodeProcess( hProcess, &dwExitCode);
                        TerminateProcess( hProcess, dwExitCode);
                        CloseHandle(hProcess);
                        CloseHandle( hSnapshot );

                        return TRUE;
                    }
                    return FALSE;
                }
                bContinue = Process32Next ( hSnapshot, &pe32 );
            } while ( bContinue );

        }
        CloseHandle( hSnapshot );

    }
    return FALSE;
}

by 데들리엔젤 | 2008/11/04 15:08 | VC++ | 트랙백 | 덧글(0)

◀ 이전 페이지다음 페이지 ▶