C#
2008. 9. 4.
안혁
http://hyok.kr
참고자료:
http://shinbinet.zc.bz/bbs/view.php?id=ccc&no=11
http://forum.xda-developers.com/archive/index.php/t-361997.html
기본적으로 하나의 프로그램을 개속 실행하면 실행한 만큼 프로세스가 생기지만, 특별한 경우, 한 개만 실행되고 다시 실행시킬 경우 이미 실행되어 있는 프로그램이 활성화 되었으면 하는 때도 있습니다.
아쉽게도 C#에는 윈도우 활성화(최소화 되있거나 다른 윈도우에 가려졌거나 했을 때 눈에 보여지도록 하는 것을 말함)를 시켜주는 함수가 존재하지 않습니다. 그래서 WinAPI를 사용하여 이 부분을 해결합니다.
1 |
[System.Runtime.InteropServices.DllImport("coredll.dll")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); [System.Runtime.InteropServices.DllImport("coredll.dll")] public static extern void BringWindowToTop(IntPtr hWnd); [System.Runtime.InteropServices.DllImport("coredll.dll")] public static extern void SetForegroundWindow(IntPtr hWnd); [System.Runtime.InteropServices.DllImport("coredll.dll")] public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
/// <summary> /// 해당 응용 프로그램의 주 진입점입니다. /// </summary> [MTAThread] static void Main() { string rt = "HyokMain"; //실행파일의 Caption명
// 최상위화면으로 IntPtr wHandle = FindWindow(null, rt); if (wHandle != IntPtr.Zero) { ShowWindow(wHandle, 5); BringWindowToTop(wHandle); SetForegroundWindow(wHandle); } else { Application.Run(new HyokAppMain()); } } |
윈도우 어플리케이션을 생성하면 program.cs라는 파일이 생기고, 그 안에서 Main 함수가 있는 클래스를 발견할 수 있습니다. 1~8줄이 WinAPI 함수를 Import하는 부분이다. coredll.dll을 Import하는데, 이는 .Net Compact Framework를 대상으로 할 때 사용하는 dll입니다. 일반 윈도우에서 동일한 기능을 구현하고자 한다면 coredll.dll 대신 user32.dll을 기입하면 되며, 19~20줄에서 프로그램 실행 여부를 확인 후 활성화(22~24줄) 또는 실행(28줄)하게 됩니다.
'.Net' 카테고리의 다른 글
CryptographicException: Event code 3005 (0) | 2009.10.30 |
---|---|
HTML에서 특수 기호 인코딩의 필요성 (0) | 2009.08.19 |