Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: DOS-tyylisen komennon teko VB6:lla (VB.NET)

Sivun loppuun

marde [12.07.2007 08:41:08]

#

Tervehdys, VB6:lla pitäisi saada tehtyä vanhaan kunnon MSDOS-tyyliin toimiva, sinällään erittäin yksinkertainen komento year(.exe), joka pulauttaa lopputuloksensa suoraan konsolin komentoriville (stdOut)seuraavasti:

C:\>year
2007
C:\>


Mitenkäs tämä temppu oikein tehdään fiksusti VB6:lla, josta ei perskules löydy vaihtoehtoa, jossa luodaan suoraan konsolisovellus (kuten vb.net:istä löytyy) ? Osaan kyllä kirjoittaa tuon vuosiluvun kaikkialle muualle, mutta en tähän konsolin komentoriville. Myös argumenttien välitys (stdIn) pääohjelmalle sujuu..

Pääsin kyllä ongelman ratkaisun jäljille => netistä penkomalla löytyi vinkkejä, joiden avulla pystyy tekemään konsolisovelluksia käyttämällä hyväksi minulle vielä hyvin vierasta Win32 API rajapintaa, mutta näissä esimerkeissä avataan ohjelman suoritusta varten oma konsoli-ikkunansa, mikä ei mun tapauksessa ole toivottavaa. Linkki, jonka avulla sain homman melkein toimimaan oli:
http://visualbasic.about.com/od/learnvb6/l/bldykvb6dosa.htm

_Pete_ [12.07.2007 10:41:35]

#

Eikö tuon voi toteuttaa ihan battina? Vai on ko dos-prompti niinkin paska että tuollaista ei saa aikaiseksi ?

marde [12.07.2007 10:49:30]

#

Enpä keksinyt heti kuinka ton voisi tehdä.. DOS komennolla date /T saat tulokseksi päivämäärän ja vuoden, mutta siitä pitäs saada siivottua päivämäärä ja rivinvaihto vielä pois.. Itseasiassa toi year-komento on mulla tulossa osaksi erästä toista battia, jonka hakemistopolun osana vuosiluku on, siksi date /T -komento ei sellaisenaan toimi..

.. harvinaisen hankalaksi menee näinkin yksinkertaisen asian teko.. ;)

kayttaja-4976 [12.07.2007 13:26:40]

#

Googlella tai jopa täältä ohjelmointiputkasta löytynee APIt tähän hätään. VB-ajoista on ikävä kyllä jo niin pitkään, etten enää muista tekikö se uuden ikkunan vai osasiko hienosti tulostaa jo olemassaolevaan komentoriviin.

Quirzo [12.07.2007 13:39:58]

#

Tsekkaas tämä:

http://en.allexperts.com/q/Visual-Basic-1048/return-value-VB-EXE.htm

lainaus:

As far as getting the argument back, that's going to be a little different. I'm sure there is some obscure way of doing this, but I think I would simply write the information somewhere and read it after your call. You could even pass a result file name as another command line argument and have the application write the results to the given file name. You can then pick that file up and get your results.

Tässäkin saatta olla jotain:
http://www.xaprb.com/blog/2005/10/14/how-to-create-a-vb6-console-program/

marde [12.07.2007 14:40:33]

#

Quirzo, kiitoksia linkeistä, mutta noissa kumpaisessakin neuvotaan, kuinka komentorivin argumentteja voidaan lukea ohjelmaan.. Toiseen suuntaan tapahtuvaan merkkijonon siirtoon suoraan komentoriville noistakaan ei ole apua.. Ehdottelevat ko. datan tuuppaamista johonkin sopivaan tiedostoon ja sen sieltä edelleen käyttöä.. Noin se on mulla nimenomaan tällä hetkellä tehty ja siitä pyrin pääsemään eroon...

Antti Laaksonen [12.07.2007 14:54:49]

#

Tuolla on toimiva moduuli, jonka avulla voi tehdä konsoliohjelman:

http://vb.mvps.org/samples/project.asp?id­=Console

Tarvittava koodi on silloin näin lyhyt:

Sub Main()
    Con.Initialize
    Con.WriteLine Year(Now)
End Sub

Mutta kuten sivulla mainitaan:

Karl E. Peterson's Classic VB Code kirjoitti:

The only difference between a console application and a windowed application, is a single bit in the Portable Executable (PE) file header which is set during the compilation process. Classic VB doesn't natively support setting this PE attribute.

Ratkaisu on tiedostossa:

http://www.mvps.org/st-software/Code/all.zip

Tuon paketin ohjelmalla MkConsole.exe ohjelman pystyy muuttamaan aidoksi konsoliohjelmaksi.

marde [12.07.2007 17:56:05]

#

Antti:
Erittäin paljon kiitoksia, lähti lyyti kirjoittamaan noilla ohjeilla.. Ei olisi meikäläisen tiedoilla ihan heti ratkennut tämä ongelma..


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta