Windows Vista이후 프로그래밍으로 시스템 볼륨을 조절하는 방법이 달라졌다.

이 소리 조절을 쉽게 할 수 있도록 만들어진 클래스가 있어 공유한다.

프로그래밍 언어는 Delphi이지만, 소스코드를 이해할 줄 안다면 다른 언어로 포팅이 가능하다.


이 클래스를 Delphi7에서 테스트를 했지만 아마 이후 버전의 Delphi에서도 무리없이 동작할 거라 생각된다.

이 클래스는 Win78Mixer unit에 있는 TBasicMixer 클래스의 Instance만 있으면 된다.


CreateVis78Mixer() 클래스를 이용해서 TBasicMixer 객체를 가져온 다음

MasterVolume 값을 조절하면 된다.



Delphi Volume Control Mixer.zip


한글 메뉴얼입니다.

참고하세요.



헤드셋 초기화

헤드셋이 정상적으로 작동하지 않으면 헤드셋을 초기화하십시오.헤드셋을 초기화하면

등록된 장치에 관한 기존 정보가 모두 삭제됩니다.


헤드셋을 초기화하려면

1. 전원이 꺼졌는지 확인한다.
2. 등록 표시(폐어링)가 나타날 때까지 전원 버튼()을 길게 누른다.
3. MW600의 전원이 꺼질 때까지 전원버튼()과 통화 버튼()을 동시에 길게 누른다.



메뉴얼 다운로드

mw600__ug_ko_1236-6503.1.pdf


출처 : http://diveangel.tistory.com/11


1. 개요

블로그의 포스팅할 내용들을 고민하던 중 아무래도 직업도 직업이고하니 IT관련 지식을 포스팅 해보자 마음 먹었습니다.

하지만 텍스트로 이루어진 소스코드를 포스팅 할 경우 너무나 무미건조해 보이기 때문에  여기저기 기웃거리던 중

딱 마음에 들어 사용하게 된 Syntax Highlighter 3.0 

이 소스코드 하이라이터의 소개 및 설치 방법에 대해 설명하고자 합니다.


※ 티스토리를 사용하고 있는 분들 대상의 글입니다. 다른 설치형, 개방형 블로그들은 비슷한 방법으로 가능하겠지만

    네이버, 다음 블로그 같은 폐쇠형 블로그는 불가능 할 수도 잇습니다.



2. 본론


2.1 설치


2012년 7월 18일 기준 최신버전을 첨부합니다.



 syntaxhighlighter_3.0.83.zip 클릭!!!!


