Hallo Sebastian,
Jedes programm was in Windows/Dos abläuft erhält ein handle,
eine Nummer.
Mache mal den Affengriff, also Strg+Alt+Entf, alles was du da
siehst hat ein handle.
Über das handle könntest du jeden der dort laufenden Prozesse
„abschießen“
Ok cool, ProzessID verstehe, also, der Prozess wurde
gestartet!!
Was im Vba-Code angezeigt wird ist diese handle-Nummer, die
dein Programm osql.exe hatte oder falls es noch liefe hat.
Der Rückgabewert ist 0 wenn es im Programmstart zu Fehlern
kommt sodaß das programm nicht korrekt startet.
Korrekt im Sinne von Windows/Dos, was nicht bedeutet daß das
Programm an sich korrekt funktioniert.
Verstehe, ich frag jetzt ab ob ProzessID (handleNummer) > 0
ist, dann passts!!!
Ähem, alles was ich schrieb ist angeeignetes Halbwissen, vielleicht wird auch ein Minuswert zurückgeliefert oder ein Emptywert, also kein Wert wenn da was schiefläuft.
Und das was man in dem Taskmanager sieht sind nicht alle Prozesse die gerade aktiv sind *glaub*
Jedenfalls habe/hatte ich mal Vba-Code der alle prozesse samt Hnadle u.v.m. auflistet, das waren weit mehr als im Taskmanager angezeigt werden.
Manche hatten sogar die gleichen handle-Nummern *glaub*, das sind dann „Kinder“ (Childs) des einen Prozesses.
Um ehrlich zu sein, mit den ganzen Angaben die da aufgelistet wurden konnte ich nicht allzuviel anfangen
)
Ich möchte den Output erhalten, wie in der dir.txt als
Beispiel:
Wenn ich nun aber den Code ohne Pipe ausführe, bekomme ich
über msgbox(Mache) auch nur die Prozess-ID zurück!!
ja.
Ich weiss, dass es mit .net möglich ist den Output der cmd.exe
an vb.net weiterzugeben. in Vba bin ich echt ratlos, bis jetzt
habe ich es nur über > datei.txt und datei.txt wieder
einlesen geschafft, ist eine Lösung, aber warum 1000 Dateien
erzeugen, wenn zB vb.net das selbst handhabt!!
Dann mache das doch mit .Net und lasse das in eine Textdatei schreiben.
Die kann man dann mit VBa auslesen.
.Net habe ich nicht, kann ich nicht und will ich grad auch nicht,ich habe schon genug zu tun erste Schritte in VB5.0 und makros für Open Office zu machen.
Wobei mir mein Vba in VB5 schon sehr hilft, in OpenOffice aber kaum, völlig andre Welt dort.
Wenn nun dein Programm osql.exe sowieso keine Ausgabe an den
Bildschirm hat, kann man natürlich auch nix in eine Datei
„umleiten“.
Was auch immer du auch an Informationen von dem Programm
osql.exe haben willst, das geht nur übers Programm selbst, das
auch nur wenn es dafür so programmiert wurde.
Die osql.exe hat einen Output an den Bildschirm!!
Dann bin ich ratlos.
Anscheinend nutzt dann das Pipe-Zeichen „>“ aus Dos-zeiten nix mehr.
Ich kenne .Net nicht, grundsätzlich könnte man, wenn überhaupt mittels API diese osql.exe starten und dann auch über API-Funktionen eventuelle Bildschirmausgaben „abfangen“ und speichern.
API-Aufrufe kann man in Vb, Vba, C, usw. machen, es sind die gleichen APIs.
Aber es gibt mittlerweile zigtausende von API Funktionen. Stell dir das so vor als wenn das alles Zusatzfunktionen in Vba sind.
Um ie zu benutzen, egal in VB,Vba, C muß man nur den namen der API-Funktion kennen und die parameter die die Funktion braucht.
Dann sind sie genausoeinfach einzubauen wie z.B. Sverweis als Formel in Excel.
Da brauchst du ja auch nur zu wissen daß es Sverweis gibt, was es macht und welche vier Parameter es erwartet.
Jetzt müßte man also nur einen oder mehrere APIfunktionen mit Namen kenne, plus deren parametern, um dann mittels einer API-Funktion dein programmzu starten,dann das handle ermitteln, dann die Bildschirmausgabe „abfangen“.
Das ist schnell programmiert in Vba, allerdings nur dann wenn man die Namen der APIs kennt und es überhaupt APIs gibt die das leisten können.
Das Starten eines programmes und die handle ermittlung ist kein Thema, das kriege ich auch hin, Problem ist die „Abfangung“ der Bildschirmausgabe.
Tipp, frage im .Net-Brett nach oder im VB-Brett. Oder auch im C-Brett.
Denk dran, Multiposting wird gelöscht.
Wenn dir der Begriff API fremd ist, so ist das egal 
Hier mal ein Beispiel wie es grundsätzlich immer mit APIs abläuft:
Angenommen du willst ein Makro haben was exakt 100 Millisekunden stoppt und dann erst was macht, das kriegst du mit Vba nicht hin, nur mit der API_Funktion Sleep, die asl einzigen Parameter die Wartezeit in Millisekunden erwartet.
Der Code sieht dann so aus:
In einem Standardmdul:
Private Declare Sub Sleep Lib „kernel32“ (ByVal dwMilliseconds As Long)
Sub Test()
Sleep 100
’ weiterer Code
End Sub
Du siehst, APIs zu benutzen ist kinderleicht, Problem ist herauszufinden welche es gibt.
Sorry, konkret helfen konnte ich dir nicht, aber vielleicht halfen dir meine Ausführungen ein wenig weiter.
Falls du an APIs interessiert bist, kaufe dir das Buch Users Guide to API oder wie immer das genau heißt, geschrieben hat es Dan Appleman, der weltweite Guru für APIs.
Leider gibt es das nicht auf Deutsch *fluch*
Gruß
Reinhard