Entwickler-Ecke

Windows API - Wenn beep dann ?


Cyberbob_at_tot - Mi 22.02.12 19:50
Titel: Wenn beep dann ?
Hallo zusammen,

ich hoffe ihr könnt mir helfen ? Ich habe das Problem, das ich einen Beep durch den internen Speaker lauter bekommen muss. Der Beep wird durch ein Externes Programm erzeugt. Leider ist es mir nicht gelungen, das ganze einfach über die Soundkarte zu leiten. Daher folgende überlegung. Kann ich irgentwie bei einem Beep eine Wavdatei wiedergeben lassen ?

Sprich : Wenn beep dann Wav :)

Mir ist nur kein Befehl bekannt, der mir einen Rückgabewert liefert, sobald der interne Speaker angesprochen wird.

Habt ihr Ideen zu diesem Thema ?

MFG

Cyberbob


Tilo - Mi 22.02.12 22:56

Kurze Überlegung:
Der Beep ist doch durch einen Ascii Code (Nr. 7?) repräsentiert. Vielleicht ist es mit einem globalen "Tastatur"hook möglich?
Eine Andere Möglichkeit ist es einen Rechner zu nehmen der keinen echten Pieper mehr hat sondern den Beep ebenfalls über das Standard Audiogerät abspielt. Hier grefit dann auch die Lautstärkeregelung.
Kurz in Kommandozeile getestet:
echo ^G erzeugt bei mir Piepser über die Lautsprecher. Habe einen Laptop. Wichtig: das "^G" ist nicht als "^"+"G" eingegeben sondern über die Tastenkombination [STRG]+G


Delphi-Laie - Do 23.02.12 00:02

user profile iconCyberbob_at_tot hat folgendes geschrieben Zum zitierten Posting springen:
Mir ist nur kein Befehl bekannt, der mir einen Rückgabewert liefert, sobald der interne Speaker angesprochen wird.


Dazu müßte zunächst einmal festgestellt werden, daß der "interne Speaker" bzw. die Soundkarte angesprochen wird. Das sind schonmal verschiedene Dinge. Zum Überwachen, was andere Programme mit Windows oder der Hardware anstellen, fällt mir spontan "globaler Hook" (über DLL-Unjektion) ein, um den windowsinternen Botschaftsnachrichtenverkehr zu überwachen.


Cyberbob_at_tot - Do 23.02.12 11:58

Das Problem hierbei ist, das es keinen Rechner, wie am NB zb. das der Speaker direkt über die Soundkarte geschleift wird, daher suche ich nach anderen Lösungsansätzen.

echo ^G hat bei mir leider nicht geklappt.

Aber ich schau mal ob ich die ASCII Zeichen loggen kann, dann sollte er ja bei 07 für Bel einen effekt zeigen.

Moderiert von user profile iconNarses: Beiträge zusammengefasst

ich habe das ganze nun mal so versucht...