또는 제작자의 홈페이지 주소(http://alexgorbatchev.com/SyntaxHighlighter/) 에서 다운로드 합니다. 


압축 파일을 압축해제 합니다.




빠른 설치를 위해 우리가 필요한 것은 
"scripts 폴더 안의 .js 파일과 styles 폴더 안의 .css 파일"들입니다.


티스토리 관리자 기능에 로그인하여 다음 그림과 같이 파일을 업로드 합니다.





좌측 메뉴의 [HTML/CSS 편집] - [파일업로드] 탭 - 하단의 [+추가] 버튼을 클릭합니다.


파일다이얼로그 화면에서 위에 설명한 *.js 와 *.css들을 모두 선택하여 추가 하도록 합니다.


이제 스킨의 html을 편집할 차례입니다.  [HTML/CSS] 탭을 클릭합니다.


skin.html 부분에 편집을 시작합니다.

<head> 태그와 </head> 태그 사이 아무곳에나 아래의 코드를 추가합니다.


눈치가 빠르신분들은 알겠지만


./images/shBrushCpp.js, ./images/shBrushJava.js  등 "shBrush" 뒤에 각각 프로그래밍 언어별로 하이라이트 양식이 따로 존재합니다. 내가 사용하지 않을 언어의 경우 삭제해도 상관 없습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<script type="text/javascript" src="./images/shCore.js"></script>
<script type="text/javascript" src="./images/shLegacy.js"></script>
<script type="text/javascript" src="./images/shBrushAppleScript.js"></script>
<script type="text/javascript" src="./images/shBrushAS3.js"></script>
<script type="text/javascript" src="./images/shBrushBash.js"></script>
<script type="text/javascript" src="./images/shBrushColdFusion.js"></script>
<script type="text/javascript" src="./images/shBrushCpp.js"></script>
<script type="text/javascript" src="./images/shBrushCSharp.js"></script>
<script type="text/javascript" src="./images/shBrushCss.js"></script>
<script type="text/javascript" src="./images/shBrushDelphi.js"></script>
<script type="text/javascript" src="./images/shBrushDiff.js"></script>
<script type="text/javascript" src="./images/shBrushErlang.js"></script>
<script type="text/javascript" src="./images/shBrushGroovy.js"></script>
<script type="text/javascript" src="./images/shBrushJava.js"></script>
<script type="text/javascript" src="./images/shBrushJavaFx.js"></script>
<script type="text/javascript" src="./images/shBrushJScript.js"></script>
<script type="text/javascript" src="./images/shBrushPerl.js"></script>
<script type="text/javascript" src="./images/shBrushPhp.js"></script>
<script type="text/javascript" src="./images/shBrushPlain.js"></script>
<script type="text/javascript" src="./images/shBrushPowerShell.js"></script>
<script type="text/javascript" src="./images/shBrushPython.js"></script>
<script type="text/javascript" src="./images/shBrushRuby.js"></script>
<script type="text/javascript" src="./images/shBrushSass.js"></script>
<script type="text/javascript" src="./images/shBrushScala.js"></script>
<script type="text/javascript" src="./images/shBrushSql.js"></script>
<script type="text/javascript" src="./images/shBrushVb.js"></script>
<script type="text/javascript" src="./images/shBrushXml.js"></script>
<link type="text/css" rel="stylesheet" href="./images/shCore.css">
<link type="text/css" rel="stylesheet" href="./images/shThemeDefault.css">


그 다음 javascript 를 실행하기 위해 skin.html의 맨 마지막 부분 </body></html> 앞부분에 아래의 코드를 추가합니다.


1
2
3
4
<script type="text/javascript">
    SyntaxHighlighter.defaults['toolbar'] = false;
    SyntaxHighlighter.all();
</script>


꼭 <body></body> 태그 사이에 body의 마지막 부분에 추가하셔야 합니다.

화면이 모두 로드되고서 하이라이트 기능을 실행하는 소스코드입니다.


[저장] 버튼을 클릭하여 편집한 skin.html을 저장합니다.


2.2 글에 적용하기


자 이제 밑준비는 모두 끝났습니다. 실제로 사용할 일만 남았습니다.


<pre> 태그와 <script> 태그를 이용하는 방법이 있습니다. 저는 전자의 <pre> 태그를 사용하는 방법을 설명하겠습니다.

<script> 태그가 궁금하시다면 제작자의 홈페이지에서 확인 하십시오. ----> http://alexgorbatchev.com/SyntaxHighlighter/manual/installation.html


---------------------------------------------------------------------

String.prototype.replaceAll = function(str1, str2)

{

  var temp_str = "";

 

      if (this.trim() != "" && str1 != str2)

      {

        temp_str = this.trim();

 

        while (temp_str.indexOf(str1) > -1)

        {

          temp_str = temp_str.replace(str1, str2);

        }

      }

 

      return temp_str;

}

---------------------------------------------------------------------


위와 같은 소스 코드를 하이라이트 하고 싶다 했을때 티스토리 글쓰기 화면에서 우측 상단의 "HTML" 을 체크하여

아래의 코드를 추가합니다.

<pre class="brush: 원하는 프로그래밍언어"> 입니다.

brush 뒤에 java, html, css, cpp 등을 지정하시면 됩니다.


---------------------------------------------------------------------

<pre class="brush: javascript">

String.prototype.replaceAll = function(str1, str2)

{

  var temp_str = "";

 

      if (this.trim() != "" && str1 != str2)

      {

        temp_str = this.trim();

 

        while (temp_str.indexOf(str1) > -1)

        {

          temp_str = temp_str.replace(str1, str2);

        }

      }

 

      return temp_str;

}

</pre>

---------------------------------------------------------------------


2.3 결과


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
String.prototype.replaceAll = function(str1, str2)
{
  var temp_str = "";
  
      if (this.trim() != "" && str1 != str2)
      {
        temp_str = this.trim();
  
        while (temp_str.indexOf(str1) > -1)
        {
          temp_str = temp_str.replace(str1, str2);
        }
      }
  
      return temp_str;
}



3. 결론


소스 하이라이터 기능을 찾기 위해 몇가지 기능들을 살펴보았으나 제 기준에서 가장 효율적이다라는 생각이 들어

이렇게 정리하게 되었습니다.

소스코드를 포스팅하는 대상들이 프로그래밍과 컴퓨터에 어느정도 지식이 있다 생각되었기에

간략하게 설명으로 글을 마칩니다.

읽어주셔서 감사합니다.




출처 : http://diveangel.tistory.com/11

Visual Studio 2010의 가장 큰 특징중의 하나는 바로 C+0 Lamda  표현식을 사용할 수 있는 거다.

이 Lamda 표현식은 다른 언어 특히 루비나 파이썬과 같은 프로그래밍 언어에서 많이 사용하는 문법이었는데 지금까지 C++에서는 이 편리한 Lamda 표현식을 지원하지 않다가 이제서야 지원하게 되었다.

Lamda 표현식에 대해서는 인터넷에 자료가 널려 있기 때문에 더이상 설명하지 않는다. 구글링을 하기 바란다.


Lamda 표현식을 내가 만든 프로그램에서 사용하기 위해서는 다음과 같은 과정을 따르면 된다.


1. #include <functional>

2. typedef 을 이용해서 람다 함수 원형을 정의 한다.
3. 함수의 인자로 람다 Functor 를 입력받고 이를 활용하면 된다.


여기서 설명하는 C+0 Lamda 표현식은 MS 개발툴의 경우 VS2010 이상에서만 가능하다.




====================== 헤더 파일 선언 내용 ======================
#include <functional>

template<class _Fn1> inline
BOOL CALLBACK EnumControlsProcLamda(HWND hWnd, _Fn1 * func)
{
	(*func)(hWnd);
	return true;
}
template<class _Fn1> inline
void EnumAllControls(CWnd * pWnd, _Fn1 _Func)
{
	EnumChildWindows(pWnd->GetSafeHwnd(), (WNDENUMPROC)EnumControlsProcLamda<_Fn1>, (LPARAM)&_Func);
}



====================== 사용 방법 ======================
.
.
.
// 모든 자식 컨트롤 true로 만들기
// 람다 함수 내에서 지역변수 Capture가 필요하면 [=]혹은 [&]을 이용한다.
EnumAllControls( [](HWND h){
	if( h )
	{
		if( !IsWindowEnabled(h) )
		{
			EnableWindow(h);
		}
	}
});




====================== 함수 실행 시간 구하는 Lamda함수  ======================


template <class Function>
__int64 time_call(Function&& f)
{
   __int64 begin = GetTickCount();
   f();
   return GetTickCount() - begin;
}





C++의 RTTI는 정말 편리하다.

프로그램 실행중에 변수의 자료형을 확인할 수 있으니 말이다.

RTTI는 C++ 표준서 및 MFC RTTI 지원 문서를 참고하자.


C++ RTTI : http://sweeper.egloos.com/2826160

MFC RTTI : http://anster.egloos.com/2173004


그런데 써본 사람들은 알겠지만, 이 MFC의 RUNTIME_CLASS() 매크로는 속도도 빠르고 좋은데

문제는 내포 클래스(혹은 중첩 클래스라고 말하기도 한다)에는 사용할 수 없다.

내포 클래스란...? http://initial4-blog.blogspot.kr/2012/06/c-study-512-part.html


내포 클래스는 용도에 따라서 매우 유용한 클래스인데, 이런 내포(중첩)클래스에서도 RTTI를 사용할 수 있도록 MFC의 RUNTIME_CLASS를 약간 수정해 보았다.



IMPLEMENT_DYNAMIC_NESTED() 의 사용방법은 다음과 같다.


IMPLEMENT_RUNTIME_GETRUNTHISCLASS(nesting_class, class_name, base_class_name)

=> nesting_class는 내부 클래스를 감싸는 외부 클래스

=> class_name은 외부 클래스 안에 있는 내포 클래스 즉, 중첩 클래스

=> base_class_name은 내포 클래스 즉, 중첩 클래스가 상속하고 있는 부모 클래스.


아래는 사용 예를 보여준다.





----------------  헤더파일에 추가할 내용 ----------------

#define RUNTIME_CLASS_NESTED(nesting_class, class_name) ((CRuntimeClass*)(&nesting_class::class_name::class##class_name))


#if _MSC_VER >= 1600
#define IMPLEMENT_RUNTIME_GETRUNTHISCLASS(nesting_class, class_name, base_class_name)\
					CRuntimeClass* nesting_class::class_name::GetRuntimeClass() const \
						{ return RUNTIME_CLASS_NESTED(nesting_class, class_name); } \
					CRuntimeClass* PASCAL nesting_class::class_name::GetThisClass() \
						{ return RUNTIME_CLASS_NESTED(nesting_class, class_name); }
#else
#define IMPLEMENT_RUNTIME_GETRUNTHISCLASS(nesting_class, class_name, base_class_name)\
					CRuntimeClass* nesting_class::class_name::GetRuntimeClass() const \
						{ return RUNTIME_CLASS_NESTED(nesting_class, class_name); } 
#endif




#ifdef _AFXDLL
#define IMPLEMENT_RUNTIMECLASS_NESTED(nesting_class, class_name, base_class_name, wSchema, pfnNew) \
	CRuntimeClass* PASCAL nesting_class::class_name::_GetBaseClass() \
		{ return RUNTIME_CLASS(base_class_name); } \
	AFX_COMDAT const AFX_DATADEF CRuntimeClass nesting_class::class_name::class##class_name = { \
		#class_name, sizeof(class nesting_class::class_name), wSchema, pfnNew, \
			&nesting_class::class_name::_GetBaseClass, NULL }; \
	IMPLEMENT_RUNTIME_GETRUNTHISCLASS(nesting_class, class_name, base_class_name)



