'[API & ASM]/▶API'에 해당되는 글 1건

  1. 2012.11.28 API 정리
2012.11.28 15:00 [API & ASM]/▶API

CreateThread


HANDLE CreateThread (
  LPSECURITY_ATTRIBUTES lpThreadAttributes, / /​​ 보안 설명자
  DWORD dwStackSize / / 초기 스택 크기
  LPTHREAD_START_ROUTINE lpStartAddress, / /​​ 스레드 기능
  LPVOID lpParameter, / /​​ 스레드의 인수
  DWORD dwCreationFlags, / /​​ 생성 옵션
  LPDWORD lpThreadId / / 스레드 식별자
);

매개 변수

lpThreadAttributes
1 개의 구조에 대한 포인터를 지정합니다. 이 구조에서 자식 프로세스가 얻은 핸들을 상속 할 수 있는지 여부를 지정합니다. 이 매개 변수 NULL을 지정하면 취득한 핸들을 상속 할 수 없습니다.

Windows NT/2000 : SECURITY_ATTRIBUTES 구조체의 lpSecurityDescriptor 멤버에서 새로운 스레드에 적용되는 보안 설명자를 설정합니다. 이 매개 변수 NULL을 지정하면 기본 보안 설명자를이 스레드에 적용됩니다.

dwStackSize
스택의 초기 커밋 크기를 바이트 단위로 지정합니다. 시스템은이 값을 페이지 크기의 배수 중 가장 가까운 값에 반올림합니다. 이 매개 변수는 0 또는 기본 커밋 크기보다 작은 값을 지정하면 호출 스레드의 커밋 크기보다 크기가 기본 크기로 할당됩니다. 자세한 내용은 MSDN 라이브러리의 ""을 참조하십시오.
lpStartAddress
LPTHREAD_START_ROUTINE 형 응용 프로그램 정의 함수에 대한 포인터를 지정합니다. 이 함수는 새로운 스레드에서 실행되는 것이며, 동시에 새로운 스레드의 시작 주소를 지정합니다. 이 스레드 함수에 대한 자세한 내용은 MSDN 라이브러리의 ThreadProc 를 참조하십시오.
lpParameter
스레드에 전달 1 개의 매개 변수의 값을 지정합니다.
dwCreationFlags
스레드 작성에 관한 제어 플래그를 지정합니다. CREATE_SUSPENDED 깃발을 지정하면 새 스레드가 중단 된 상태에서 만들어진, ResumeThread 함수를 호출 할 때까지 작동하지 않습니다. 이 매개 변수에 0을 지정하면, 생성과 동시에 새로운 스레드가 동작합니다. 현재 다른 값은 지원되지 않습니다.
lpThreadId
1 개의 변수에 대한 포인터를 지정합니다. 함수에서 제어가 반환되면이 변수에 스레드 식별자가 포함됩니다.

Windows NT/2000 : 이 매개 변수 NULL을 지정하면 스레드 식별자는 포함되지 않습니다.

Windows 95 / 98 : 이 매개 변수 NULL을 지정할 수 없습니다.

반환 값

함수가 성공하면 새로운 스레드의 핸들이 돌아갑니다.

함수가 실패하면 NULL을 반환합니다. 확장 오류 정보를 얻으려면 함수를 사용합니다.


SetThreadPriority


BOOL SetThreadPriority (
  HANDLE hThread, / /​​ 스레드의 핸들
  int nPriority / / 스레드의 상대적 우선 순위 값
);

매개 변수
hThread
상대적 우선 순위 값을 설정해야 스레드의 핸들을 지정합니다.

Windows NT/2000 : 이 핸들에 THREAD_SET_INFORMATION 권한을 할당 해 두지 않으면 안됩니다. 자세한 내용은 MSDN 라이브러리의 ""을 참조하십시오.

nPriority
스레드의 상대적 우선 순위 값을 지정합니다. 다음 값 중 하나를 지정합니다.

상대적 우선 순위 값의미
THREAD_PRIORITY_ABOVE_NORMAL스레드 표준 상대적 우선 순위 값보다 1 포인트 높은 상대 우선 순위 값을 지정합니다.
THREAD_PRIORITY_BELOW_NORMAL스레드 표준 상대적 우선 순위보다 1 점 낮은 상대적 우선 순위 값을 지정합니다.
THREAD_PRIORITY_HIGHEST스레드 표준 상대적 우선 순위보다 2 점 높은 상대 우선 순위 값을 지정합니다.
THREAD_PRIORITY_IDLE프로세스의 우선 순위 클래스가 IDLE_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, ABOVE_NORMAL_PRIORITY_CLASS, HIGH_PRIORITY_CLASS 중 하나 인 경우 기본 우선 순위 수준을 1로 지정합니다. 프로세스의 우선 순위 클래스가 REALTIME_PRIORITY_CLASS 인 경우 기본 우선 순위 레벨로 16입니다.
THREAD_PRIORITY_LOWEST스레드 표준 상대적 우선 순위보다 2 포인트 낮은 상대적 우선 순위 값을 지정합니다.
THREAD_PRIORITY_NORMAL스레드 표준 상대적 우선 순위 값을 지정합니다.
THREAD_PRIORITY_TIME_CRITICAL프로세스의 우선 순위 클래스가 IDLE_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, ABOVE_NORMAL_PRIORITY_CLASS, HIGH_PRIORITY_CLASS 중 하나 인 경우 기본 우선 순위 레벨로 15입니다. 프로세스의 우선 순위 클래스가 REALTIME_PRIORITY_CLASS 인 경우 기본 우선 순위 레벨로 31입니다.

Windows 2000 :이 매개 변수는 -7, -6, -5, -4, -3,3,4,5,6 중 하나를 지정할 수 있습니다. 자세한 내용은 MSDN 라이브러리의 ""을 참조하십시오.

반환 값

함수가 성공하면 0 이외의 값이 돌아갑니다.

함수가 실패하면 0을 반환합니다. 확장 오류 정보를 얻으려면 함수를 사용합니다.


GetThreadPriority

지정된 스레드의 상대적 우선 순위 값을 가져옵니다. 프로세스의 우선 순위 클래스와 스레드의 상대적 우선 순위 값은 각 스레드의 기본 우선 순위 수준을 결정합니다.

int GetThreadPriority (
  HANDLE hThread / / 스레드의 핸들
);

매개 변수

hThread
스레드의 핸들을 지정합니다.

Windows NT/2000 : 이 핸들에 THREAD_QUERY_INFORMATION 권한을 할당 해 두지 않으면 안됩니다. 자세한 내용은 MSDN 라이브러리의 ""을 참조하십시오.

반환 값

함수가 성공하면 지정한 스레드의 상대적 우선 순위 값이 돌아갑니다.

함수가 실패하면 THREAD_PRIORITY_ERROR_RETURN가 돌아갑니다. 확장 오류 정보를 얻으려면 함수를 사용합니다.

스레드의 상대적 우선 순위 값은 다음 값 중 하나입니다.