Delphi-Quelltext
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:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
function TForm1.GetKey(Key: Word): string;
begin
  case Key of
    VK_LBUTTON   : Result := 'VK_LBUTTON';
    VK_RBUTTON   : Result := 'VK_RBUTTON';
    VK_CANCEL    : Result := 'VK_CANCEL';
    VK_MBUTTON   : Result := 'VK_MBUTTON';
    VK_BACK      : Result := 'VK_BACK';
    VK_TAB       : Result := 'VK_TAB';
    VK_CLEAR     : Result := 'VK_CLEAR';
    VK_RETURN    : Result := 'VK_RETURN';
    VK_SHIFT     : Result := 'VK_SHIFT';
    VK_CONTROL   : Result := 'VK_CONTROL';
    VK_MENU      : Result := 'VK_MENU';
    VK_PAUSE     : Result := 'VK_PAUSE';
    VK_CAPITAL   : Result := 'VK_CAPITAL';
    VK_ESCAPE    : Result := 'VK_ESCAPE';
    VK_SPACE     : Result := 'VK_SPACE';
    VK_PRIOR     : Result := 'VK_PRIOR';
    VK_NEXT      : Result := 'VK_NEXT';
    VK_END       : Result := 'VK_END';
    VK_HOME      : Result := 'VK_HOME';
    VK_LEFT      : Result := 'VK_LEFT';
    VK_UP        : Result := 'VK_UP';
    VK_RIGHT     : Result := 'VK_RIGHT';
    VK_DOWN      : Result := 'VK_DOWN';
    VK_SELECT    : Result := 'VK_SELECT';
    VK_PRINT     : Result := 'VK_PRINT';
    VK_EXECUTE   : Result := 'VK_EXECUTE';
    VK_SNAPSHOT  : Result := 'VK_SNAPSHOT';
    VK_INSERT    : Result := 'VK_INSERT';
    VK_DELETE    : Result := 'VK_DELETE';
    VK_HELP      : Result := 'VK_HELP';
    VK_NUMPAD0   : Result := 'VK_NUMPAD0';
    VK_NUMPAD1   : Result := 'VK_NUMPAD1';
    VK_NUMPAD2   : Result := 'VK_NUMPAD2';
    VK_NUMPAD3   : Result := 'VK_NUMPAD3';
    VK_NUMPAD4   : Result := 'VK_NUMPAD4';
    VK_NUMPAD5   : Result := 'VK_NUMPAD5';
    VK_NUMPAD6   : Result := 'VK_NUMPAD6';
    VK_NUMPAD7   : Result := 'VK_NUMPAD7';
    VK_NUMPAD8   : Result := 'VK_NUMPAD8';
    VK_NUMPAD9   : Result := 'VK_NUMPAD9';
    VK_MULTIPLY  : Result := 'VK_MULTIPLY';
    VK_ADD       : Result := 'VK_VKADD';
    VK_SEPARATOR : Result := 'VK_SEPARATOR';
    VK_SUBTRACT  : Result := 'VK_SUBTRACT';
    VK_DECIMAL   : Result := 'VK_DECIMAL';
    VK_DIVIDE    : Result := 'VK_DIVIDE';
    VK_F1        : Result := 'VK_F1';
    VK_F2        : Result := 'VK_F2';
    VK_F3        : Result := 'VK_F3';
    VK_F4        : Result := 'VK_F4';
    VK_F5        : Result := 'VK_F5';
    VK_F6        : Result := 'VK_F6';
    VK_F7        : Result := 'VK_F7';
    VK_F8        : Result := 'VK_F8';
    VK_F9        : Result := 'VK_F9';
    VK_F10       : Result := 'VK_F10';
    VK_F11       : Result := 'VK_F11';
    VK_F12       : Result := 'VK_F12';
    VK_F13       : Result := 'VK_F13';
    VK_F14       : Result := 'VK_F14';
    VK_F15       : Result := 'VK_F15';
    VK_F16       : Result := 'VK_F16';
    VK_F17       : Result := 'VK_F17';
    VK_F18       : Result := 'VK_F18';
    VK_F19       : Result := 'VK_F19';
    VK_F20       : Result := 'VK_F20';
    VK_F21       : Result := 'VK_F21';
    VK_F22       : Result := 'VK_F22';
    VK_F23       : Result := 'VK_F23';
    VK_F24       : Result := 'VK_F24';
    VK_NUMLOCK   : Result := 'VK_NUMLOCK';
    VK_SCROLL    : Result := 'VK_SCROLL';
  else
    Result := 'Zeichentaste: '+ Chr(Key);
  end;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;  Shift: TShiftState);
begin
  Edit1.Text := GetKey(Key);
  Edit2.Text := '0x' + IntToHex(Key,2);
  Edit3.Text := IntToStr(Key);
end;

Funktioniert beim Tastendruck soweit gut. Wenn ein Beep kommt reagiert er nicht, ist ja auch klar, da ich bei FormKeyUp gesagt habe. Wie kann ich den Beep nun abfangen ?

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Xion - Do 23.02.12 12:24

Vielleicht hilft dir das weiter:
http://delphi.about.com/od/kbwinshell/a/delphi_hook.htm


Cyberbob_at_tot - Do 23.02.12 13:10

wow ist mir persönlich zu hoch muss ich zugeben.

Kennt sich jemand damit näher aus ?


Xion - Do 23.02.12 13:28

Also ich nicht, aber in der Library gibts zumindest was dazu:
http://www.delphi-library.de/viewtopic.php?t=101&highlight=hook


Delphi-Laie - Do 23.02.12 14:40

user profile iconCyberbob_at_tot hat folgendes geschrieben Zum zitierten Posting springen:
wow ist mir persönlich zu hoch muss ich zugeben.

Kennt sich jemand damit näher aus ?


Assarbads Hook- und DLL-Anleitung helfen weiter.


Nersgatt - Do 23.02.12 15:57

Crossposts bitte verlinken: http://www.delphipraxis.net/166635-wenn-beep-dann.html#post1152386