'2009/02'에 해당되는 글 5건
- 2009/02/20 Visual Studio추가기능(Add-In) 만들기 - Part3
- 2009/02/14 Visual Studio추가기능(Add-In) 만들기 - Part2
- 2009/02/12 뮤텍스를 사용한 다중실행 방지(C#)
- 2009/02/12 구글맵 라이센스, 무료로 사용가능한 범위
- 2009/02/11 Visual Studio추가기능(Add-In) 만들기 - Part1
의 부연 설명으로 IDTExtensibility2, DTCommandTarget 인터페이스의 간략한 설명으로 추가기능 만들기 내용을 끝내겠습니다.
IDTExtensibility2
| 메서드 | 설명 |
| OnConnection | Visual Studio가 추가기능을 로드할때 불려짐. 커맨드를 추가하거나 초기설정을 할때 사용함. |
| OnDisConnection | Visual Studio가 추가기능을 언로드할때 불려짐. 추가기능에서 추가한 커맨드등을 삭제할때 사용함. |
| OnAddInsUpdate | Visual Studio가 추가기능을 로드할때와 추가기능설정이 변경되었을때 불려짐. |
| OnStartupComplete | Visual Studio가 추가기능의 로딩을 끝냈을때 불려짐. |
| OnBeginShutdown | Visual Studio가 종료될때 불려짐. |
DTCommandTarget
| 메서드 | 설명 |
| Exec | 유저가 커맨드를 실행했을때 불려짐. 커맨드의 실제 실행로직에 사용하면 됨. |
| QueryStatus | Visual Studio의 상태가 변경되었을때 불려짐. 상황에 따라서 커맨드의 활성비활성화를 결정지을때 사용하면 됨. |
마지막으로...추가기능을 배포에 관한 내용입니다.
기본적인 배포방법은 Add-In을 VS에서 사용하려면 애드인 정의XML을
My Documents\Visual Studio 2005\Addins 또는 My Documents\Visual Studio 2008\Addins에 복사해 넣고
(모든 PC사용자에게 사용가능하게 하려면 Documents and Settings\All Users\My Documents 에 넣으시면 됩니다.)
정의XML에 기입된 DLL의 장소(파일, url, GAC)에 DLL을 집어넣는것으로 배포는 끝입니다.
정말 간단한 방법에 MS에 감사드립니다..-.-
정의 XML과 배포에 대한 보다 자세한 내용은 아래의 링크로 대신하겠습니다.
http://msdn.microsoft.com/ko-kr/library/19dax6cz(VS.80).aspx -> 추가기능 등록
http://msdn.microsoft.com/ko-kr/library/keet1583(VS.80).aspx -> 기타 참고 제어 방법
'VS2008,2005,2003' 카테고리의 다른 글
| Visual Studio추가기능(Add-In) 만들기 - Part3 (0) | 2009/02/20 |
|---|---|
| Visual Studio추가기능(Add-In) 만들기 - Part2 (0) | 2009/02/14 |
| Visual Studio추가기능(Add-In) 만들기 - Part1 (0) | 2009/02/11 |
| 각종 파일들의 초기템플릿을 변경하기 (0) | 2008/09/26 |
| VS2008 고마운 신기능 (0) | 2007/12/30 |
| 내가 만든 DLL 참조추가할때 리스트에 표시하기 (2) | 2007/05/11 |
에 이어서 VS에 간단한 추가기능을 추가해보도록 하겠습니다.
제일중요한 IDTExtensibility2와 IDTCommandTarget의 인터페이스에 대한 정리는 제일 나중에 정리하도록 하고..
일단 툴바메뉴에 버튼을 추가해보죠.
IDTExtensibility2의 인터페이스메서드중 하나인 OnConnection메서드에 아래와같은 코드를 입력해주시고
SetToolBar()라는 함수도 추가해주세요. SetToolBar는 실제 버튼을 등록하는 코드를 서브루틴으로 빼둔겁니다.
{
_applicationObject = (DTE2)application;
_addInInstance = (AddIn)addInInst;
switch (connectMode)
{
case ext_ConnectMode.ext_cm_Startup:
SetToolBar();
break;
case ext_ConnectMode.ext_cm_AfterStartup:
SetToolBar();
break;
case ext_ConnectMode.ext_cm_CommandLine:
break;
case ext_ConnectMode.ext_cm_External:
break;
case ext_ConnectMode.ext_cm_Solution:
break;
case ext_ConnectMode.ext_cm_UISetup:
break;
default:
break;
}
}
/// <summary>
/// 표준Toolbar에 버튼을 등록
/// </summary>
private void SetToolBar()
{
CommandBar stdCmdBar;
CommandBarButton cmdBarBtn;
object[] contextGUIDS = new object[] { };
//커맨드가 등록되어 있지않다면 새로 등록
if (ToolbarCommand == null)
{
ToolbarCommand = _applicationObject.Commands.AddNamedCommand(_addInInstance,
"ANewComment", "코멘트추가", "코멘트를 추가해줍니다.", true, 59, ref contextGUIDS,
(int)vsCommandStatus.vsCommandStatusSupported
| (int)vsCommandStatus.vsCommandStatusEnabled);
}
//표준툴바의 객체를 취득
stdCmdBar =
(Microsoft.VisualStudio.CommandBars.CommandBar)((Microsoft.VisualStudio.CommandBars.CommandBars)_applicationObject.CommandBars)["Standard"];
//표준툴바에 버튼을 추가
stdCmdBarCtl = (Microsoft.VisualStudio.CommandBars.CommandBarControl)ToolbarCommand.AddControl(stdCmdBar, stdCmdBar.Controls.Count + 1);
//버튼에 캡션설정
stdCmdBarCtl.Caption = "이거 누르면 코멘트가 추가됩니다.";
//버튼을 아이콘으로 설정
cmdBarBtn = (CommandBarButton)stdCmdBarCtl;
cmdBarBtn.Style = MsoButtonStyle.msoButtonIcon;
}
일단 이것만 하고 실행(F5)를 누르고 디버깅해주시면 아래 그림과 같이 툴바 제일끝에 스마일버튼이 추가된걸 보실수가 있습니다.
근데!!버튼을 누를수가 없네요.
IDTCommandTarget의 인터페이스메서드중 하나인 QueryStatus메서드에 아래와같은 코드를 입력해주세요.
빨간 부분은 프로젝트를 만들때 사용했던 추가기능의 이름을 넣어주세요.
public void QueryStatus(string commandName, vsCommandStatusTextWanted neededText, ref vsCommandStatus status, ref object commandText)
{
if(neededText == vsCommandStatusTextWanted.vsCommandStatusTextWantedNone)
{
//커맨드명과 현재 활성화된 창의 문서가 Document일 경우에만 사용가능하다는 신호를 보냄
if (commandName == "MyTestAddin1.Connect.ANewComment" && _applicationObject.ActiveWindow.Type == vsWindowType.vsWindowTypeDocument)
{
status = (vsCommandStatus) vsCommandStatus.vsCommandStatusEnabled | vsCommandStatus.vsCommandStatusSupported;
return;
}
}
}
QueryStatus메서드는 VS가 자신의 상태가 변하면 각 커맨드들에 사용가능한 상태인지 요청하게 됩니다.
QueryStatus메서드에서 현재 VS의 상황을 파악하여 사용가능여부를 반환합니다.
예를들어 위의 코드에서는 '커맨드명과 현재 활성화된 창의 문서가 Document일 경우에만 사용가능하다는 신호를 보냄'이 상황이 됩니다.
제가 현재 열려진 창의 문서가 Document일 경우에만 사용가능하다는 신호를 보냄이란 조건을 설정한 이유는 스타트페이지가 열려진 상태에서 버튼이 눌러지게 되면 코멘트를 넣을곳이 없기때문에 에러를 발생시키기 때문이죠..
물론 코멘트를 넣어줄때 체크를 하면되지만 유저인터페이스를 고려해서 쓸수 없는 상황에는 아예 안눌려지게 하기위함입니다..
(위의 조건도 완벽한 상태가 아닙니다.실은 vsWindowTypeDocument라는건 파일의 종류와 상관없이 편집가능한 문서-소스코드,HTML,CSS,XML등 모든 문서-를 의미합니다.)
자 이제 마지막으로 버튼을 눌렀을때 문서에 코멘트를 넣는 코드를 추가해보겠습니다.
IDTCommandTarget의 인터페이스메서드중 하나인 Exec메서드에 아래와같은 코드를 입력해주세요.
{
handled = false;
if(executeOption == vsCommandExecOption.vsCommandExecOptionDoDefault)
{
switch (commandName) //스위치를 사용하여 불려진 커맨드를 체크.(혹시 하나의 추가기능에 버튼이 여러개 있을수도 있으니까 스위치를 사용합니다.)
{
case "MyTestAddin1.Connect.ANewComment":
//현재 열려진 창이 문서인지 재확인을 하고
if (_applicationObject.ActiveWindow.Type == vsWindowType.vsWindowTypeDocument)
{
//열려진 문서의 인스턴스를 취득해서
TextDocument textDoc = (TextDocument) _applicationObject.ActiveWindow.Document.Object("TextDocument");
textDoc.StartPoint.CreateEditPoint(); //커서위치를 가져오고
//커맨드를 삽입하고
textDoc.Selection.Insert(string.Format("//{0}에 입력되었습니다.",DateTime.Now.ToString()), 0);
//보기좋게 하기위해 개행문자를 넣어줌...
textDoc.Selection.EndOfLine(true);
textDoc.Selection.NewLine(1);
handled = true;
}
return;
default:
break;
}
}
}
자!!! 이제 다 만들어졌습니다.
다시 실행버튼을 누르시고 대충 아무 cs파일을 여시고.. 파일을 여시면 버튼이 활성화되는걸 보실수 있을겁니다.
그리고 버튼을 누르시면 아래처럼 자동으로 코멘트가 들어가 있을겁니다.
일단 오늘 시간이 좀 늦었으니 담번에 IDTExtensibility2와 IDTCommandTarget에 대해서랑 어떻게 추가기능을 배포할것인지를 정리하도록 하겠습니다..-.-;;
내용 추가
아래 소스코드도 IDTExtensibility2의 OnDisconnection메서드에 집어넣어주세요. 아래의 소스코드는 추가기능이 언로드될때 커맨드와 버튼을 삭제해줄때 사용합니다.이걸 집어넣지 않으면 추가기능을 활성화, 비활성화할때 에러를 발생시킬수 있거든요..^^;
깜박하고 빼먹었습니다..
public void OnDisconnection(ext_DisconnectMode disconnectMode, ref Array custom)
{
//추가기능이 언로드될 등록한 버튼과 커맨드를 삭제
try
{
if (disconnectMode == ext_DisconnectMode.ext_dm_UserClosed)
{
if (stdCmdBarCtl != null)
{
stdCmdBarCtl.Delete(null);
stdCmdBarCtl = null;
ToolbarCommand.Delete();
ToolbarCommand = null;
}
if (MenuToolCommand != null)
{
MenuToolCommand.Delete();
MenuToolCommand = null;
}
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.ToString());
}
}
'VS2008,2005,2003' 카테고리의 다른 글
| Visual Studio추가기능(Add-In) 만들기 - Part3 (0) | 2009/02/20 |
|---|---|
| Visual Studio추가기능(Add-In) 만들기 - Part2 (0) | 2009/02/14 |
| Visual Studio추가기능(Add-In) 만들기 - Part1 (0) | 2009/02/11 |
| 각종 파일들의 초기템플릿을 변경하기 (0) | 2008/09/26 |
| VS2008 고마운 신기능 (0) | 2007/12/30 |
| 내가 만든 DLL 참조추가할때 리스트에 표시하기 (2) | 2007/05/11 |
많이 쓰이는건데..
WinApp의 다중실행을 방지하는 샘플입니다.
Program.cs를 아래와 같이 변경해주세요.
static class Program
{
// 어플리케이션의 이름
private static string strAppConstName = "적당한 어플리케이션의 이름";
// 다중기동을 방지하는 뮤텍스인스턴스
private static Mutex mutexObject;
[STAThread]
static void Main()
{
// Windows 2000(NT 5.0)이후만 글로벌 뮤텍스가 사용가능
OperatingSystem os = Environment.OSVersion;
if ((os.Platform == PlatformID.Win32NT) && (os.Version.Major >= 5))
{
strAppConstName = @"Global\" + strAppConstName;
}
try
{
// 뮤텍스를 생성
mutexObject = new Mutex(false, strAppConstName);
}
catch (ApplicationException e)
{
// 글로벌 뮤텍스에 의한 다중실행 방지
MessageBox.Show("이미 실행되고 있습니다.", "다중실행방지");
return;
}
// 뮤텍스를 취득
if (mutexObject.WaitOne(3000, false))
{
//실행
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frm_SignIn());
//프로그램사용이 끝났으니 뮤텍스를 해방
mutexObject.ReleaseMutex();
}
else
{
//이미 실행중이니 경고 메시지
MessageBox.Show("이미 실행되고 있습니다.", "다중실행방지");
}
// 뮤텍스를 파기하고 완전종료
mutexObject.Close();
}
}
'.Net' 카테고리의 다른 글
| 뮤텍스를 사용한 다중실행 방지(C#) (0) | 2009/02/12 |
|---|---|
| 六曜を取得する (0) | 2008/10/25 |
| 한방에 예외로그를 처리하기. (0) | 2008/10/22 |
| ClickOnce로 배포된 어플리케이션 버젼 취득. ClickOnce配布アプリのバージョン取得 (0) | 2008/09/30 |
| OTP솔루션 구축방법 (0) | 2008/05/20 |
| 진정한 웹다중Tier개발의 시작? VOLTA플랫폼 (0) | 2007/12/10 |
데브피아에서 어떤분이 질문하셔서 답변했던 내용을 옮겨놉니다.
구글맵API는 기본적으로 무료로 사용가능한데 아래에 해당되지 않는 경우에 한합니다.
1. 유료회원제 사이트인경우(유료로 가입하지 않으면 이용이 안되는 사이트)
2. 사내인트라넷과 같은 비공개 사이트
3. 자산(부동산등), 차량추적을가지는 사이트(말하자면 내비게이션)
1,2,3에 해당되는 사이트는 연간 1만불정도의 금액으로 프리미엄 서비스를 이용하시면 됩니다.
참고 url
http://code.google.com/support/bin/answer.py?answer=55141&topic=14522
그리고 일일 쿼리제한입니다만...
기본적으로 IP어드레스에 대하여 1일 1만5천건이란 제한이 있습니다만
구글맵의 API는 자바스크립트 형식으로 구글서버에의 액세스는 클라이언트 PC가 처리를 하게 되오니
서버가 구글맵의 데이터를 다운로드하지 않는한 그다지 신경안써도 됩니다.
참고 url
http://code.google.com/support/bin/answer.py?answer=93464&topic=12266
'기업' 카테고리의 다른 글
| 티맥스 윈도우 잘못된 계획... (0) | 2009/07/08 |
|---|---|
| 구글맵 라이센스, 무료로 사용가능한 범위 (0) | 2009/02/12 |
| NTT Docomo 신 로고 (0) | 2008/04/21 |
| Microsoft 디벨로퍼 포럼(Japan)-스티브 발머를 만나고? 오다. (0) | 2007/11/19 |
| MS、차기 윈도우서버 Longhorn Server의 정식명칭결정 (0) | 2007/05/15 |
| Trust Conference - 일할맛 나는 회사 1위 구글의 강연 (0) | 2007/05/07 |
Visual Studio에는 3가지 방법으로 개발환경을 커스터마이징할수 있습니다.
매크로
매크로는 흔히 이용하는 오피스의 매크로와 동일하다고 보시면 됩니다.
사용자의 액션을 레코딩하여 반복작업을 간단하게 해줄수도 있고 컴파일이 필요없기 때문에 쉽게 편집할수도 있습니다.
다만 Visual Basic으로만 저장이 가능하고 소스코드가 그대로 저장되어서 배포할때도 소스코드가 배포되니
통합된 프로젝트에서는 관리하기가 불편하죠.
Add-In
하나의 어플리케이션형태로 개발되고 배포또한 인스톨러형식으로 배포가능하고 매크로보다 강력합니다.
매크로는 사용자의 명령을 소스코드가 대신해주는 기능뿐이지만 Add-In은 하나의 어플리케이션처럼
VS랑 상호작용하니 가능한 작업도 많아집니다.
Visual Studio SDK
이건 저도 사용해본적이 없어서 많은 설명을 드릴수는 없지만 Visual Studio SDK를 사용하면
VS를 근본부터 제어할수 있습니다. DevParter라든지 각종 서드파티의 개발지원툴들은 이것을 이용하여 개발되었다고
보시면 됩니다.WF나 WCF의 디자이너또한 마찬가지이고요..
3파트 정도로 나뉘어서 간단하게 툴바에 버튼을 하나 추가하여 버튼을 누르면 소스코드에 코멘트를
자동으로 입력해주는 기능을 만들어보도록 하겠습니다.
일단 오늘은 VS가 제공하는 템플릿을 사용하여 기본틀만 만들어보죠.
1. 새 프로젝트를 클릭하셔서 "기타 프로젝트형식" -> "확장성" -> "Visual Studio 추가기능" 순으로 클릭해주세요.
그리고 적당한 이름을 넣으시고 "확인을 눌러주세요.
참고로 옆에 보이는 "공유추가기능"이란건 오피스등에서 사용할수 있는 추가기능을 말합니다.
2. 그럼 위저드가 실행되어 언어를 선택하는 화면이 나옵니다.여기서는 C#을 선택합니다.
3. 그후에는 어떤 형식으로 추가기능을 사용할건지가 나오는데요. Macros를 제외한걸 선택합니다.
(실은 Macros를 선택한것과 안한것이 머가 틀린지는 저도 모르겠습니다...-.-..다만 추가기능의 정의XML에 호스팅되는 환경으로 매크로가 추가될뿐...)
4.그리고 이름과 설명을 대충입력해주시고요...
5. 아래와 같이 체크복스를 체크합니다.
가볍게 설명을 하자면 "도구"메뉴항목을 만듭니다..라는 내용은 VS상단메뉴의 "도구"에 지금 만드는 추가기능의
기본명령을 추가해주는 소스코드를 자동으로 만들어줍니다.
다음으로 호스트 응용프로그램이 시작될때 로드합니다.라는 내용은 추가기능의 정의XML에 옵션설정을 해주어서
별도의 유저액션없이 추가기능을 로드해줍니다.
마지막의 모달UI를 표시하지 않으며...라는 내용은 MSDN에는 추가 기능에 모달 UI(사용자 인터페이스)를 사용하지 않도록 하여 명령줄 빌드에서 안전하게 사용할 수 있도록 할지 여부라고 나오는데 당췌 먼말인지 모르겠습니다..-.-
6. 상단 메뉴의 "도움말" -> "Visual Studio 정보"라는 메뉴를 클릭했을때 나오는 일반적은 정보화면에 추가기능의 정보를 표시할지를 선택합니다. 대충 입력하시고 다음을 눌러주세요..
7. 그럼 프로젝트가 작성되어지고 다음의 소스코드들이 들어가 있을겁니다.
이걸로 템플릿을 사용하여 아무것도 없는 소스코드까지만 만들었습니다.
하지만 다음 내용을 위해 하나 해둬야 할게 있습니다.
현재 Connect는 IDTExtensibility2라는 인터페이스만을 구현하고 있는데 이건 추가기능으로써 필요한 인터페이스입니다.
저희는 도구모음을 버튼을 추가해야하니 IDTCommandTarget라는 인터페이스도 구현해야합니다.
IDTCommandTarget라는 텍스트를 추가하시고 아래그림과 같이 메서드스터브를 자동으로 만들어 주세요.
IDTExtensibility2과 IDTCommandTarget에 대한 설명을 다음 내용에서 설명하도록 하겠습니다.
'VS2008,2005,2003' 카테고리의 다른 글
| Visual Studio추가기능(Add-In) 만들기 - Part3 (0) | 2009/02/20 |
|---|---|
| Visual Studio추가기능(Add-In) 만들기 - Part2 (0) | 2009/02/14 |
| Visual Studio추가기능(Add-In) 만들기 - Part1 (0) | 2009/02/11 |
| 각종 파일들의 초기템플릿을 변경하기 (0) | 2008/09/26 |
| VS2008 고마운 신기능 (0) | 2007/12/30 |
| 내가 만든 DLL 참조추가할때 리스트에 표시하기 (2) | 2007/05/11 |
![]() |
![]() |
|
![]() |
![]() |
![]() |


Prev





Rss Feed