상대적 우선 순위 값의미
THREAD_PRIORITY_ABOVE_NORMAL스레드 표준 상대적 우선 순위 값보다 1 포인트 높은 상대 우선 순위 값입니다.
THREAD_PRIORITY_BELOW_NORMAL스레드 표준 상대적 우선 순위보다 1 점 낮은 상대적 우선 순위 값입니다.
THREAD_PRIORITY_HIGHEST스레드 표준 상대적 우선 순위보다 2 점 높은 상대 우선 순위 값입니다.
THREAD_PRIORITY_IDLE프로세스의 우선 순위 클래스가 IDLE_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, ABOVE_NORMAL_PRIORITY_CLASS, HIGH_PRIORITY_CLASS 중 하나 인 경우 기본 우선 순위 레벨이 1임을 나타냅니다. 프로세스의 우선 순위 클래스가 REALTIME_PRIORITY_CLASS 인 경우 기본 우선 순위 레벨이 16임을 나타냅니다.
THREAD_PRIORITY_LOWEST스레드 표준 상대적 우선 순위보다 2 포인트 낮은 상대적 우선 순위 값입니다.
THREAD_PRIORITY_NORMAL스레드 표준 상대적 우선 순위 값입니다.
THREAD_PRIORITY_TIME_CRITICAL프로세스의 우선 순위 클래스가 IDLE_PRIORITY_CLASS, BELOW_NORMAL_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS, ABOVE_NORMAL_PRIORITY_CLASS, HIGH_PRIORITY_CLASS 중 하나 인 경우 기본 우선 순위 레벨이 15임을 나타냅니다. 프로세스의 우선 순위 클래스가 REALTIME_PRIORITY_CLASS 인 경우 기본 우선 순위 레벨이 31임을 나타냅니다.


ResumeThread


스레드의 일시 중지 (중단) 카운트를 1 감소시킵니다. 중지 카운트가 0이되면, 스레드 실행이 재개됩니다.

DWORD ResumeThread (
  HANDLE hThread / / 스레드의 핸들
);

매개 변수

hThread
재개해야 스레드의 핸들을 지정합니다.

Windows NT/2000 : 이 핸들에 THREAD_SUSPEND_RESUME 권한을 할당 해 두지 않으면 안됩니다. 자세한 내용은 MSDN 라이브러리의 ""을 참조하십시오.

반환 값

함수가 성공하면이 함수를 호출하기 전에 일시 중지 카운트가 돌아갑니다.

함수가 실패하면 -1을 반환합니다. 확장 오류 정보를 얻으려면 함수를 사용합니다.


WaitForMultipleObjects


다음 중 하나가 성립하면 반환됩니다.

• 지정된 개체 중 하나 또는 모두가 신호를했다.

• 제한 시간이 경과했다.

경고 가능한 대기 상태에 들어가려면 WaitForMultipleObjectsEx 함수를 사용합니다.

DWORD WaitForMultipleObjects (
  DWORD nCount, / /​​ 배열의 핸들 수
  CONST HANDLE * lpHandles / / 객체 핸들의 배열
  BOOL fWaitAll / / 대기 옵션
  DWORD dwMilliseconds / / 타임 아웃 시간
);

매개 변수

nCount
lpHandles 매개 변수가 가리키는 배열에있는 개체 핸들 수를 지정합니다. 객체 핸들의 최대 수는 MAXIMUM_WAIT_OBJECTS입니다.
lpHandles
여러 개체 핸들로 구성된 하나의 배열에의 포인터를 지정합니다. 핸들을 지정할 수 개체의 유형은이 함수의 "주의"를 참조하십시오. 이 배열은 다른 유형의 오브젝트의 핸들을 저장할 수 있습니다. 그러나 동일한 핸들의 여러 사본을 저장 할 수 없습니다.

핸들 중 하나가 대기 상태이고이 때 핸들을 닫으면이 함수의 동작은 미정 도리입니다.

Windows NT/2000 : 이 핸들에 SYNCHRONIZE 액세스 권한을 할당 해 두지 않으면 안됩니다.

Windows 95 : DuplicateHandle 함수를 사용하여 임의의 핸들을 복제하면 대상의 핸들이 함수에서 사용할 수 없습니다.

fWaitAll
대기 유형을 지정합니다. TRUE를 지정하면 lpHandles 배열의 모든 객체가 신호 상태가되었을 때 제어가 돌아갑니다. FALSE를 지정하면 lpHandles 배열의 개체 중 하나가 신호 상태가되었을 때 제어가 돌아갑니다. 이 경우, 반환 값은 함수가 반환 상황을 가져왔다 (즉, 신호 상태가 된) 객체를 나타냅니다.
dwMilliseconds
제한 시간을 밀리 초 (ms) 단위로 지정합니다. 제한 시간이 경과하면 fWaitAll 매개 변수에서 지정한 조건이 충족되지 않더라도, 제어가 돌아갑니다. 0을 지정하면이 함수는 지정된 오브젝트의 상태를 확인하고 즉시 반환됩니다. INFINITE를 지정하면 조건이 충족 될 때까지 대기합니다.

반환 값

함수가 성공하면 함수가 반환 상황을 제공하는 이벤트를 나타내는 값을 반환합니다. 다음 값 중 하나입니다.

의미
WAIT_OBJECT_0 이상 (WAIT_OBJECT_0 + nCount - 1) 이하fWaitAll 가 TRUE의 경우, 지정된 모든 오브젝트가 시그널 상태가 된 것을 의미합니다.

fWaitAll 가 FALSE의 경우 lpHandles 매개 변수에서 (반환 값 - WAIT_OBJECT_0) 번째 개체가 대기 조건을 충족했음을 의미합니다. 이 함수를 호출하여 실행하는 동안 여러 객체가 신호를하면 그 개체 중 최소의 인덱스 번호를 반환합니다.

WAIT_ABANDONED_0 이상 (WAIT_ABANDONED_0 + nCount - 1 ) 이하fWaitAll 가 TRUE의 경우, 지정된 모든 오브젝트가 시그널 상태가 된 것을, 그리고 이러한 개체 중 적어도 하나는 포기 된 뮤텍스 객체 (스레드가 소유권을 가지고있었습니다 만, 그 스레드는 소유권을 해제하지 않고 종료했습니다) 이었음을 의미합니다.

fWaitAll 가 FALSE의 경우 lpHandles 매개 변수의 (반환 - WAIT_ABANDONED_0) 번째 개체가 대기 조건을 충족 한 포기 된 뮤텍스 개체 였음을 의미합니다.

WAIT_TIMEOUT제한 시간이 경과하고 fWaitAll 매개 변수로 지정된 조건이 충족되지 않은 것을 의미합니다.

함수가 실패하면 WAIT_FAILED이 돌아갑니다. 확장 오류 정보를 얻으려면 함수를 사용합니다.


CreateEvent

명명 된 또는 이름없는 이벤트 객체를 만들거나 엽니 다.

HANDLE CreateEvent (
  LPSECURITY_ATTRIBUTES lpEventAttributes / / 보안 설명자
  BOOL bManualReset / / 재설정 유형
  BOOL bInitialState / / 초기 상태
  LPCTSTR lpName / / 이벤트 오브젝트의 이름
);

매개 변수

lpEventAttributes
자식 프로세스가 얻은 핸들을 상속 할 수 있는지 여부를 결정하는 하나의 구조체에 대한 포인터를 지정합니다. NULL을 지정하면 자식 프로세스는 그 개체의 핸들을 상속 할 수 없습니다.

Windows NT/2000 : SECURITY_ATTRIBUTES 구조체의 lpSecurityDescriptor 멤버에서 새로운 이벤트의 보안 설명자를 설정합니다. NULL을 지정하면 기본 보안 설명자를 그 이벤트에 할당됩니다.

bManualReset
수동 리셋 개체를 만들거나, 자동 리셋 개체를 만드는 방법을 지정합니다. TRUE를 지정하면 수동 리셋 개체가 만들어집니다. FALSE를 지정하면 자동 리셋 개체가 만들어집니다. 수동 리셋 객체를 신호 상태로 설정하려면 ResetEvent 함수를 호출합니다. 자동 리셋 개체는 대기 스레드가 해제 된 시점에서 자동으로 비 신호 상태로 설정됩니다.
bInitialState
이벤트 객체의 초기 상태를 지정합니다. TRUE를 지정하면 시그널 상태로 설정됩니다. FALSE를 지정하면 신호 없음으로 설정됩니다.
lpName
이벤트 개체의 이름을 유지하고있는 NULL로 끝나는 문자열에 대한 포인터를 지정합니다. 이름의 최대 길이는 MAX_PATH 문자입니다. 이름을 비교할 때 대소 문자를 구분합니다.

