messagebox uit een andere applicatie

Status
Niet open voor verdere reacties.

Colin

Gebruiker
Lid geworden
20 jul 2001
Berichten
56
Ik wil graag een klein programmatje maken dat een geluid afspeelt als er een bepaalde messagebox komt van een ander programma.
Inmiddels ben ik er wel achter gekomen hoe je kan kijken of het specifieke programma geopend is.
Maar wat ik nu wil weten, is hoe mijn programma het merkt als die messagebox tevoorschijn komt.

Ik hoop dat het nog te begrijpen is wat ik wil en bijvoorbaat dank voor de hulp :P
 
Laatst bewerkt:
Dit bricht kan inmiddels wel verwijderd worden...
Niet lang nadat ik het had geschreven was ik er zelf al achter gekomen :P
 
misschien leuk om jouw code voor dit "probleem" te posten, heb wel meer vragen van dit aard gezien hier ....
 
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.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan