Handle einer Klasse



  • Tag zusammen,

    ich steuere in C# über eine DLL ein Industrie-Gerät an. Dieses verlangt für einen Funktionsaufruf ein Handle (HWND), um über dieses anschließend eine Message zu senden, wenn die ausgeführte Aktion beendet wurde.

    Mein Problem: soweit ich das verstanden habe, kann ich ein Handle nur von einem Control bekommen? Ich möchte aber ohne einen Bezug zur Nutzeroberfläche arbeiten, also nur ein Handle nutzen und mit dessen Hilfe die entsprechende Nachricht abfangen und auswerten.

    Ist das prinzipiell möglich? Wenn ja, wie sieht der Ansatz aus? Ein paar Links oder kurze Erklärungen wären ausreichend, den Code schreib ich mir dann schon selbst zusammen 😉

    Vielen Dank schonmal 😉





  • BeNNeR schrieb:

    Dieses verlangt für einen Funktionsaufruf ein Handle (HWND), um über dieses anschließend eine Message zu senden, wenn die ausgeführte Aktion beendet wurde.

    [Gefährliches Halbwissen]
    In irgendeiner WinForm musst Du ja die WndProc überschreiben um die Message zu erhalten. Dann kannst Du ja this.Handle dieser Form übergeben.
    [/Gefährliches Halbwissen]



  • Servus,

    du kannst in deiner Klasse einen Thread basteln, der zyklisch die Messages aus der WindowsMessageLoop herausholt und kontrolliert. Ist aber unnötige Arbeit, denn deine eigentliche Form horscht eh ständig auf Windows Messages ohne das du auch nur eine Zeile Code schreiben musst.

    Deswegen gib der aufzurufenden Methode das Handle deiner Mainform oder eines Dialogs. Dann überschreibst du, wie schon µ gesagt gat, die WndProc und fängst deine Nachricht ab.

    Bsp:

    protected override void WndProc(ref Message m)
    {
        switch ( m.Msg )
        {
            case 0xFF02:
                Trace.WriteLine(System.Runtime.InteropServices.Marshal.PtrToStringAnsi(m.LParam));
                break;
        }
    
        base.WndProc(ref m);
    }
    

    0xFF02 ist in dem Fall der Nachrichtenidentifier. Ich habe es genutzt um den in "LParam" enthaltenen string zu tracen.

    gruß
    Hellsgore


Anmelden zum Antworten