lpName 파라미터로 지정한 이름이 기존 이벤트 객체의 이름과 일치하는 경우, CreateEvent 함수를 실행하려면 기존의 객체에 대한 EVENT_ALL_ACCESS 권한이 필요합니다. 이 경우 bManualReset 매개 변수와 bInitialState 매개 변수는 객체를 생성 한 프로세스가 이미 설정되어 있기 때문에 무시됩니다. 또한 lpEventAttributes 매개 변수가 NULL이 아닌 경우 자식 프로세스가 핸들을 상속 할 수 있는지 여부를 지정하는 것은 유효하지만, 보안 기술자의 멤버는 무시됩니다.

lpName 파라미터로 NULL을 지정하면 이름없는 이벤트 객체가 만들어집니다.

lpName 파라미터로 지정한 이름이 기존의 세마포어, 뮤텍스 대기 가능한 타이머 작업 파일 매핑 개체 중 하나의 이름과 일치하면이 함수는 실패하고 함수는 ERROR_INVALID_HANDLE을 반환합니다. 이 개체는 같은 네임 스페이스를 공유하고 있기 때문입니다.

Terminal Services : 글로벌 네임 스페이스 또는 세션 네임 스페이스에서 개체를 명시 적으로 작성하기 위해 "Global \ " 또는 "Local \ " 접두사를 붙일 수 있습니다. 이름의 나머지 부분은 백 슬래시 (\)를 제외한 모든 문자를 작성할 수 있습니다. 자세한 내용은 MSDN 라이브러리의 ""을 참조하십시오.

Windows 2000 : Terminal Services가 작동하지 않는 Windows 2000 시스템에서는 "Global \ " 및 "Local \ " 의 각 접두사는 무시됩니다. 이름의 나머지 부분은 백 슬래시 (\)를 제외한 모든 문자를 작성할 수 있습니다.

Windows NT 4.0 이전과 Windows 95 / 98 : 이름은 백 슬래시 (\)를 제외한 모든 문자를 작성할 수 있습니다.

반환 값

함수가 성공하면 이벤트 객체의 핸들이 돌아갑니다. 지정된 명명 된 이벤트 객체가 이미 존재하는 경우에도 그 개체의 핸들이 돌아갑니다 그 경우, 함수는 ERROR_ALREADY_EXISTS를 돌려줍니다.

함수가 실패하면 NULL을 반환합니다. 확장 오류 정보를 얻으려면, GetLastError 함수를 사용합니다.


CreateMutex

명명 된 또는 이름없는 뮤텍스 (mutually exclusive; 상호 배타적) 개체를 만들거나 엽니 다.

HANDLE CreateMutex (
  LPSECURITY_ATTRIBUTES lpMutexAttributes / / 보안 설명자
  BOOL bInitialOwner / / 첫 번째 소유자
  LPCTSTR lpName / / 오브젝트의 이름
);

매개 변수

lpMutexAttributes
자식 프로세스가 얻은 핸들을 상속 할 수 있는지 여부를 결정하는 하나의 구조체에 대한 포인터를 지정합니다. NULL을 지정하면 자식 프로세스는 핸들을 상속 할 수 없습니다.

Windows NT/2000 : SECURITY_ATTRIBUTES 구조체의 lpSecurityDescriptor 멤버에서 새로운 뮤텍스의 보안 설명자를 설정합니다. NULL을 지정하면 기본 보안 설명자를 뮤텍스에 할당됩니다.

bInitialOwner
뮤텍스 개​​체의 초기 소유자를 지정합니다. 이 매개 변수 TRUE를 지정하고 호출이 뮤텍스를 생성 한 경우, 호출 측 스레드는 뮤텍스 개​​체의 소유권을 가져옵니다. FALSE를 지정하면 호출 스레드는 뮤텍스의 소유권을 취득하지 않습니다. 호출자가 뮤텍스를 작성했는지 여부를 확인하는 방법은이 함수의 "반환"을 참조하십시오.
lpName
뮤텍스 개​​체의 이름을 유지하고있는 NULL로 끝나는 문자열에 대한 포인터를 지정합니다. 이름의 최대 길이는 MAX_PATH 문자입니다. 이름을 비교할 때 대소 문자를 구분합니다.

lpName 파라미터로 기존의 뮤텍스 오브젝트와 같은 이름을 지정하는 경우,이 함수를 실행하려면 해당 개체의 MUTEX_ALL_ACCESS 권한이 필요합니다. 이 경우 bInitialOwner매개 변수는 객체를 생성 한 프로세스가 이미 설정되어 있기 때문에 무시됩니다. 또한 lpMutexAttributes 매개 변수가 NULL이 아닌 경우 자식 프로세스가 핸들을 상속 할 수 있는지 여부를 지정하는 것은 유효하지만, 보안 기술자의 멤버는 무시됩니다.

NULL을 지정하면 이름없는 뮤텍스가 만들어집니다.

lpName 파라미터로 지정한 이름이 기존의 이벤트, 세마포어 대기 가능한 타이머 작업 파일 매핑 개체 중 하나의 이름과 일치하면이 함수는 실패하고 함수는 ERROR_INVALID_HANDLE을 반환합니다. 이 개체는 같은 네임 스페이스를 공유하고 있기 때문입니다.

Terminal Services : 글로벌 네임 스페이스 또는 세션 네임 스페이스에서 개체를 명시 적으로 작성하기 위해 "Global \ " 또는 "Local \ " 접두사를 붙일 수 있습니다. 이름의 나머지 부분은 백 슬래시 (\)를 제외한 모든 문자를 작성할 수 있습니다. 자세한 내용은 MSDN 라이브러리의 ""을 참조하십시오.

Windows 2000 : Terminal Services가 작동하지 않는 Windows 2000 시스템에서는 "Global \ " 및 "Local \ " 의 각 접두사는 무시됩니다. 이름의 나머지 부분은 백 슬래시 (\)를 제외한 모든 문자를 작성할 수 있습니다.

Windows NT 4.0 이전과 Windows 95 / 98 : 이름은 백 슬래시 (\)를 제외한 모든 문자를 작성할 수 있습니다.

반환 값

함수가 성공하면 뮤텍스 오브젝트의 핸들이 돌아갑니다. 이 함수를 호출 이전에 뮤텍스 개체가 존재하면,이 함수는 기존의 오브젝트에 대한 핸들을 반환 함수는 ERROR_ALREADY_EXISTS를 돌려줍니다. 그렇지 않으면 호출은 지정된 뮤텍스를 만듭니다. 함수가 실패하면 NULL을 반환합니다. 확장 오류 정보를 얻으려면, GetLastError 함수를 사용합니다.

간단한 사용 예제 참조 : http://blog.daum.net/aswip/2381216

참조 : http://msdn.microsoft.com

 


HINSTANCE ShellExecute (
    HWND hwnd, / /​​ 부모 윈도우의 핸들
    LPCTSTR lpVerb / / 조작
    LPCTSTR lpFile, / /​​ 작업 할 파일
    LPCTSTR lpParameters / / 작업의 매개 변수
    LPCTSTR lpDirectory / / 기본 디렉토리
    INT nShowCmd / / 표시 상태
);

1. GetLocalTime() :현재 시간

SYSTEMTIME time_start;

GetLocalTime(&time_start);

2.GetTickCount() : 윈도우즈 부팅된 후 1초에 1000씩 count

DWORD starttime;

starttime = GetTickCount();

 

