Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Comport sperren? (https://www.delphipraxis.net/73668-comport-sperren.html)

Privateer3000 21. Jul 2006 14:29


Comport sperren?
 
Hi folks,

Wie stellt man das an, wenn man einen Comport sperren
möchte das da kein Signal ankommt oder ins nirvana umgeleitet wird.
Sinn und Zweck ist, am Comport ist ein Interface für eine Steuerung
angeschlossen. Es sollte aber möglich gemacht werden,dass selbst wenn
normalerweise ein chr an den Port gesendet wird, diesen abzufangen.
Per button vielleicht...aber auch wieder den Port einschalten.
Ich benutze die CPortLib von Sourceforge.

Ich hoffe ungefähr richtig formuliert zu haben , was ich möchte ;-)

Lg
Privateer

Der_Unwissende 21. Jul 2006 14:35

Re: Comport sperren?
 
HI,
kannst du bitte etwas genauer sagen was du möchtest? Möchtest du aus deiner Anwendung nur bei Bedarf auf den Port zugreifen oder möchtest du, dass der Port unter Windows für jedes Programm nicht zugänglich ist?

Gruß Der Unwissende

Privateer3000 21. Jul 2006 14:41

Re: Comport sperren?
 
Hi,
es geht immer noch um die Kassenschublade.
Es soll per button verhindert werden das die
Lade, die jam Comport ist, geöffnet werden kann.
Sprich dieses und ein anderes Programm welches dies
tut. Also systemweit den Comport dicht machen oder wieder
öffnen.
Danke!

Der_Unwissende 21. Jul 2006 14:47

Re: Comport sperren?
 
Also der einfachste Weg ist, dass du einfach dafür sorgst, dass dein Programm sehr früh gestartet wird (z.B. im Autostart) und dann auch gleich Connected = True setzt. Wird der ComPort erstmal von einer Applikation verwendet, so ist der Zugriff von aussen gesperrt. Das könnte dann auch dein Problem werden, wenn eine andere Anwendung den Port vor dir öffnet und offen hält.
In deinem eigenen Programm kannst du dann sehr leicht regeln, wann wirklich etwas gesendet wird und wann nicht. Hier reicht ja eine einfache if-Abfrage aus. Je nachdem ob irgendwas gemacht wurde wird dann über den Port gesendet oder nicht.

Privateer3000 21. Jul 2006 14:50

Re: Comport sperren?
 
Nein, es muss gewährleistet sein,
dass auch andere Programme noch
darauf zugreifen können und müssen.

Der_Unwissende 21. Jul 2006 15:04

Re: Comport sperren?
 
Hm, dass macht die Sache natürlich nicht leichter.
Also ich weiß dir hier nicht weiter zu helfen. Ich denke es gibt mehrere Möglichkeiten (mit denen ich mich in dem Fall dann zu wenig auskenne).
Das eine ist, dass es wirklich eine Methode gibt den Port zu aktivieren/deaktivieren.
Die andere Möglichkeit ist es, dass du mit einem Hook arbeitest. Dann würdest du immer mitbekommen, wenn jmd. etwas an den Port schicken möchte und kannst es ggf. einfach umleiten.
Die letzte Möglichkeit wäre es, dass du einen virtuellen Port erstellst (keine Ahnung wie, dürfte auch auf Hooks basieren), den alle Programme ansprechen. Hier kannst du dann wieder weiterleiten oder nicht.
Das alles ist wohl nicht ohne. Musst du mal schauen ob hier schon jmd. etwas in der Richtung versucht hat und/oder ob du vielleicht bei Google fündig wirst.

Vielleicht hat ja auch jmd. anderes einen Vorschlag!

Privateer3000 21. Jul 2006 15:28

Re: Comport sperren?
 
Was würde passieren, wenn ich mit Open
den Port öffne (per Button)? Ist er
dann für andere Anwendungen gesperrt?
Und zum freigeben wieder close sende?

Der_Unwissende 21. Jul 2006 16:16

Re: Comport sperren?
 
Wenn du den mittels open öffnest, dann werden die anderen Programme meckern. Da solltest du deswegen auch immer ein try ... except um eine eigene Anwendung bauen. Es kann immer mal was passieren (nur nebenbei bemerkt).
Jedenfalls ist im Besten Fall ein solches Ereignis behandelt und du siehst einfach, dass der Port in Benutzung sei. In schlechteren Fällen führt das zu einer runtime Exception, die nicht behandelt wird (Programm stürzt ab). Aber schreiben kann keiner.
Probier es einfach mal aus. Schreib dir ein Programm, dass einfach nur den Port öffnet. Das startest du und während es läuft rufst du das Hyperterminal auf und versuchst dich mit dem gleichen Port zu verbinden.

Privateer3000 21. Jul 2006 23:49

Re: Comport sperren?
 
Dann bliebe ja nur, sendungen an den/die Port(s) abzufangen und umzuleiten...
Hat jemand eine solche Idee?

jensw_2000 22. Jul 2006 02:41

Re: Comport sperren?
 
Das Abfangen funktioniert imho nicht so einfach.
Wenn die Kassensoftware z.B. den Port permanent offen hält, dann kannst du ihn nicht nehr Öffnen oder anderweitig "verbiegen", um den Steuerbefehl abzufangen.
Sollte die Kassensoftware den Port bei Bedarf belegen, kannst du ihn duch permanentes Offenhalten blockieren. Kabel rausziehen bewirkt das Selbe und erfordert keine Programmierarbeit.

Eventuell findest du irgendwo Hinweise zur Erstellung eines SerialPort Treibers. Dann kannst du dir einen für einen virtuellen COM-Post basteln, über den du die Kassensoftware mit deinem "Filter-Tool" verbindest. Dann kannst du alle, an den Virt-Com-Post gesendeten Daten prüfen, verändern und anschliessend an den COMx weiterleiten.


Schöne Grüße,
Jens
:hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:19 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz