2008-09-02 6 views
4

WMI를 사용하여 "장치 추가/장치 제거"이벤트에 등록하려고합니다. 내가 장치라고 할 때 - 나는 Disk-On-Key 라인이나 그 장치에 액세스 할 수있는 파일이있는 다른 장치를 의미합니다 ...WMI 및 Win32_DeviceChangeEvent - 잘못된 이벤트 유형이 반환 되었습니까?

이벤트에 등록 중이며 이벤트가 발생했습니다. ,하지만 EventType 프로퍼티는 내가 기대하는 것과 다릅니다.

설명서 (MSDN)는 : 1- 구성 변경, 2- 장치 추가, 3- 장치 제거 4- 도킹. 웬일인지 나는 항상 1의 가치를 얻는다.

어떤 아이디어라도?

public class WMIReceiveEvent 
{ 
    public WMIReceiveEvent() 
    { 
     try 
     { 
      WqlEventQuery query = new WqlEventQuery(
       "SELECT * FROM Win32_DeviceChangeEvent"); 

      ManagementEventWatcher watcher = new ManagementEventWatcher(query); 
      Console.WriteLine("Waiting for an event..."); 

      watcher.EventArrived += 
       new EventArrivedEventHandler(
       HandleEvent); 

      // Start listening for events 
      watcher.Start(); 

      // Do something while waiting for events 
      System.Threading.Thread.Sleep(10000); 

      // Stop listening for events 
      watcher.Stop(); 
      return; 
     } 
     catch(ManagementException err) 
     { 
      MessageBox.Show("An error occurred while trying to receive an event: " + err.Message); 
     } 
    } 

    private void HandleEvent(object sender, 
     EventArrivedEventArgs e) 
    { 
     Console.WriteLine(e.NewEvent.GetPropertyValue["EventType"]); 
    } 

    public static void Main() 
    { 
     WMIReceiveEvent receiveEvent = new WMIReceiveEvent(); 
     return; 
    } 
} 

답변

0

오 :

다음은 샘플 코드입니다! 그래, 나는 그 동안 겪어 왔지만 어떤 종류의 미디어 삽입을 감지 한 ActiveX 컨트롤을 개발하면서 얼마 전에 원시 Windows API 호출을 사용합니다. 내 백업에서 코드를 발굴하고 내가 어떻게 해결했는지 알 수 있는지 알아볼 것입니다. 누군가가 먼저 도착할 경우를 대비하여 RSS 구독을 신청할 것입니다.

1

글쎄, 코드를 찾을 수 없습니다. 내 오래된 RAC 계정을 사용해 보았습니다. 내 오래된 백업에는 아무것도 없어. 그림을 이동. 하지만 내가 그것을 어떻게 해결해야했는데, 나는 이것이 올바른 순서 (I이 article에 많은 기준) 생각 :

  1. 모든 드라이브 문자 및 캐시 을 가져옵니다.
  2. WM_DEVICECHANGE 메시지를 기다리는, 그리고 (이/당신이 USB 키를 삽입하자마자 시작으로 을 시작 가짜 WM_DEVICECHANGE 메시지를 많이 피 로 이루어집니다 1 초 타임 아웃 타이머를 시작합니다 다른 장치가 있고 드라이브가 "정착 된"경우에만 끝나야 함).
  3. 드라이브 문자를 이전 캐시와 비교하고 새 캐시를 검색하십시오.
  4. 해당 장치에 대한 정보를 얻으십시오.

나는 다른 방법이 알고,하지만 다른 버전의 Windows에서 지속적으로 일하는 것이 유일한 것으로 판명, 우리는 필요 나의 클라이언트는 이미지를 업로드 웹 페이지에서 ActiveX 컨트롤을 사용 당신이 삽입 한 장치의 종류 (나는 그들이 일종의 인쇄 키오스크를 생산했다고 생각한다).

0

음,

유 win32_logical 디스크 클래스를 시도하고 __Instancecreationevent에 바인딩 할 수 있습니다. 당신은 쉽게 필요한 정보를 얻을 수 있습니다

0

나는 내 시스템에서 이것을 시도하고 결국 올바른 코드를 얻습니다. 그것은 단지 시간이 걸립니다. 나는 12 가지 정도의 이벤트를 얻었고 그 중 하나는 디바이스 연결 코드입니다.