VFW 라이브러리를 사용한 비디오 캡쳐 방법을 살펴보자. 비디오 캡쳐를 위해서는 먼저 캡쳐 윈도우를 생성하고 이 윈도우와 캡쳐 드라이버를 연결해야 한다. 그리고 캡쳐된 비디오 프레임을 캡쳐 윈도우에 보여주기 위해서는 한 프레임이 캡쳐 될 때마다 특정 함수를 호출하도록 한 다음에 호출된 함수에서 그 프레임을 화면에 출력한다. 이러한 작업을 수행하기 위해서는 VFW 라이브러리 중에서 다음과 같은 함수들을 사용해야 한다.


capGetDriverDescription()

CapCreateCaptureWindow()

capDriverConnect()

capPreviewRate()

capSetVideoFormat()

capDriverDisconnect()

capSetCallbackOnFrame()


capGetDriverDescription()함수

BOOLcapGetDriverDescription(index, name, name_size, version, version_size);

이 함수는 캡쳐 드라이버의 이름 및 버전 정보를 검색한다. 첫 번째 매개변수인 index는 검색하고자 하는 드라이버의 번호를 나타내는데, 0부터 9까지의 값을 가질 수 있다.

즉, 한 컴퓨터에서 9대의 캡쳐 장치가 사용될 수 있다고 가정하고 있다. 검색하고자 하는 번호의 드라이버가 존재하면 이 함수는 name에 드라이버의 이름을 저장하고 version에 드라이버 버전을 저장한 다음에 함수 결과값으로 TURE 값을 반환한다.

capCreateCaptureWindow()함수

H중 capCreateCaptureWindow(name, style, x, y, width, height, hWnd, id);

이 함수는 캐쳐 윈도우를 생성한다. name 에는 윈도우위 이름을 지정한다. style 윈도우위 스타일을 지정한다. (x,y)에는 캡쳐 윈도우의 좌측 상단의 좌표를 지정한다. width height에는 캡쳐 윈도우의 크기를 지정한다. hWnd에는 부모윈도우의 핸들값을 입력한다. id에는 윈도우의 식별 번호를 입력한다. 캡쳐 윈도우가 정상ㄷㅈ거으로 생성되면 캡쳐 우니도우의 핸들의 함수 결과값으로 반환되고 그렇지 않으면 NULL값이 반환된다.

capDriverConnect()함수

capDriverConnect(hWnd, index);

이 함수는 캡쳐 윈도우를 캡쳐 드라이버에 연결한다. hWnd는 캡쳐 윈도우의 핸들을 나타내고 index는 캡쳐 드라이버의 번호를 나타낸다. 이 함수는 캡쳐 장치가 정상적으로 작동하여 연결이 성공되면 TURE 값을 반환하고 그렇지 않으면 FALSE 값을 반환한다.

capPreviewRate()함수

capPreviewRate(hWnd, rate);

이 함수는 미리보기 (preview)모드에서의 프레임 재생 속도를 설정한다. 여기에서 미리보기란 카메라에서 입력도니 비디오를 파일에 저장하는 것이 아니라 화면에 보여준다는 것을 의미한다. hWnd는 캡쳐 윈도우의 핸들 값으로 설정하고 rate는 밀리초(ms) 단 위의 시간으로 설정한다. 예를 들어, rate 값을 66으로 설정하면 0.066초마다 새로운 비디오 프레임을 캡쳐해서 디스플레이 하게 도니다. 이와 같은 속도로 재생을 하면 1초에 15개의 비디오 프레임이 드스플레이된다.

capSetVideFormat()함수

capSetVideoFormat(hWnd, videoFormat, videoFormat_size);

이 함수는 캡쳐된 비디오 데이터 형식을 설정한다. 사용자가 원하는 비디오 데이터형식이 캡쳐 장치에서 지원이 되면 이 함수는 TRUE 값을 반환하고 그렇지 않으면 FALSE 값을 반환하므로 반드시 이 함수의 결과값이 TRUE 인지 검사한 다음에 다음단계로 넘어가야 한다.