#else
#define IMPLEMENT_RUNTIMECLASS_NESTED(nesting_class, class_name, base_class_name, wSchema, pfnNew) \
	AFX_COMDAT const AFX_DATADEF CRuntimeClass nesting_class::class_name::class##class_name = { \
		#class_name, sizeof(class nesting_class::class_name), wSchema, pfnNew, \
			RUNTIME_CLASS(base_class_name), NULL }; \
	IMPLEMENT_RUNTIME_GETRUNTHISCLASS(nesting_class, class_name, base_class_name)



#endif

#define IMPLEMENT_DYNAMIC_NESTED(nesting_class, class_name, base_class_name) \
	IMPLEMENT_RUNTIMECLASS_NESTED(nesting_class, class_name, base_class_name, 0xFFFF, NULL)




----------------  사용하는 방법 예제 ----------------



A.h

class CA : public CObject
{
public:
	DECLARE_DYNAMIC(CA)

	CA(){}
	virtual ~CA(){}
	
	
	
private:
	class CANested : public CObject
	{
	public:
		DECLARE_DYNAMIC(CANested)
		CANested() {}
		virtual ~CANested() {}
		
		
	};

};






A.cpp

IMPLEMENT_DYNAMIC(CA, CObject)
IMPLEMENT_DYNAMIC_NESTED(CA, CANested, CObject)




