2013-07-22 12 views
2

Windows에서 사용되는 플러그 앤 플레이 이벤트 메시지를 처리하는 방법에 대한 예제 및/또는 설명서가 있는지 궁금합니다. 이상적으로 내가 달성하고자하는 것은 틱에서 모든 COM 포트를 폴링 할 타이머가 필요없이 장치에 연결된 장치를 내 응용 프로그램에서 감지하도록 응용 프로그램을 감지하도록하는 것입니다. 이 작업을 수행하는 것은 매우 비효율적이며 애플리케이션의 CPU 사용량을 10 배로 늘리는 것으로 나타났습니다. 내 응용 프로그램은 C#이며 현재 .NET 4.0을 활용하고 있습니다. 다음 달에는 .NET 4.5로 업그레이드 할 예정입니다. 그래서 나는이 일을하는 방법에 관한 어떤 종류의 문헌을 찾기 위해 나간다. 이것이 플러그 앤 플레이 장치를 지원하는 내 주먹 모양이므로 비판에 대해 친절히 생각하십시오.C# 플러그 앤 플레이 이벤트 받기

편집 : 또한이 응용 프로그램이 더미 HwndSource을 사용하고 HwndSource.AddHook() 방법을 통해 이벤트 처리기를 추가하여 파일 브라우저를 쓸 때 내가 과거에이 이룬

답변

3

Windows 7 및 Windows XP에서 실행됩니다.

// In object constructor 
var hwndSource = new HwndSource(0, 0, 0, 0, 0, "", IntPtr.Zero); // Set up dummy HwndSource 
hwndSource.AddHook(sourceHook); 

IntPtr sourceHook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) 
{ 
    if (msg = WM_DEVICECHANGE) 
     if (wParam.ToInt32 == DBT_DEVICEARRIVAL) // Do what you need to do 
     if (wParam.ToInt32 == DBT_DEVICEREMOVALCOMPLETE) // Handle device removal 
} 
// Uses these defined constants: 
private const int WM_DEVICECHANGE = 0x219; 
private const int DBT_DEVICEARRIVAL = 0x8000; 
private const int DBT_DEVICEREMOVALCOMPLETE = 0x8004; 

WM_DEVICECHANGE에 대한 MSDN이 유용 할 수있는 다른 const를 정의에 대한 정보가 있습니다 http://msdn.microsoft.com/en-us/library/windows/desktop/aa363480(v=vs.85).aspx

+0

AWESOME을! 거기에 연결되어있는 장치의 이름을 얻는 방법은 없을 것입니다. 비록 이것이 없다해도 나는 확실히 tyvm을 찾고있는 것입니다. – Jimmy