hWnd는 캡쳐 윈도우의 핸들 값으로 설정한다. videoFormat은 설정하고자 하는 비디오 데이터 형식을 나타내는데, 비디오 데이터의 각 프레임에 대한 비트맵 형식을 BITMAPINFO 구조로 기술한다. BITMAPINFO 구조는 다음과 같다.

typedef struct tagBITMAPINFO{

BITMAPINFOHEADER bmiHeader;

RGBQUAD bmiColrs[1];

} BITMAPINFO;

BITMAPINFO는 BITMAPINFOHEADER와 RGBQUAD로 구성되는데, 여기에서는 다음과 같이 정의되는 BITMAPINFOHEADER 구조체의 값만 사용하면 된다.


pBmiInfo->bmiHeader.biSize = 40; //BITMAPINFOHEADER 구조체의 크기

pBmiInfo->bmiHeader.biHeight = 480;//영상의 가로크기

pBmiInfo->bmiHeader.biWidth = 640;//영상의 세로크기(양수:좌측 하단이 원점

음수:좌측 상단이 원점)

pBmiInfo->bmiHeader.biPlanes = 1;//목표 장치의 플레인 수(1로 설정해야함)

pBmiInfo->bmiHeader.biBitCount = (short) 24;//각 픽셀의 비트수

pBmiInfo->bmiHeader.biCompression = 0;//압축 방법(bi_rgb 또는 0:무압축 비트맵)

pBmiInfo->bmiHeader.biSizeImage =0;//비트맵 영상 크기(무압축인 경우 0으로 설정)

pBmiInfo->bmiHeader.biClrImportant = 0;// 비트맵 디스플레이에 사용되는 컬러수

pBmiInfo->bmiHeader.biClrUsed = 0;// 사용된 컬러의 수

pBmiInfo->bmiHeader.biXPelsPerMeter = 10000;//수평 해상도 (미터당 픽셀수)

pBmiInfo->bmiHeader.biYPelsPerMeter = 10000;//수직 해상도 (미터당 픽셀 수)

}BITMAPINFOHEADER;

비디오 캡쳐를 위해서는 다음과 같이 BITMAPINFOHEADER 구조체에서 biSize,biWidth, biHeight, biPlanes, biBitCount 값을 설정하고 나머지 값을은 0으로 설정하면된다.


BITMAPINFO bmi;

memset(&bmi.bmiHeader, 0, sizeof(bmiHeader));

pBmiInfo->bmiHeader.biSize = sizeof(bmi.bmiHeader);

pBmiInfo->bmiHeader.biWidth = 640;//영상의 세로크기(양수:좌측 하단이 원점

pBmiInfo->bmiHeader.biHeight = 480;//영상의 가로크기

pBmiInfo->bmiHeader.biPlanes = 1;//목표 장치의 플레인 수(1로 설정해야함)

pBmiInfo->bmiHeader.biBitCount = 24;//각 픽셀의 비트수

capDriverDisconnect()함수;

capDriverDisconnect(hWnd);

이 함수는 carDriverConnect() 함수에 의하여 연결한 캡쳐 윈도우와 캡쳐 장치를 분리하는 함수이다. hWnd에는 분리하고자 하는 캡쳐 윈도우의 핸들 값을 설정한다.

capSetCallbackOnFrame()함수

BOOL capSetCallbackOnFrame(hWnd, func);

VFW 라이브러리에서는 캡쳐된 비디오 프레임을 화면에 보여주는 작업을 callback함수를 사용해서 처리하도록 하고 있다. capSetCallbackOnFrame()함수는 캡쳐 장치로부터 비디오 프레임이 캡쳐되었을때에 이를 화면에 보여주기 위해서 호출되는 callback 함수를 설정한다. hWnd는 캡쳐 윈도우의 핸들 값으로 설정하고 func는 호출될 함수 이름으로 설정한다.

'[API & ASM] > ▶API' 카테고리의 다른 글

API 정리  (0) 2012.11.28
posted by 미스터리 DKL