Hi,
ich bin am verzweifeln, hab nun seit 7 Stunden erfolglos versucht eine Message an eine bereits laufende Instanz meines Programms zu senden (mein Programm läuft nur im Systray). Ich habs mit allem versucht, 5 verschiedene Tutorials deutsch, englisch, dll's vorgefertigte Module NIX klappt.
Ich schreibe jetzt einfach mal das wo ich im Moment gelandet bin, wahrscheinlich war ich zwischendurch näher dran, aber ich hoffe ihr könnt mir bei nem übersichtlicheren Code besser helfen:
In meiner Form aktiviere ich dann subclassing (Form_Load): DoSubClass Me.hwnd und UndoSubClass am Ende (Unload)
Public Sub DoSubClass(ByVal hwnd As Long)
WinHandle = hwnd
VorigeAddr = SetWindowLongA(hwnd, GWL_WNDPROC, _
AddressOf TestWndProc)
End Sub
Public Sub UndoSubClass()
SetWindowLongA WinHandle, GWL_WNDPROC, VorigeAddr
End Sub In TestWndProc teste ich dann auf bestimmte Nachrichten:
Public Function TestWndProc( _
ByVal hwnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
If uMsg = &H9000 Then
started_yet = started_yet + 1
nid.szTip = started_yet & "mal gestartet" & vbNullChar
Shell_NotifyIcon NIM_MODIFY, nid
End If
'Nachricht weiterleiten:
TestWndProc = CallWindowProcA(VorigeAddr, hwnd, _
uMsg, wParam, lParam)
End Function Und in Form_Unload weise ich noch das Programm an ne Nachricht an die bereits laufende Instanz zu senden und sich dann selbst zu beenden.
If App.PrevInstance Then
Dim RetVal As Long
Dim n As Long
RetVal = FindWindow(vbNullString, "FormName")
'MsgBox (RetVal)
If RetVal <> 0 Then
n = SendMessage(RetVal, &H9000, 0, 0)
Unload Me
Else: started_yet = 1
End If
End If Ich hab jetzt so viel ausprobiert, und ne ganze Menge kompliziertere Sachen dabei, aber für mich erscheint es einfach logisch, dass es so funktionieren müsste. Zum Test habe ich mir mein RetVal per msgbox ausgeben lassen und erhalte beim ersten Start logischerweise keine msgbox weil app.previnstance=false, aber beim zweiten Start erhalte ich absolut unverständlicherweise eine nicht aufhörende Menge von msgbox'en...Form_Load wird doch nur einmal aufgerufen oder???
Bitte helft mir, ihr seid meine letzte Hoffnung!
MfG DreamFlasher
I'm not perfect...yet! (MacGyver)
You know the story: Girl meets boy, girl changes boy's subroutines. (Janeway)
I'll be honest with you. My name's not Kirk. It's Luke Skywalker. (Jack O'Neill) |