#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: UTF-8 | 0
|