Source file: /~heha/hsn/t_und_m.zip/SRC/PnpEvent.c

#include <windows.h>
#include <dbt.h>
// Rüstet unter Win98 die XP-typischen USB-Ansteck- und Abzieh-Geräusche nach
// Einstellen der Sounds nach erstmaligem Start dieses Mini-Programms
// in der Systemsteuerung, unter »Akustische Signale«, »Geräteverbindung« u.ä.
// Die Sounds sind benutzer-spezifisch!

// Compiler-Option /GZ entfernen für NoDefaultLib!
#pragma comment(linker,"/NODEFAULTLIB /OPT:nowin98")
#pragma comment(linker,"/LARGEADDRESSAWARE /RELEASE")
#define elemof(x) (sizeof(x)/sizeof((x)[0]))
#define T(x) TEXT(x)
typedef enum {false,true} bool;

HINSTANCE HInstance;

bool RegQueryCurrent(HKEY key,LPCTSTR name,LPSTR value,LONG len) {
 HKEY key2;
 bool ret=false;
 if (RegOpenKey(key,name,&key2)==ERROR_SUCCESS) {
  if (RegQueryValue(key2,T(".Current"),value,&len)==ERROR_SUCCESS
  &&  len>1) ret=true;
  RegCloseKey(key2);
 }
 return ret;
}

LRESULT CALLBACK WindowProc(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam) {
 switch (Msg) {
  case WM_DEVICECHANGE: {
   LPCTSTR p=NULL;
   HKEY key;
   switch (wParam) {
    case DBT_DEVICEARRIVAL:		p=T("DeviceConnect"); break;
    case DBT_DEVICEREMOVECOMPLETE:	p=T("DeviceDisconnect"); break;
   }
   if (!p) break;
   if (!RegOpenKey(HKEY_CURRENT_USER,T("AppEvents\\Schemes\\Apps\\.Default\\"),&key)) {
    TCHAR s[MAX_PATH];
    if (RegQueryCurrent(key,p,s,sizeof(s))) {
     sndPlaySound(s,SND_ASYNC);
     p=NULL;		// Sound ist abgespielt
    }
    RegCloseKey(key);
   }
   if (p) MessageBeep(0);
  }break;

  case WM_DESTROY: {
   PostQuitMessage(0);
  }break;
 }
 return DefWindowProc(Wnd,Msg,wParam,lParam);
}

void RegSet(HKEY key,LPCTSTR name,LPCTSTR value) {
 TCHAR buf[256];
 if (!HIWORD(value)) {
  LoadString(HInstance,(UINT)value,buf,elemof(buf));
  value=buf;
 }
 RegSetValue(key,name,REG_SZ,value,lstrlen(value));
}

void RegCreateCurrent(HKEY key,LPCTSTR name) {
 HKEY key2,key3;
 RegCreateKey(key,name,&key2);
 RegCreateKey(key2,T(".Current"),&key3);
 RegCloseKey(key3);
 RegCloseKey(key2);
}

int _stdcall WinMainCRTStartup(void) {
 static WNDCLASS wc={
  CS_HREDRAW|CS_VREDRAW,
  WindowProc,
  0,0,0,0,0,
  (HBRUSH)(COLOR_WINDOW+1),
  NULL,T("PnpEvent")};
 MSG msg;
 HKEY key;

 HInstance=GetModuleHandle(NULL);

 if (RegOpenKey(HKEY_CURRENT_USER,T("AppEvents\\EventLabels"),&key)) return 1;
 RegSet(key,T("DeviceConnect"),MAKEINTRESOURCE(1));
 RegSet(key,T("DeviceDisconnect"),MAKEINTRESOURCE(2));
 RegSet(key,T("DeviceFail"),MAKEINTRESOURCE(3));
 RegCloseKey(key);
 if (RegOpenKey(HKEY_CURRENT_USER,T("AppEvents\\Schemes\\Apps\\.Default"),&key)) return 1;
 RegCreateCurrent(key,T("DeviceConnect"));
 RegCreateCurrent(key,T("DeviceDisconnect"));
 RegCreateCurrent(key,T("DeviceFail"));
 {TCHAR s[512];
// Erstmaliger Start: Hinweis ausgeben
  if (!RegQueryCurrent(key,T("DeviceConnect"),s,sizeof(s))
  &&  !RegQueryCurrent(key,T("DeviceDisconnect"),s,sizeof(s))) {
   LoadString(HInstance,4,s,elemof(s));
   if (MessageBox(0,s,T("PnpEvent"),MB_ICONEXCLAMATION|MB_OKCANCEL)!=IDOK) return 0;
   WinExec("control.exe",SW_SHOW);
  }
 }
 RegCloseKey(key);

 wc.hInstance=HInstance;
 wc.hCursor=LoadCursor(0,IDC_ARROW);
 RegisterClass(&wc);

 CreateWindow(wc.lpszClassName,T("PnpEvent"),
  /*WS_VISIBLE|*/WS_OVERLAPPEDWINDOW,
  CW_USEDEFAULT,CW_USEDEFAULT,100,100,
  0,0,HInstance,NULL);

 while (GetMessage(&msg,0,0,0))	{
  DispatchMessage(&msg);
 }
 return msg.wParam;
}
Detected encoding: ANSI (CP1252)4
Wrong umlauts? - Assume file is ANSI (CP1252) encoded