net use [Erledigt]

Von Ausgaben mit der Gra-Engine über Generatoren bis zum Export in diversen Formaten

Moderator: Moderatoren

Antworten
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

net use [Erledigt]

Beitrag von Jan »

Ich habe gerade die Herausforderung erhalten, ein altes Programm zu modernisieren. Problem: In der alten Version muß vorher immer eine kleine Batch gestartet werden, die ein

Code: Alles auswählen

net use LPT2: /Delete
net use LPT2: \\Rechnername\druckername
aufruft. Kann man das nicht mit Xbase++-Syntax nachbilden?

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: net use

Beitrag von Manfred »

Probiere es doch einfach einmal aus, indem Du nicht den DELETE vorher aufrufst. Wenn man Laufwerke mit Net Use mapped, bleiben sie ja auch erhalten, wenn der Rechner neu gestartet wird. Das sieht mir eher danach aus, als wenn LPT2 jedesmal gelöscht und dann wieder neu gesetzt wird. Das könnte man sich doch dann schenken.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: net use

Beitrag von brandelh »

das kommt darauf an, ob der Drucker immer gleich ist !

Wenn es ein DOS Programm ist braucht man das, XBase++ stellt man besser auf Druckerobjekte um.
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: net use

Beitrag von AUGE_OHR »

hi,

der Batch ist für Xbase++ IMHO unwichtig.
Der gewünschte Drucker MUSS in der Liste der installierten Drucker stehen der eine IP Adresse (gut***) oder einen Netzwerk Namen (schlecht***) verwendet.
***bezieht sich auf Win7 / W2K8

da es sich aber "nur" um LPT2 handelt gehe ich von einem lokalen Drucker aus.
da habe ich durchaus schon gesehen das "mehrere" Drucker den selben Port LPT2 benutzen und "so" ,statt auf LPT3 / LPT4 aufzurüsten, dann weitere Drucker anzusteuern auf dem Cl*pper dann drucken sollte.

also unter Xbase++ alles kein Problem ... bis auf die Drucker "Status" Geschichte ...
gruss by OHR
Jimmy
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: net use

Beitrag von Jan »

Der Drucker ist NICHT installiert, und soll es auch nicht werden. Das ist der Knackpunkt.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: net use

Beitrag von UliTs »

Jan hat geschrieben:Ich habe gerade die herausforderung erhalten, ein altes Programm zu modernisieren. Problem: In der alten Version muß vorher immer eine kleine Batch gestartet werden, die ein

Code: Alles auswählen

net use LPT2: /Delete
net use LPT2: \\Rechnername\druckername
aufruft. Kann man das nicht mit Xbase++-Syntax nachbilden?
Ruf einfach die beiden Befehle mittels ShellExecute auf oder spricht etwas dagegen?
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: net use

Beitrag von brandelh »

Was sollst du genau modernisieren ?

Ich vermute du hast ein Clipperprogramm, das einen PCL (oder vergleichbaren) Datenstrom erzeugt und auf LPT2 ausgibt oder ?
Soll das neue nun ein Xbase++ Programm sein ?
SET PRINTER TO <cDevice>
...
<cDevice> ist der Name des Ausgabegeräts bzw. -kanals, an den die Druckausgaben gesandt werden sollen. Er kann entweder als Literal oder als Zeichenausdruck in ()-Klammern angegeben werden. Es kann ein lokales oder ein über ein Netzwerk erreichbares Gerät sein. Falls <cDevice> nicht existiert, wird eine ASCII-Datei mit diesem Namen erzeugt.
Nur so ein Gedanke, versuche den Drucker als UNC Namen als Device anzugeben, im Prinzip ist es ja nur eine offene Dateiverbindung ...
Wenn das geht, sende die Druckdaten mit Steuerzeichen die nötig sind.

Mit einem lokalen Druckerobjekt, das auf den Druckserver zeigt tut man sich aber sicher einfacher und die XbpPrint() oder HBPrinter() Möglichkeiten sind so viel besser ... aber wer nicht will :badgrin:
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: net use

Beitrag von Manfred »

Na Jan,

die Wette hätte ich dann auch mal wieder gewonnen. :lol:
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: net use

Beitrag von brandelh »

:?: ich bekomme nix mehr mit, welche Wette :?:
Gruß
Hubert
UliTs
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2828
Registriert: Fr, 10. Feb 2006 9:51
Wohnort: Aachen
Hat sich bedankt: 259 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: net use

