Dit is de gehele code van dat programmaatje:
(dit in een module)
Global test As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpszClassName As String, ByVal lpszWindow As String) As Long
Declare Function IsIconic Lib "user32" (ByVal hWnd As Long) As Long
Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal _
hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As _
Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal _
nCmdShow As Long) As Long
Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
Public Const HWND_TOP = 0
Public Const HWND_BOTTOM = 1
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOACTIVATE = &H10
Public Const SWP_SHOWWINDOW = &H40
Public Const SWP_NOMOVE = &H2
Public Const SWP_HIDEWINDOW = &H80
Public Const SWP_NOZORDER = &H4
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNA = 8
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_NORMAL = 1
(en dit in de form)
Private Sub Timer1_Timer()
test = FindWindow("TMessageForm", "Titel")
If test <> 0 Then
If IsIconic(test) Then
ShowWindow test, SW_NORMAL
End If
SetWindowPos test, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW Or SWP_NOSIZE Or SWP_NOMOVE
MediaPlayer1.Open ("c:\sound.wav")
SendKeys "{enter}"
End If
End Sub
Op de form zelf dus eigenlijk alleen een timer die ik in dit geval een interval van 1000ms oftewel 1 seconde heb gegeven en een MediPlayer component om het geluid te spelen.
Eigenlijk hoefde ik volgens mij alleen deze code te hebben:
Global test As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpszClassName As String, ByVal lpszWindow As String) As Long
Private Sub Timer1_Timer()
test = FindWindow("TMessageForm", "Titel") '( 'TMessageForm' is hier de 'classname' van de messagebox. Normaal is de classname van een messagebox volgens mij anders, maar misschien is het hier zo omdat het programma waar die messagebox van komt in delphi is geschreven ofzo..
If test <> 0 Then
MediaPlayer1.Open ("c:\sound.wav")
End If
End Sub
Maar omdat ik de timer toch aan laten draaien terwijl de melding al was geweest, heb ik met die code ervoor gezorgd dat de melding het actieve venster wordt en er vervolgens een "enter" wordt gestuurd om de melding weg te halen zodat het geluid niet blijft afspelen.
p.s.
Het lastigste was nog om achter de class van de mssagebox te komen. Ik heb hiervoor een andere code gebruikt waar ik nu nog maar een deel van over heb:
Private Declare Function GetClassName Lib "user32" Alias _
"GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName _
As String, ByVal nMaxCount As Long) As Long
Als er iemand is die de rest ook wil hebben moet die het maar even zeggen, zodat ik het opzoek.