728_90


MS Word 가로 세로 페이지 추가 및 머리글 구역 추가 워드

MS Word의 편집용지를 세로로 사용하다가 가로페이지를 추가하거나 가로 페이지를 사용하다 세로 페이지를 넣을 때 또는 A4용지를 사용하다가 A3용지를 추가할 때 다음과 같이 할 수 있다.

메뉴 : "레이아웃" > "나누기" > "다음페이지부터"를 선택, 그리고 원하는 편집용지를 선택.


또한 편집용지를 수정할 경우 머리글 또는 바닥글도 변경이 필요하다.
이럴 경우 머리글 편집모드 메뉴에서 "디자인" > "이전 머리글에 연결"을 해제해 주고 머리글을 다시 지정할 수 있다.


다국어 지원을 위한 String Table 활용시 주의 사항 MFC 프로그래밍

중국어/영어/한국어 지원을 위하여 영문 String Table을 만들고 .rc파일을 수정하여 한국어와 중국어를 복사하여 만들었는데... 중국어만 문자열 Format 출력값이 %값을 포함하여 이상하게 나옴.


결국 알아낸 것이 %의 모양이 다름.
%만 다시 작성하여 해결.


VS 2017 Shortcut MFC 프로그래밍

vs 2017 자주쓰는 단축키 정리(for Markdown)

[VS 2017 Shortcut]
==============

## 주석
* **Ctrl+K, Ctrl+C** : 선택 범위의 주석화
* **Ctrl+K, Ctrl+U** : 선택 범위의 주석 해제

## 클립 보드 링
* **Ctrl+Shift+V** : 클립 보드 링을 사용하여 이전에 복사한 데이터를 순환하면서 붙이기

## 함수 정의로 이동
* **F12** : 선택한 함수의 정의로 이동

## 커서 위치 이력 기록
* **Ctrl + -(마이너스)** : 직전의 커서 위치 이동
* **Ctrl + Shift + -(마이너스)** : 다음 커서 위치 이동

## 소스/헤더 전환
* **Ctrl+K, Ctrl+O**

[VS 2017 Shortcut]

주석

  • Ctrl+K, Ctrl+C : 선택 범위의 주석화
  • Ctrl+K, Ctrl+U : 선택 범위의 주석 해제

클립 보드 링

  • Ctrl+Shift+V : 클립 보드 링을 사용하여 이전에 복사한 데이터를 순환하면서 붙이기

함수 정의로 이동

  • F12 : 선택한 함수의 정의로 이동

커서 위치 이력 기록

  • Ctrl + -(마이너스) : 직전의 커서 위치 이동
  • Ctrl + Shift + -(마이너스) : 다음 커서 위치 이동

소스/헤더 전환

  • Ctrl+K, Ctrl+O


안드로이드 태블릿 보조 모니터로 사용하기

1. 전제조건 : 무료 + 속도
   내용중 Installation Package를 다운받은 후 1번은 설치, 2번은 덮어쓰기
3. 3번항목의 안드로이드에 설치하는 AndroidVNC 는 가로모드만 지원되며 세로모드가 지원되는 패치버젼을 설치
   중간부분에 android.androidVNC-1.apk를 설치
4. 3번 항목의 나머지는 설치하지 않아도 동작함.
5. 끝.(나중에 시간이 되면 화면 캡쳐 버젼을 올리자)

Drag & Drop 동작 안됨. MFC 프로그래밍

File Drag & Drop 기능 구현을 하였으나 도무지 메시지가 들어오지 않는 현상 발생.


ChangeWindowMessageFilter 함수를 이용하여 해결하였으나, 
추후 윈도우 버젼에서는 지원하지 않는 관계로 ChangeWindowMessageFilterEx 함수를 사용.

[ Using the ChangeWindowMessageFilter function is not recommended, as it has process-wide scope. Instead, use the ChangeWindowMessageFilterEx function to control access to specific windows as needed. ChangeWindowMessageFilter may not be supported in future versions of Windows.]

BOOL CRedundantMonDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Release : 1.2.3.13 (2015년 8월 26일 수요일)
	DragAcceptFiles(true); // To Accept Dropped file Set this TRUE

	ChangeWindowMessageFilterEx(m_hWnd, WM_DROPFILES, MSGFLT_ALLOW, NULL);
	ChangeWindowMessageFilterEx(m_hWnd, WM_COPYDATA, MSGFLT_ALLOW, NULL);
	ChangeWindowMessageFilterEx(m_hWnd, 0x0049, MSGFLT_ALLOW, NULL);

//	ChangeWindowMessageFilter(WM_DROPFILES, MSGFLT_ADD);
//	ChangeWindowMessageFilter(WM_COPYDATA, MSGFLT_ADD);
//	ChangeWindowMessageFilter(0x0049, MSGFLT_ADD);


안드로이드 스튜디오 AVD 위치 변경 안드로이드 프로그래밍

1. AVD 에뮬레이터 윈도우 선택(마우스 클릭)
2. ALT + SPACE
3. 팝업메뉴에서 "이동" 선택
4. 키보드의 화살표 키를 이용하여 원하는 곳으로 이동(종료:엔터)
5. 제목표시줄이 보이면 마우스로 잡아서 이동(종료:클릭)


다른 프로그램의 컨트롤 제어 MFC 프로그래밍

 

FindWindow: 윈도우 찾기

HWND FindWindow(

   LPCTSTR lpClassName, //클래스명 (NULL 시 모든 클래스조사)

   LPCTSTR lpWindowName //윈도우 캡션명만 사용가능 (NULL 시모든 윈도우 캡션 검색)

);

 

FindWindowEx: 윈도우 자세히 찾기(부모 윈도우의 자식윈도우 찾기 기능 포함)

HWND FindWindowEx(

   HWND hwndParent,

   HWND hwndChildAfter,

   LPCTSTR lpszClass,

   LPCTSTR lpszWindow

);

hwndParenthwndChildAfter NULL 일 경우는 FindWindow와 동일

 

Parameters

hwndParent : 찾고자 한는 자식윈도우의 부모윈도우 핸들

hwndChildAfter : 찾기 시작할 자식윈도우 핸들 해당 자식윈도우 핸들의 다음 순번부터 찾기 시작함.

lpszClass : 클래스명.NULL 시 모든 클래스명 비교.

lpszWindow : 윈도우 제목(캡션). NULL 시 모든 윈도우명 비교.

 

클래스명 참고자료 : https://msdn.microsoft.com/en-us/library/ms633574(VS.85).aspx

Class

Description

ComboLBox

The class for the list box contained in a combo box.

DDEMLEvent

The class for Dynamic Data Exchange Management Library (DDEML) events.

Message

The class for a message-only window.

#32768

The class for a menu.

#32769

The class for the desktop window.

#32770

The class for a dialog box.

#32771

The class for the task switch window.

#32772

The class for icon titles.

 

기본 진행순서

1. FindWindow를 이용하여 다른 프로그램의 콘트롤 핸들을구한다.

2. 메시지를 전달한다.

 

예외사항

캡션바가 없는 대화상자이며, 메인 대화상자에서 Modal이 아닌 Modaless로 동적 생성된 대화상자이다.

SPY++을 통해 조사해 보니 캡션은 “”, 클래스명은 #32770. 또한전체 윈도우를 검색해 보니 동일한 조건의 윈도우가 여러 개 있음.

FindWindow를 사용할 수 없음.

여러가지 조건을 만들어서 구현(부모윈도우의 핸들은 구할 수 있으므로이를 이용)

 

LRESULTCBarcodeScannerDlg::OnBarCodeReadHandy(WPARAM wParam, LPARAM lParam)

{

        CStringstrSerial;

        strSerial.Format("%s",g_szHandyReceiveBuffer);

 

        CStringstrSerialText;

        strSerialText.Format("%s",strSerial);

 

        SetDlgItemText(IDC_EDIT_DATA, strSerialText );

 

        // 캡션명이없는 대화상자를 찾는다.

        HWNDhWndNext = ::FindWindowEx(NULL, NULL, "#32770", "");

 

        // 부모윈도우의 캡션을 이용하여 핸들을 구한다.

        // 만약부모 윈도우 캡션마저 없다면, 자식윈도우가 가지고 있는 컨트롤들의ID와 비교.

        HWNDhWndMain = ::FindWindow(NULL,"DCU Monitoring S/W");

 

        while(hWndNext )

        {

               //캡션명이 없는 대화상자의 부모를 찾는다.

               CWnd* pWnd = CWnd::FromHandle(hWndNext)->GetParent();

 

               //알고 있는 ID를 비교하여 일치하지 않을 경우는 계속해서 다음 윈도우를 찾음.

               //두 번째 인자 이후부터 찾도록 hWndNext를 다시 대입.

               if(pWnd->m_hWnd != hWndMain )

                       hWndNext= ::FindWindowEx(NULL, hWndNext, "#32770", "");

               else

                       break;

        }

 

        // 조건에맞는 윈도우가 없음.

        if(hWndNext == NULL )

               returnFALSE;

 

        // 찾았으므로자식 윈도우가 가지고 있는 콘트롤들의 핸들을 구한다.

        CWnd* pCtrlEdit = NULL;

        pCtrlEdit= CWnd::FromHandle(hWndNext)-> GetDlgItem( 0x0437 );

 

        CWnd* pCtrlBtn = NULL;

        pCtrlBtn= CWnd::FromHandle(hWndNext)-> GetDlgItem( 0x03FC );

 

 

 

        intnLen = strSerialText.GetLength();

        charstr[255] = {0,};

 

        for(int i = 0 ; i < nLen ; i++ )

               str[i]= strSerialText.GetAt(i);

 

        if(pCtrlEdit != NULL)

        {

               //에디트 상자에 원하는 데이터를 전달한다.

               ::SendMessage(pCtrlEdit->m_hWnd,WM_SETTEXT, nLen, (WPARAM)str);

               //버튼을 클릭하도록 한다.

               ::SendMessage(pCtrlBtn->m_hWnd,BM_CLICK, 0, 0);

        }

 

        returnTRUE;

}

 

 


리눅스의 스케줄 예약 및 실행 기능 리눅스

환경 : CentOS 6.5


목표

 - 일정주기마다지정된 폴더를 압축하여 백업 (Cron 데몬을 이용하여 백업)

 - 압축된파일은 외부 저장공간에 복사하여 2중 백업을 실행(추후 FTP를 이용하여 백업)


1. 개요

 

스케줄 예약 및 실행을 위한 숙지 내용

 

crond(cron demon)

 - 일정한주기를 가지고 특정 작업을 수행하는 데몬

 

crontab(cron table)

cron demon이 수행해야할 스케줄 정보가 입력된 테이블

 

/etc/rc.d/init.d/crond스크립트

crond데몬은/etc/rc.d/init.d/crond스크립트에 의해 시작, 종료, 재시작될 수 있습니다.

먼저 crond를 시작하기 위해서는“/etc/rc.d/init.d/crond start”라고 하시면 됩니다. 거의 대부분리눅스 시스템이 부팅이 되면서 ntsysv 설정항목에 의해 crond가시작되도록 설정되어 있으므로 crond는 부팅과 함께 자동 실행될 것입니다.

 

cron데몬의 시작, 종료, 재시작을 위한 스크립트.

cron데몬의 시작 : /etc/rc.d/init.d/crondstart

cron데몬의 종료 : /etc/rc.d/init.d/crondstop

cron데몬의 재시작 : /etc/rc.d/init.d/crondrestart

 

 

*Todo List

*. cron 데몬은 crontab에저장된 설정주기 및 내용을 수행

1) cron 데몬이 실행되도록 설정

2) crontab에 주기적으로 수행될 내용 및 주기를 설정


 

2. crond

 

*cron데몬 실행 여부 파악(ps활용)

 

[root@localhost ~]# ps -ef | grep crond

root      938     1  0 Mar12 ?        00:00:07 crond

root     3295  3261  0 01:55 pts/0    00:00:00 grep crond

 


3. crontab

 

명령어위치 : /usr/bin/crontab

 

사용형식

      crontab [ -u 사용자ID ] 파일

      crontab [ -u 사용자ID ] { -l | -r | -e }

 

crontab -l : 예약된 작업리스트 (list)

crontab -e : 예약된 작업 수정 (edit)

crontab -r : 예약된 작업 삭제 (remove)

 

예약된 작업리스트 보기

[root@redmine ~]# crontab -l

no crontab for root

(crontab이 설정되어 있지 않음.)

 

[root@redmine ~]# cat /etc/crontab

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

 

# For details see man 4 crontabs

 

# Example of job definition:

# .---------------- minute (0 - 59)

# | .------------- hour (0 - 23)

# | |  .---------- day of month (1 -31)

# | |  |  .------- month (1 - 12) OR jan,feb,mar,apr...

# | |  |  | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# | |  |  |  |

# * *  *  *  *user-name command to be executed

 

crontab수정

[root@redmine ~]# crontab -e

0 0 1,15 * * /backup.sh

( 매월 1일과 1500 00분에 /backup.sh 실행 )

 

 

backup.sh만들기

 -backup.sh은 지정된 폴더를 현재시스템의 시간정보를 이용(date 명령)하여 압축화일명을 만들어 압축(zip 명령)하는 명령.

 - svn 및 redmine을 주기적으로 백업

 - redmine의 경우는 첨부파일을 별도로 백업

 