저는 예전 모토로라 아트릭스 시절부터 SWYPE 키보드를 사용해 왔습니다.

한 손으로 입력이 가능한게 바로 Swype 키보드였거든요

처음에는 불편하다가 한번 익숙해 지니 다른 키보드는 쓰기 불편해 지더군요.

아트릭스때에는 기본 앱으로 Swype가 있어서 기간 제한 없이 잘 사용했는데

이후 기기들은 기본앱이 아니라 평가판을 사용해서 기간제한(딱 1달)때문에 지우고 다시 설치하기 무지 불편하더라구요

앱 삭제 않고 계속 쓰는 방법을 알려드리겠습니다.

프로그램 크랙이 아닙니다.


우선 루팅폰이어야 합니다.


준비물 : Swype + Dragon Trial  +  Root Explorer


앱 다운로드 주소 : 

    1. Swype Dragon Trial => https://play.google.com/store/apps/details?id=com.nuance.swype.trial&hl=ko

    2. Root Explorer => https://play.google.com/store/apps/details?id=com.speedsoftware.rootexplorer&hl=ko



1. 어플 서랍에서 Root Explorer와 Swype가 있어야죠.



2. Root Explorer를 실행합니다.



3. /data/data/com.nuance.swype.trial/shared_prefs  폴더로 이동합니다.