Beitrag von UliTs »

brandelh hat geschrieben::?: ich bekomme nix mehr mit, welche Wette :?:
Ich wette, die beiden haben gewettet, dass Du Deine Druckerklasse anpreisen wirst :-) .
Uli
-------
Mitglied XuG Cologne
Mitglied XuG Osnabrück
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: net use

Beitrag von brandelh »

OK, aber ich habe sie ja NACH allen anderen Methoden genannt :D

PS: und was gut und kostenlos ist ...
Gruß
Hubert
Benutzeravatar
Manfred
Foren-Administrator
Foren-Administrator
Beiträge: 21186
Registriert: Di, 29. Nov 2005 16:58
Wohnort: Kreis Wesel
Hat sich bedankt: 210 Mal
Danksagung erhalten: 67 Mal

Re: net use

Beitrag von Manfred »

Och Hubert,

Jan und ich besprechen schon mal vorher ab und an ein paar Fragen, bevor sie hier landen. Ich sage dann was ich vermute was passieren wird. Aber bisher wollte Jan sich nie auf eine Wette mit mir einlassen. Die hätte er auch bisher immer verloren.

Soweit ich Jan aber diesmal verstanden habe, hat er sich auch nicht korrekt ausgedrückt, was er eigentlich damit bezwecken soll, was er hier angefragt hat. Das hätte vielleicht die Sache in ein anderes Licht gerückt. Aber wie gesagt, wenn ich es richtig verstanden habe......

Außerdem meine ich immer noch einmal ganz zu Anfang den Batchjob ausgeführt und es wäre für "immer" im System und müßte nicht immer neu aufgerufen werden. Allerdings ohne DELETE.

PS. Ihr liegt beide verkehrt. Wenn Hubert seine Hilfe anbietet, dann finde ich das nach wie vor absolut toll. Deshalb kann er seine Produkte m.E. so lang und breit anbieten, wie er möchte. Aber es ging um etwas anderes.
Gruß Manfred
Mitglied der XUG Osnabrück
Schatzmeister des Deutschsprachige Xbase-Entwickler e.V.
großer Fan des Xbaseentwicklerwiki https://wiki.xbaseentwickler.de/index.p ... Hauptseite
Doof kann man sein, man muß sich nur zu helfen wissen!!
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: net use

Beitrag von Jan »

Moin Hubert,

das Problem ist, das ich zu einfach gefragt habe ("wie baue ich Net Use nach Xbase++ um"), und die Antwortenden dann zu weit und kompliziert daran gedacht haben, wie man das auf eine Druckerausgabe umschreiben kann.

Es geht nicht um einen realen Drucker. Es sollen einfach nur virtuelle LPTs mit Steuercodes angesprochen werden, die dann hintergeschaltete Relais ansteuern, die von dem Pseudodrucker verwaltet werden. Das läuft mit einem alten Clippersystem sehr gut, soll aber jetzt auf Xbase++ umgeschrieben werden.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: net use

Beitrag von brandelh »

Also nochmal langsam ;-)

Du hast einen Server-PC, auf dem ein Druckertreiber installiert ist, der aber nicht druckt, sondern mit Steuerzeichen im Druckdatenstrom Relais schaltet.
Dieser verhält sich gegenüber dem Netzwerk wie ein alter Netzwerkdrucker, dessen Netzname muss daher am Client-PC auf einen lokalen virtuellen LPT umgebogen werden.

Die einfachste Lösung ist die, dass die CMD sich weiterhin um den LPT kümmert und du im Xbase++ Programm den Clipper Code 1:1 verwendest.
Bei Pablo findet man bestimmt die Antwort wie man NET USE über die API nachbildet, aber das dürfte auch nur innerhalb dieses Programmes wirken.
Sollte aber jedes Programm SEINEN Ausgabedrucker brauchen, wäre das gar nicht so übel ;-)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: net use

Beitrag von brandelh »

Du könntest versuchen NET USE aus RUN / runshell() aufzurufen, dann fällt es nicht auf 8)
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: net use

Beitrag von brandelh »

Diese Funktionen sollen dafür gedacht sein (laut PowerBasic Forum):

