webForumDet fria alternativet

kommandoprogram

15 svar · 559 visningar · startad av Nexus86

Nexus86Medlem sedan okt. 20023 030 inlägg
#1

Antingen har jag missat något stort eller också går det inte men ändå, går det att göra kommandoradsprogram i VB? Som körs i ett kommandoradsfönster alltså. :)

Man kanske använder stdout eller stdin eller något?

nikoMedlem sedan juni 20022 599 inlägg
#2

Nexus86 skrev:

går det att göra kommandoradsprogram i VB?

Definitionssak. Det finns två typer av Win32-appar: GUI (fönsterbaserade) och CUI (konsolbaserade). Vad som är vad avgör Windows genom att kolla i exe-filens header. Om det står att det är en CUI så drar Windows automatiskt igång ett kommandoradsfönster, annars inte.

I VB kan man inte kompilera CUI (som default iaf, det går säker att trixa och kompilera via BAT-filer med rätt växlar).

Däremot kan man ju, som du skriver, fixa allting manuellt med AllocConsole, FreeConsole, GetStdHandle, ReadConsole, WriteConsole osv ..

Definitionssak, som sagt.

Nexus86Medlem sedan okt. 20023 030 inlägg
#3

Som jag misstänkte med andra ord. API möjligtvis. Men om man nu skulle lyckas få till det med bat-filen, hur gör man då med kod i VB för att skriva ut någonting i fönstret? Blir det Print då eller?

nikoMedlem sedan juni 20022 599 inlägg
#4

Men om man nu skulle lyckas få till det med bat-filen, hur gör man då med kod i VB för att skriva ut någonting i fönstret?

Bra fråga, vet inte faktiskt. hHandTag=GetStdHandle(STD_OUT): Print hHandTag, "Hej", kanske? Möjligtvis ..?

Jag ville mest poängtera att skillnaden GUI/CUI bara är en flagga i headern och att det eventuellt går att trixa sig runt med odokumenterade kompilatorväxlar. Däremot tror jag inte man har nån nytta av att göra det. Det blir antagligen lika mycket API:er ändå, eftersom VB inte har några inbyggda printf, scanf osv ..

Nexus86Medlem sedan okt. 20023 030 inlägg
#5

Antar det. Tack! Får jobba med API iaf då. :)

PsyDoniaMedlem sedan maj 2003924 inlägg
#6

jag har hittat ett program en gång som va kodat i VB och startade man det i dos så funkade programmet där med.
men jag fattar inte hur han gjort men tydligen så går det på något sätt.
tyvär så har jag inte det programmet kvar.

JPEMedlem sedan juli 200310 inlägg
#7

Jag är inte riktigt säker på om jag förstått frågan. Men om det är så pass enkelt att du vill att ett VB-program ska köra en batfil, så är det ju bara att skriva

shell "filnamn.bat"

och vill du skapa själva batfilen - är det ju bara att först använda
vanlig filhantering. Ett litet exempel. Ett kommandoprogram som ska koipera filen C:\blask.exe till d:\blask.exe

open "batfil.bat" for append as #1
print #1,"copy c:\blask.exe d:\blask.exe"
close #1
shell "batfil.bat"

Detta både skapar och kör "batfil.bat" under exekveringen av ditt VB-program.

Nexus86Medlem sedan okt. 20023 030 inlägg
#8

Jag vet precis hur man gör en batfil. :)

Det jag ville göra var ett program som gör någonting och sedan skriver ut resultatet i ett kommandoradsfönster.

Btw, Om man vill göra det som batfilen gör i ditt exempel finns det bättre metoder ifrån VB's håll. ;)

PsyDoniaMedlem sedan maj 2003924 inlägg
#9

det går att göra så du vill.
ska se har ett exempel här på datan nån stans..

PsyDoniaMedlem sedan maj 2003924 inlägg
Nexus86Medlem sedan okt. 20023 030 inlägg
#11

Njaa.. Inte riktigt vad jag ville ha. Det jag ville ha lyckades jag lösa på egen hand (med lite hjälp av en otroligt gammal C++-API-hjälp jag har ligger på hårddisken. Laddar upp resultatet. Hjälper nog alltid någon. :)

Dim Console As New cConsole

' För att öppna ett fönster
Console.Load

' För att stänga fönstret
Console.UnLoad

'För att byta rubrik på fönstret
Console.Caption = "Ny Rubrik"

'För att hämta den nuvarande rubriken
Rubrik = Console.Caption

'För att skriva text till fönstret
Console.PrintString("text")         ' Med ny rad efter texten
Console.PrintString("text", False)   ' Utan ny rad efter texten

'För att tillåta att användaren skriver in en sträng och hämta den
Text = Console.InputString
Henke_flexMedlem sedan juli 200217 inlägg
#12

Hej!
Ta titt på detta ex. www.msjogren.net/dotnet/eng/samples/vb6_cmdoutput.asp

Nexus86Medlem sedan okt. 20023 030 inlägg
#13

Ingen verkar förstå att jag har löst det redan och att jag inte alls ville skriva ut något med stdout eller hämta med stdin. Jag ville göra ett kommandoradsprogram vilket är en helt annan sak och som jag dessutom lyckats men. Så om det inte är allt för mycket begärt, läs igenom hela tråden innan ni kommer med nya "lösningar". Tack!

PsyDoniaMedlem sedan maj 2003924 inlägg
#14

Nexus vill inte vara negativ.
men det där är ju inte att göra ett komadorads program.
det du har gjort är att skicka komandon till ett dos fönser eller komadorads fönster.

att göra ett komadorads program är väl att ändra i headern så att man kan starta om i dos och fortfarande kunna exekvera exe filen som är gjord i VB.
annars så att gööra ett komandorads program kan ju oxå vara en dos kopia för windows t.ex.

Men om det är så du menade som du lyckades med så är ju det bra men i så fall så förklarade du nog lite dåligt denna gång.
Men men bra att du lyckades me det du ville iálla fall.

nikoMedlem sedan juni 20022 599 inlägg
#15

PsyDonia skrev:

att göra ett komadorads program är väl att ändra i headern så att man kan starta om i dos och fortfarande kunna exekvera exe filen som är gjord i VB.

Nope. Det du talar om är ett 16-bitars DOS-program.

PsyDonia skrev:

men det där är ju inte att göra ett komadorads program.
det du har gjort är att skicka komandon till ett dos fönser eller komadorads fönster.

Jo. Det är faktiskt ett sätt att göra ett 32-bitars kommandoradsprogram. Nu blir det ju egentligen en GUI-app och inte en CUI, men det spelar ingen roll eftersom det inte finns nån skarp gräns i 32-bitars Windows: En GUI-app kan skapa en "DOS-prompt" med AllocConsole och en CUI-app kan skapa ett vanligt fönster med CreateWindow. (CUI innebär (i princip) bara att Windows automatiskt skapar "DOS-prompten" åt en.)

Nexus86Medlem sedan okt. 20023 030 inlägg
#16

PsyDonia skrev:

att göra ett komadorads program är väl att ändra i headern så att man kan starta om i dos och fortfarande kunna exekvera exe filen som är gjord i VB.
annars så att gööra ett komandorads program kan ju oxå vara en dos kopia för windows t.ex.

Som niko säger så tänker du på 16-bitars dos-program. Jag skrev faktiskt att man kunde göra ett kommandoradsprogram och inte dos-program. Skillnaden mellan dessa är att kommandoradsprogram körs ifrån windows genom kommandotolken medan dos-program körs ifrån dos.

138 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)