수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1693890
  • Today | 241
  • Yesterday | 588

Programming/C#2007/02/05 16:34

여러가지 윈도우 시스템 제어

1. Introduction닷넷 프레임워크 기반이 아닌 WIN DLL을 이용한 윈도우즈 시스템을 다루도록 해보겠다.
여기서 다루어 볼 내용은 시스템을 강제로 sutDown시키는 것과 Sound 재생, CD device의
열고 닫기 정도가 되겠다.

2. Function우리가 시스템을 제어에 필요한 Win API함수를 몇가지 알고 넘어 가도록하자.

1) PlaySound    - WinAPI Declare

BOOL PlaySound(
LPCSTR pszSound,  
HMODULE hmod,    
DWORD fdwSound    
);

  - C# Import Declare

public int  PlaySound(
  string  lpszName,
  int  hModule,
  int  dwFlags
);

첫번재 인자값은 플레이가 될 연주 경로이고, 두번재는 리소스 핸들, 세번째 인자값은 연주형태에 따른 인자 값이다.

2) InitiateSystemShutdown
시스템을 강제로 종료 해주는 함수이다. 자세한 설명은 생략 하도록 하겠다.

3) MCI(Media Control Interface) 관련

우리가 CD를 열고 닫을때 사용하게 될 함수 이다. CD미디어 제어 뿐 아니라 여러가지 미디어
관련 작업을 할수 있다.이 MCI관련 함수들로 사운드도 역시 제어할수 있다.
mciSendString는 모든 명령어들이 일상적인 문장 (물론 영문)으로 구성되어 있다.
이를테면 'play', 'close' 등과 같은 문자열을 사용하여 재생과 종료를 지시할 수 있다.
mciSendCommand는 재생에 필요한 정보를 파라메터로 지정하여 명령을 내리게 된다.
일상언어로 사운드 장치를 제어할 수 있다는 점에서 mciSendString에 호감이 가지만
이 함수는 mciSendCommand를 사용할 때 보다 속도는 느리다. 왜냐하면 명령의 실행에
앞서 명령어를 해석하는 인터프리터 (MCI interpreter)를 거치기 때문이다. 이 과정에서 올바른 명령어가
사용되었는지를 검사하고 그 명령어를 처리할 수 있는 저급수준의 함수를 호출해 준다.

MCIERROR mciSendString(
         LPCTSTR lpszCommand,         // MCI 명령 문자열 주소
         LPTSTR lpszReturnString,     // 함수가 리턴하는 처리결과 문자열 저장버퍼 주소
         UINT cchReturn,              // 리턴버퍼에 저장될 문자수 지정
         HANDLE hwndCallback          // 명령어 처리후 notify 메시지를 수신할 윈도우의 핸들
         );

3. Code

1) Win32클래스

class Win32

{

       //시스템 종료

       [DllImport("advapi32.dll")]

       public  static extern int  InitiateSystemShutdown(string  lpMachineName,string  lpMessage,int  dwTimeout,int  bForceAppsClosed,int  bRebootAfterShutdown);

       //MCI 관련 명령어

       [DllImport("winmm.dll")]

       public  static extern int  mciSendCommand(int  wDeviceID,int  uMessage,int  dwParam1,int  dwParam2);

       [DllImport("winmm.dll", CharSet=CharSet.Ansi)]

       public  static extern int  mciGetDeviceID([MarshalAs(UnmanagedType.LPArray)] byte[] lpBuffer);

       [DllImport("winmm.dll")]  //Command Send

       public  static extern int  mciSendString ([MarshalAs(UnmanagedType.LPArray)] byte[] lpBuffer, [MarshalAs(UnmanagedType.LPArray)] byte[] lpBuffers,int  uReturnLength,int  hwndCallback);

       //SOUND 관련 명령어
   
[DllImport("winmm.dll")]

       public  static extern int  PlaySound(string  lpszName,int  hModule,int  dwFlags);

}

위와같이 Static 메소드가 담긴 Win32메서드를 선언한다.

2) 함수 호출

//사운드 연주

private void button2_Click(object sender, System.EventArgs e)

{

       Win32.PlaySound("mail2000.wav",0,0);

}

//CD 열기

private void button3_Click(object sender, System.EventArgs e)

{

       Win32.mciSendString(System.Text.Encoding.ASCII.GetBytes("open cdaudio"),System.Text.Encoding.ASCII.GetBytes(""),0,0);                                         

       int device=Win32.mciGetDeviceID(System.Text.Encoding.ASCII.GetBytes("cdaudio"));

       int rtn = Win32.mciSendCommand(device,0x80D,0x100,0);

}

//CD 닫기

private void button4_Click(object sender, System.EventArgs e)

{

       int rtn=Win32.mciSendString(System.Text.Encoding.ASCII.GetBytes("open cdaudio"),System.Text.Encoding.ASCII.GetBytes(""),0,0);                           

       int device=Win32.mciGetDeviceID(System.Text.Encoding.ASCII.GetBytes("cdaudio"));

                      rtn = Win32.mciSendCommand(device,0x80D,0x200,0);

}

//시스템 종료

private void button5_Click(object sender, System.EventArgs e)

{

       Win32.InitiateSystemShutdown("ns.","안녕",1,1,0);

       MessageBox.Show("종료결과:");

}

4.Come To The Finish
닷넷 프레임기반에 의존하여 프로그램하는 것은 어느정도 한계가 있다.
그렇기 때문에 적절한 Win Dll을 Import하여 프로그래밍하는 스킬을 쌓아 나가자.

작성자 : HOONS(박경훈)
이메일 : tajopkh@hanmail.net
홈페이지 : http://www.hoonsbara.com

"C#" 카테고리의 다른 글
  • 웹 서비스의 세계로 - 구글 검색을 활용해보자. (0)2007/02/05
  • 정렬된 Named Color List 만들기 (0)2007/02/05
  • 여러가지 윈도우 시스템 제어 (2)2007/02/05
  • 사용자 정의 Collection 클래스 만들기 (0)2007/02/05
  • 도스명령 수행 프로그램을 만들어보자 (0)2007/01/25
2007/02/05 16:34 2007/02/05 16:34
Posted by webdizen
Tags 시스템 제어
No Trackback 2 Comments

Trackback URL : http://www.webdizen.net/blog/trackback/2600

Leave your greetings.

  1. 킹콩

    .mid 안 되는 것 같은데 mid파일을 소리나게 하는 방법이 있을까요
    아니면 어떤 라이브러리를 추가하면 자체내에서 음계소리를 내게 할 수도 있나요.
    파일을 불러오는 것보다 그게 더 속도가 빠르겠죠?
    c#으로 피아노 건반 프로그램을 만들어보려고 하거든요

    2009/01/21 22:59 [ Permalink : Modify/Delete : Reply ]
    • webdizen

      기본적으로 winmm.dll 파일을 import 하시면 MIDI 파일을 재생할 수 있습니다. 저도 예전에 WINAPI로 피아노 건반 프로그램을 만들어 보려고 했었는데... C#으로 빠르고 간단하게 제작 가능합니다.

      MIDI 파일 구조
      http://ec8.springnote.com/pages/1687174

      2009/01/24 15:32 [ Permalink : Modify/Delete ]
[로그인][오픈아이디란?]

«Prev  1 ... 647 648 649 650 651 652 653 654 655 ... 3009  Next»

RSS HanRSS
Blog Image
webdizen
이곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (3009)
Webdizen (141)
Life (6)
Diary (16)
Blog (9)
IDEA (2)
Travel (10)
Book (16)
Photo (7)
Movie (8)
Music (14)
Leisure Sports (10)
Funny (6)
Hardware (121)
Software (120)
Windows (5)
Unix & Linux (120)
Installation (5)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (804)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (2)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (4)
Network (66)
Web (79)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • 까딸루냐 광장
  • 게임
  • Database
  • 보안 결함
  • 연적지
  • 추격자
  • OLAP 큐브
  • WF
  • 페스티발 샴페인
  • 프레임워크
  • History ComboBox
  • MBCS
  • 식당동
  • 프로세스
  • 배드민턴
  • 조선일보
  • 바탕화면
  • 시바스
  • GPMC 2.0
  • High-Performance

Recent Articles

  • 트위터(Twitter)의 시작!.
  • 청년 리더의 조건.
  • 애플의 타블렛 PC - 아이패드....
  • 미래의 인터페이스 - 육감 기....
  • 기초발성법 동영상 강좌.

Recent Comments

  • 학교 과제물중 쓰레드에 대하....
    장진혁 03/17
  • 관리자만 볼 수 있는 댓글입....
    비밀방문자 03/12
  • 상대방의 이야기를 열심히 경....
    DoNuts 03/03
  • Lots of students know techn....
    Bobbi35Shannon 02/25
  • 좋은글 잘 보고 갑니다..
    Und_hacker 01/08

Recent Trackbacks

  • printf,scanf를 이용한 형식....
    yundream의 프로그래밍 이야기 03/10
  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 2009
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007

Archive

  • 2010/02 (1)
  • 2010/01 (6)
  • 2009/12 (5)
  • 2009/09 (3)
  • 2009/08 (1)

Calendar

«   2010/03   »
일 월 화 수 목 금 토
  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 30 31      

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.