Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi COM ports im Griff bekommen (https://www.delphipraxis.net/93752-com-ports-im-griff-bekommen.html)

Robert Marquardt 11. Jun 2007 18:33

Re: COM ports im Griff bekommen
 
Deppen haben ueblicherweise immer was zum Reinstecken. :-)

messie 11. Jun 2007 19:03

Re: COM ports im Griff bekommen
 
angesichts der Ergebnislage gehört dieser thread sowieso in Klatsch und Trasch verschoben...

Robert Marquardt 12. Jun 2007 04:18

Re: COM ports im Griff bekommen
 
Wie waer es mal nach den SysInternal Tools zu suchen wie vorgeschlagen?

WS1976 12. Jun 2007 05:11

Re: COM ports im Griff bekommen
 
Hallo Robert,

Sysinternals bringt uns keinen Schritt weiter. Wie willst du die Tools in deinem eigenen prog verwenden? Wir haben uns da schwindlig gesucht und nichts gefunden.
Ich meine ich habe irgendwo ein Stück Code mit dem man ( ohne try and error ) feststellen kann ob die com offen ist oder nicht.
Ich suche danach. Wenn ich fündig werde stell ich das hier ein.

Grüsse
Rainer

ErazerZ 12. Jun 2007 06:29

Re: COM ports im Griff bekommen
 
Zitat:

Zitat von WS1976
Hallo Robert,

Sysinternals bringt uns keinen Schritt weiter. Wie willst du die Tools in deinem eigenen prog verwenden? Wir haben uns da schwindlig gesucht und nichts gefunden.
Ich meine ich habe irgendwo ein Stück Code mit dem man ( ohne try and error ) feststellen kann ob die com offen ist oder nicht.
Ich suche danach. Wenn ich fündig werde stell ich das hier ein.

Grüsse
Rainer

Naja das ist ganz einfach, zum Beispiel:
Delphi-Quellcode:
{
  Result: Wenn benutzt wird dann True, sonst False.
}
function IsComOpen(wPort: Word): Boolean;
var
  hCom: THandle;
const
  lpszPort = '\\.\COM%d\';
begin
  Result := True;
  hCom := CreateFile(PChar(Format(lpszPort, [wPort])), GENERIC_READ or GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
  if (hCom <> INVALID_HANDLE_VALUE) then
  begin
    Result := not CloseHandle(hCom);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  if IsComOpen(1) then
    ShowMessage('Wird benutzt')
  else
    ShowMessage('Geht scho!');
end;

WS1976 12. Jun 2007 08:04

Re: COM ports im Griff bekommen
 
Hallo,

das ist genau die Methode, die ich mit "try and error" beschrieben habe.
Ich mache den Port auf und wieder zu, wenns schief geht hab ich halt Pech gehabt.
Das ist so keine akzeptable Lösung. Ich will ohne Öffnungsversuch festellen was mit der
Schnittstelle los ist.
Was macht ich wenn sie besetzt ist booten?

Grüsse
Rainer

Robert Marquardt 12. Jun 2007 08:24

Re: COM ports im Griff bekommen
 
Das ist genau die Stelle an der dein Programm sich bescheiden muss. Wenn die Schnittstelle in Benutzung ist, dann ist sie eben in Benutzung. Du beschreibst das softwaretechnische Aequivalent von Arroganz.

WS1976 12. Jun 2007 08:53

Re: COM ports im Griff bekommen
 
Hallo Robert,

das sehe ich nicht so. Was ist denn illegal (oder arrogant) daran wenn man nach einer etwas eleganteren Methode, zum feststellen ob der Port belegt ist oder nicht, sucht.
Ich weiss dass das geht ( habs schon gemacht kanns aber im Moment nicht finden )

Zum Hintergrund:
Wir stellen professionelle Tools zur Zählerauslesung oder zur Parametrierung anderer Geräte her.
Da die Kommunikation noch sehr oft direkt über RS232 oder über virtuelle Com Ports läuft ist dieses Problem für uns existentiell wichtig.
Wer auch immer einen Com Port blockiert, es hilft nur noch ein völliges Ausschalten des Systems.

Ich finde es überhaupt nicht arrogant festzustellen wer die Schnittstelle im Griff und diese Verbindung, natürlich auf Nachfrage, zu killen.

Grüsse
Rainer

Robert Marquardt 12. Jun 2007 09:48

Re: COM ports im Griff bekommen
 
Es genuegt dann aber festzustellen welches Programm die Schnittstelle belegt und dieses per Hand zu beenden oder zu deinstallieren.
Das Problem auf die harte Art zu loesen, indem man das andere Programm killt (oder zumindest die Verbindung) ist eben "Arroganz". Das eigene Programm ist wichtiger als das andere.
Es liegt natuerlich ein Fehler vor wenn ein Programm einen COM Port blockiert, obwohl nicht das Geraet dranhaengt mit dem man reden will.

messie 12. Jun 2007 10:30

Re: COM ports im Griff bekommen
 
Zitat:

Zitat von Robert Marquardt
Es genuegt dann aber festzustellen welches Programm die Schnittstelle belegt und dieses per Hand zu beenden oder zu deinstallieren.

Dafür hatten wir jetzt aber noch keine Lösung, die sich in ein Delphi-Programm einbinden läßt. Und damit ist auch keine Überwachung einer Schnittstelle möglich, die z.B. rechtzeitig den Zustand meldet, so daß man das Problem ohne Keule beheben kann.
Zitat:

Zitat von Robert Marquardt
Das Problem auf die harte Art zu loesen, indem man das andere Programm killt (oder zumindest die Verbindung) ist eben "Arroganz". Das eigene Programm ist wichtiger als das andere.

Wichtig ist, daß das System korrekt funktioniert, die Software (egal welche) ist dem untergeordnet. Technik kennt keine Arroganz.

Grüße, Messie


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

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