---
title: "visa output från DOS"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/73299-visa-output-från-dos"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "Nexus86"
published: "2003-04-06T11:58:49.000Z"
updated: "2003-04-09T10:50:09.000Z"
replies: 21
views: 545
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/73299-visa-output-från-dos"
---

# visa output från DOS

_Sida 1 av 2._

## #1 — Nexus86, 2003-04-06T11:58Z

Om man startar ett dosfönster/kommandofönster med antingen Shell eller en API, finns det något sätt att kolla vad fönstret skriver ut utan en tempfil? D.v.s utan Shell("Mittprogram \> tempfil")?

Permalänk: https://www.webforum.nu/p/73299

## #2 — niko, 2003-04-06T14:24Z

Jag *inbillar* mig att man isåf blir tvungen att dra igång ett skal och sen redirecta STDOUT till en pipe som man läser ifrån.

Vad du borde göra är att snoka upp lite kod till tex en Telnet-server. Den gör ju just såna saker som att köra DOS-kommandon läsa av outputen och sen skicka tillbaks denna till en nätverksklient.

Här är lite kod från Windowsversionen av rlogind. Jag kan inte påstå att jag förstår den själv men den kanske ger lite idéer om vilka API:er det handlar om?

<http://member.webforum.nu/3773/doexec.txt>

Men annars kan jag ha fel. Det kan finnas nåt mycket enklare?

Permalänk: https://www.webforum.nu/p/1001833

## #3 — Nexus86, 2003-04-06T14:59Z

Pga att mina C/C++-kunskaper inte är vidare kraftiga skulle det ta något år eller två att först skriva om till VB för att få en bättre överblick och sedan några dagar till för att förstå vad denna kod gör. :) Måste ju finnas något annat.

Permalänk: https://www.webforum.nu/p/1001860

## #4 — niko, 2003-04-06T16:01Z

> **Nexus86 skrev:**
>
> Måste ju finnas något annat.

Har du inte lärt dig programmeringens första regel: 

"Allt som verkar lätt är svårt och allt som verkar svårt är lätt."?  :OO 

Men iaf så lyckades jag snoka upp att Windows Scripting Host verkar ha bättre möjlighet att fånga upp andra processers STDIN och STDOUT än VB själv.

Till exempel så funkar detta rätt bra att köra i VB:

```
    Dim WshShell As Object, oExec As Object, sSTDOUT As String
    Set WshShell = CreateObject("WScript.Shell")
    Set oExec = WshShell.Exec("cmd /C dir c:")
    Do While True
     If Not oExec.StdOut.AtEndOfStream Then
       sSTDOUT = sSTDOUT & oExec.StdOut.Read(1)
     Else
        Exit Do
     End If
    Loop
    Debug.Print sSTDOUT
```

Källa:<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/wslrfstdoutproperty.asp>

Permalänk: https://www.webforum.nu/p/1001899

## #5 — Nexus86, 2003-04-06T16:06Z

Man tackar! :bire

Permalänk: https://www.webforum.nu/p/1001906

## #6 — Nexus86, 2003-04-06T16:12Z

Är det det att det är VBScript egentligen eller är det något annat som gör att jag får fel på följande rad?

```
Set oExec = WshShell.Exec("cmd /C dir c:")
```

 Felet lyder "**Object does not support this property or method.**". Hur göra?

EDIT // Efter en snabb titt i classen ser jag att följande är de enda funktioner, subbar resp. egenskaper som finns:

- AppActivate (Funktion)
- CreateShortcut (Funktion)
- Environment (Egenskap)
- ExpandEnvironmentStrings (Funktion)
- LogEvent (Funktion)
- Popup (Funktion)
- RegDelete (Sub)
- RegRead (Funktion)
- RegWrite (Sub)
- Run (Funktion)
- SendKeys (Sub)
- SpecialFolders (Egenskap)

 
Mao finns inte Exec. Behöver man en ny version av Windows Script Host eller?

Permalänk: https://www.webforum.nu/p/1001909

## #7 — niko, 2003-04-06T16:27Z

Hmm .. Kan bara tänka mig att du har en för gammal version av Windows Script Host?

Om du lägger till en referens till *Windows Script Host Object Model* så ska du kunna köra typat:

```
    Dim WshShell As WshShell, oExec As WshExec, sSTDOUT As String
    Set WshShell = New WshShell
    Set oExec = WshShell.Exec("cmd /C dir")
    Do While True
     If Not oExec.StdOut.AtEndOfStream Then
       sSTDOUT = sSTDOUT & oExec.StdOut.Read(1)
     Else
        Exit Do
     End If
    Loop
    debug.Print sSTDOUT
```

och få upp alla tillgängliga metoder i intellisensen.

WSH 5.6: <http://msdn.microsoft.com/library/default.asp?url=/downloads/list/webdev.asp>

Permalänk: https://www.webforum.nu/p/1001917

## #8 — Nexus86, 2003-04-06T16:32Z

> **Jag skrev:**
>
> Behöver man en ny version av Windows Script Host eller?