zip -r /root/backup/$(date '+%Y%m%d%H%M`)/testdir/


mysqldump -uroot -psm3936 redmine_db >/home/backup/redmine/db/redmine_db_$(date '+%Y%m%d').sql


zip -r /home/backup/redmine/db/$(date '+%Y%m%d')/opt/redmine/files/


mkdir /home/backup/svn/$(date '+%Y%m%d')


svnadmin dump /opt/repositories/svn/HW >/home/backup/svn/$(date '+%Y%m%d')/HW_dump_$(date '+%Y%m%d')


svnadmin dump /opt/repositories/svn/Documents >/home/backup/svn/$(date '+%Y%m%d')/Documents_dump_$(date '+%Y%m%d')


svnadmin dump /opt/repositories/svn/FW > /home/backup/svn/$(date '+%Y%m%d')/FW_dump_$(date '+%Y%m%d')


svnadmin dump /opt/repositories/svn/Projects >/home/backup/svn/$(date '+%Y%m%d')/Projects_dump_$(date '+%Y%m%d')


svnadmin dump /opt/repositories/svn/RND >/home/backup/svn/$(date '+%Y%m%d')/RND_dump_$(date '+%Y%m%d')


svnadmin dump /opt/repositories/svn/SW >/home/backup/svn/$(date '+%Y%m%d')/SW_dump_$(date '+%Y%m%d')


svnadmin dump /opt/repositories/svn/Reference >/home/backup/svn/$(date '+%Y%m%d')/Reference_dump_$(date '+%Y%m%d'

 

실행시 Permission denied 발생

chmod 711 /backup.sh

(권한 부여)


 

4. crontab 예제 (다른 웹자료)

 

 # 매일 00 05분에 특정작업을 하는 경우

 5 0* * * $HOME/bin/daily.job >>$HOME/tmp/out 2>&1

 

 # 매달 1일 오후 2 15분에

 15 14 1 * * $HOME/bin/monthly

 

 # 월요일부터금요일 까지 매일 오후 10시에.

 0 22 * * 1-5 mail -s "It's 10pm"joe%Joe,%%Where are your kids?%

 

 # 일정시간에화면에 표시

 23 0-23/2 * * * echo "이것은 매일 0, 2, 4, ... 23분에 보여집니다."

 

# 일정시간에 화면에 표시

 5 4 * * 0 echo "이것은 매 일요일 오전 4 5분에 보여집니다."

 

# 매시간 5분이 아닌매 5분마다 실행되게 설정하시려면

*/5 01 * * 1,2 /backup.sh 와 같이 입력합니다.

 


아웃룩 캘린더와 구글 캘린더 동기화 유용한 무료 공개 프로그램

회사에서 아웃룩 이메일을 주로 사용하다보니 일정관리나 할일 등도 아웃룩을 사용하고 있다.
이와 더불어 휴대용 기기들도 많이 사용되고 상호 동기화를 통해 불편함 없이 사용하다가...
2014년도 하반기 부터 Google Apps Sync for Microsoft Outlook 동기화 지원이 되지 않아서 그동안 잘 사용하고 있던 아웃룩과 구글의 캘린더 동기화를 사용하지 못하게 되었다.

결국 찾아낸 것이 GO Contact Sync Mod

GO Contact Sync Mod synchronizes your Microsoft Outlook contacts with your Google Mail address book, including pictures, categories and notes. Since version 3.5.6 it also syncs your Outlook Notes on demand to Google Drive. Since version 3.7.0 it also syncs your Outlook Calendar Appointments on demand to Google Calendar. This Mod fork adds many enhancements and bug fixes to the obviously dead project 'Go Contact Sync'.


프로그램 설정에 구글 계정 정보만 입력하면 OK !!!

아직까지 쓸만함.


Redmine https:// Prefix 설정하기

Bitnami Redmine을 설치완료 하였으나, 내용 입력후 저장만 시키면 사이트에 연결할 수 없습니다 라는 표시가 계속뜬다.
해당 원인은 저장후 갱신시 https://가 주소에서 사라지기 때문이며 이를 해결하기 위해서는 별도로 설정치를 변경해 주어야 한다.

저장 및 갱신 이후에 https:// 헤더가 사라지므로 이를 해결하기 위하여 httpd-prefix.confRequestHeader set X_FORWARDED_PROTO 'https'를 추가함.

수정파일 : / 설치 Directory /apps/redmine/conf/httpd-prefix.conf

수정내용 : 아래 내용을 찾아서 굵은 글씨 추가(https를 헤더에 추가하도록 설정)

<Proxy balancer://redminecluster
RequestHeader set X_FORWARDED_PROTO 'https'
BalancerMember http://127.0.0.1:3001/redmine
BalancerMember http://127.0.0.1:3002/redmine
</Proxy>

1 2 3