4. 이동 후 "com.nuance.swype.trial_preferences.xml" 파일을 삭제하시든지 아니면 다른 이름으로 변경하세요.


5. 폰을 리부팅 합니다.


6. Swype Trial이 새로 설치 된 것 처럼 1달 더 쓸 수 있어요.

"로딩" 움직이는 GIF 모음.


구글링하다가 우연히 발견한 Loading 이미지 모음입니다.

제작자가 무료로 오픈한다고 합니다.

많이 이용하세요.


아래 사이트로 가셔서 다운로드 하세요.

http://www.iconmonsters.com/icon-packs/internet-web/loading-animated-gif


혹시 사이트 다운시 혹은 글이 없어진 경우....

loading-animated-gif.rar






출처 : http://www.iconmonsters.com/icon-packs/internet-web/loading-animated-gif


프로그램 실행중에 화면보호기와 같이 모니터 꺼짐 현상 방지하기위해 사용할 함수의 함수 원형.

EXECUTION_STATE WINAPI SetThreadExecutionState(
  _In_  EXECUTION_STATE esFlags
);



	// 함수 포인터를 이용하기 위해 typedef로 타입 정의
	typedef UINT (CALLBACK* PFNDLL_STES)(UINT);

	// 프로그램 실행중에 화면보호기와 같이 모니터 꺼짐 현상 방지.
	PFNDLL_STES pfn;
	pfn = (PFNDLL_STES) GetProcAddress( GetModuleHandle(TEXT(_T("kernel32.dll"))), _T("SetThreadExecutionState"));
	if ( pfn )
	{
		pfn(ES_CONTINUOUS | ES_DISPLAY_REQUIRED);
	}


	// .....................................
	// .....................................
	// .....................................


	PFNDLL_STES pfn;
	pfn = (PFNDLL_STES) GetProcAddress( GetModuleHandle(TEXT(_T("kernel32.dll"))), _T("SetThreadExecutionState"));
	if ( pfn )
	{
		pfn(ES_CONTINUOUS);
	}







구글 크롬을 따로 설치 하지 않고 바로 실행할 수 있는 패키지입니다.

다운 받으시고 Chrome.exe를 실행하면 끝입니다.

공공 PC에서 Chrome 쓰고 싶으면 다운 받으세요.


아래 링크를 클릭하시면 됩니다.

구글 크롬 포터블 버전 다운로드





하이온 HN-2700T


후방카메라 자동 인식을 위한 결선 배선도.




+ Recent posts