vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
FindWindow - SendMessage to NotifyIcon 
Autor: DreamFlasher
Datum: 13.11.05 14:16

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)

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
FindWindow - SendMessage to NotifyIcon1.274DreamFlasher13.11.05 14:16
Re: FindWindow - SendMessage to NotifyIcon634DreamFlasher26.11.05 10:22

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel