Programm soll auf externe Ereignisse reagieren

Ampfing

Grünschnabel
Guten Morgen zusammen,

mein Problem ist ein etwas komplexeres:
Ich habe ein Gerät, das über einen Windows Rechner mit GPIB-Schnittstelle gesteuert wird. Auf dem Rechner läuft eine Benutzeroberfläche, die in VisualBasic.NET programmiert ist.
Jetzt kommt es vor, dass das Gerät Signale an den Rechner schickt (bzw. schicken soll).
Meine Frage: Wie kriege ich die Software dazu auf diese Signale zu reagieren? Dazu müsste Windows ja wohl auf einen Interrupt der GPIB-Karte reagieren, oder? Wie schreibe ich eine Interrupt Service Routine für Windows (die Nummer des Interrupts sollte sich noch ermitteln lassen, das ist das kleinere Problem)? Wie bringt man VisualBasic.NET allgemein dazu, dass es wartet, bis ein bestimmtes Ereignis eintritt?
Vermutlich sollte ich noch dazusagen, dass ich absoluter Anfänger auf dem Gebiet VisualBasic.NET bin und es auch nur deswegen betreibe, weil die Software schon vorhanden ist.

Danke auf jeden Fall schonmal fürs lesen und hoffentlich kann mir jemand helfen
 
Hallo, mir sagt GPIB nichts, aber selbst eine IRQ Routine schreiben unter XP!? Auf gut deutsch wir schreiben einen API Gerätetreiber, Das wird nicht leicht (zumindest für mich).
Gibt es zu dieser Karte keine API-Schnittstellen (xyz.DLL) mit Dokumentation?

Gruss
frank
 
Wenn mich nicht alles irrt, kannst Du mit 'SetWindowLong' i.V.m. 'GWL_WNDPROC' die Messages an Deine Anwendung leiten und dort mit 'CallWindowProc' die Nachrichten auch normal verarbeiten lassen.

Das heißt, die Nachrichten werden ganz normal verarbeitet aber Du hast eben auch die Information daß eine verarbeitet wurde.

Ich bin mir nur nicht sicher, ob es möglich ist die WndProc eines anderen Fenster so ohne weiteres zu hooken, eventuell musst Du mit 'CreateRemoteThread' arbeiten um Zugriff darauf zu kriegen.
 
Hallo zusammen,

da ich ehrlich gesagt nicht wo wahnsinnig tief in VB.NET drin bin (bin purer Anfänger und beschäftige mich nur damit, weil ich muss...) und auch nicht wirklich tief einsteigen möchte, werde ich es wohl eher so machen, dass ich einen Timer aufziehe und den alle 10ms überlaufen lasse.
Beim Überlauf frägt er dann ein Bit der Karte ab und wenn das gesetzt ist weiß er, dass er weiter machen kann.
Viele Dank für eure Hilfe!

Viele Grüße
 
Zurück