WNetAddConnection() => WNetAddConnectionA()
WNetUseConnection() => WNetUseConnectionA()
etc.
da gibt es sogar 3 verschiedene mit unterschiedlichen Parametern ...
Gruß
Hubert
Benutzeravatar
Jan
Marvin
Marvin
Beiträge: 14651
Registriert: Fr, 23. Sep 2005 18:23
Wohnort: 49328 Melle
Hat sich bedankt: 21 Mal
Danksagung erhalten: 88 Mal
Kontaktdaten:

Re: net use

Beitrag von Jan »

Hallo Hubert,

ja mit RunShell hab ich das dann auch erstmal gelöst, funktioniert einwandfrei. Ich dachte nur, das es eventuell eine elegantere Lösung geben könnte.

Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: net use [Erledigt]

Beitrag von brandelh »

Hi,

dies ist mein Beispiel Code in PowerBasic und was soll ich sagen, es funktioniert und unter XP Pro bleibt die Verbindung zu M: nach dem Programmende bestehen (man kann sie auch schließen) ...

Code: Alles auswählen

#COMPILE EXE
#DIM ALL
#INCLUDE "Win32Api.inc"

FUNCTION PBMAIN () AS LONG

   LOCAL lpRemoteName, lpPassword, lpLocalName AS ASCIIZ*256
   ? "Info"
   ? "D:", DIR$("D:", 8)
   ? "\\LEY\HD_D", DIR$("\\LEY\HD_D", 8)
   ? "M:", DIR$("M:", 8)
   ? "M",  DIR$("M", 8)
   lpRemoteName = "\\LEY\HD_D"
   lpPassword   = ""
   lpLocalName  = "M:"
   ? lpRemoteName, DIR$(lpRemoteName, 8)
   ? lpLocalName, DIR$(lpLocalName, 8)
   ? WNetAddConnectionA(lpRemoteName, lpPassword, lpLocalName )
   ? lpLocalName, DIR$(lpLocalName, 8)
    WAITKEY$
END FUNCTION  
da Xbase++ alle Strings und Stringvariablen als ASCIIZ an DLLs übergibt ist das also ganz einfach ...
MSDN-Info :arrow: http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Win-Error-Codes :arrow: http://msdn.microsoft.com/en-us/library ... 85%29.aspx
in PB:

Code: Alles auswählen

DECLARE FUNCTION WNetAddConnectionA LIB "Mpr.dll" ALIAS "WNetAddConnectionA" _
    (lpRemoteName AS ASCIIZ, lpPassword AS ASCIIZ, lpLocalName AS ASCIIZ) _
    AS DWORD
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: net use [Erledigt]

Beitrag von brandelh »

bei der Umstellung des Beispieles auf einen Netzwerkdrucker bekomme ich immer den Fehler, dass das Kennwort nicht stimmt.
Ich übergebe keines, weil ich ja die aktuelle Anmeldung nutzen will, ähnlich wie mit net use ...

ABER

Code: Alles auswählen

   SHELL "net use lpt2 \\fsa-dc\canon", EXIT TO nResult
   ? "nResult",nResult
   SHELL "net use "                                    
funktioniert und entspricht unserem runshell(), das Fenster kannst du verstecken und nur die Rückgabe auswerten .
Die Verbindung bleibt bestehen, bis sie aufgehoben wird.
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15695
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: net use [Erledigt]

Beitrag von brandelh »

brandelh hat geschrieben:bei der Umstellung des Beispieles auf einen Netzwerkdrucker bekomme ich immer den Fehler, dass das Kennwort nicht stimmt.
Ich übergebe keines, weil ich ja die aktuelle Anmeldung nutzen will, ähnlich wie mit net use ...
und genau da liegt der Gedankenfehler.

Der Parameter muss mit dem aktuellen Kennwort des aktuellen Benutzers gefüttert werden, nur der aktuelle Benutzername wird automatisch verwendet.
Dass es beim Laufwerk funktionierte muss an einem vorherigen Laufwerkszugriff über den Explorer gelegen haben.
Nachdem ich alle Connections geschlossen hatte und das erneut aufrief, kam der gleiche Fehler wie bei LPT.

Code: Alles auswählen

lpPassword   = "aktuelles Kennwort des angemeldeten Users" // ich nutze ein Peer2Peer Netzwerk !
einmalig festgelegt, es gilt ja für alle Anfragen und Laufwerk und LPT2 werden sauber zugeordnet :D
Gruß
Hubert
Antworten