> **niko skrev:**
>
> Kan bara tänka mig att du har en för gammal version av Windows Script Host?

Vi tänker förmodligen lika. :e Ska starta om nu får vi se om det fungerar sen.

Permalänk: https://www.webforum.nu/p/1001923

## #9 — Nexus86, 2003-04-06T16:55Z

Nu fungerar det alldeles utmärkt! Tackar! En fråga till bara, finns det något sätt att få texten att visa ett ä istället för "„" när det egentligen är ett ä och ett å istället för "†" när det egentligen är ett å och alla andra tecken utan att behöva använda replace?

Permalänk: https://www.webforum.nu/p/1001941

## #10 — Nexus86, 2003-04-06T17:09Z

Blev en fråga till :), går det att köra fönstren utan att de syns?

Permalänk: https://www.webforum.nu/p/1001949

## #11 — niko, 2003-04-06T17:48Z

Man kan använda API:et *OemToChar* för att hantera skillnaderna i Code Pages mellan DOS och Windows:

```
	Private Declare Function OemToChar Lib "user32" Alias "OemToCharA" _
	(ByVal lpszSrc As String, ByVal lpszDst As String) As Long

    	Dim WshShell As WshShell, oExec As WshExec, sSTDOUT As String
    	' osv
	[b]OemToChar sSTDOUT, sSTDOUT[/b]
    	debug.Print sSTDOUT
```

Motsatsen heter: *CharToOem* (surprise!)

> går det att köra fönstren utan att de syns

Tror, inte det, tyvärr. Då får du nog dyka ner i C-koden däruppe.

Permalänk: https://www.webforum.nu/p/1001982

## #12 — Nexus86, 2003-04-06T19:20Z

Ok. Tack iaf! :bire

Om någon kommer på något annat sätt så man fortfarande kan gömma fönstret så skriv gärna. Håller nämligen på med en webbserver och bygger in stöd för php och vill inte att php.exe ska starta synligt hela tiden.

Permalänk: https://www.webforum.nu/p/1002050

## #13 — niko, 2003-04-07T21:19Z

En reflexion: Om det är en webbserver du skriver så antar jag att du så småningom tänker köra den som en NT-Service? Och om du gör det så kommer problemet att lösa sig själv eftersom services normalt inte "syns" när de exekverar.

Permalänk: https://www.webforum.nu/p/1003007

## #14 — Nexus86, 2003-04-08T21:30Z

En annan tanke: Bara för att det körs som en service så betyder det inte att andra program som startas av servicen också är dolda. :)

**r/** Kom just på att det kanske går om man på något sätt kan starta ett annat program inuti sitt eget som en ny thread (tråd? :q). Eller om man kan använda sig av php4ts.dll som används av både webbservermoduler och php.exe. :) Dags att börja studera om det går. Hittar du något bra så tipsa gärna!

Permalänk: https://www.webforum.nu/p/1006570

## #15 — niko, 2003-04-08T22:04Z

> **Nexus86 skrev:**
>
> Bara för att det körs som en service så betyder det inte att andra program som startas av servicen också är dolda

Eh, jo? Om en service är satt att inte få "Interact with desktop" så ärver som default alla processer den startar samma egenskap.

> **Nexus86 skrev:**
>
> Kom just på att det kanske går om man på något sätt kan starta ett annat program inuti sitt eget som en ny thread

 Vet inte riktigt. Att konsolen kör i en egen tråd lär inte göra den osynlig. I övrigt har jag ingen direkt koll på PHP-grejer, tyvärr.

Permalänk: https://www.webforum.nu/p/1006586

## #16 — Nexus86, 2003-04-08T22:26Z

OK! Så alla program som startas av min service kommer vara dolda då? Tack! Du har vart till stor hjälp. :bire

Permalänk: https://www.webforum.nu/p/1006589

## #17 — niko, 2003-04-08T22:49Z

> OK! Så alla program som startas av min service kommer vara dolda då?

Ja, så vitt jag vet. Processer som startas via *WshShell.Exec* kommer iaf inte att ha en synlig konsol. (Testade precis.)

Permalänk: https://www.webforum.nu/p/1006602

## #18 — Nexus86, 2003-04-09T01:22Z

Så bra! Tack så mycket!

Permalänk: https://www.webforum.nu/p/1006619

## #19 — Nexus86, 2003-04-09T06:33Z

Hittade en kod som fungerar utmärkt och gömmer fönstret även om man inte har programmet som en service. :i Bifogar klassmodulen till detta.

**r/** Bifogar som zip istället i nästa meddelande då man inte får ladda upp en ny fil vid redigering och fler personer antagligen kan öppna zip snarare än rar. :r

Permalänk: https://www.webforum.nu/p/1006669

## #20 — Nexus86, 2003-04-09T06:35Z

Här är filen.

Bilagor:

- [dosoutputs.zip](https://www.webforum.nu/a/1257.zip)

Permalänk: https://www.webforum.nu/p/1006671

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/73299-visa-output-från-dos  
Nästa sida: https://www.webforum.nu/amne/dotnet/73299-visa-output-från-dos/page2.md
