Pitäisi saada bat tiedosto suoritettua. Tämä toimiikin muuten hyvin, paitsi jos polussa on skandeja. Esim. tämä ei toimi, koska ä ja ö tulostuvat dos:ssa väärin.
var batchfile: Tstringlist;
begin
batchfile := TStringList.Create;
batchfile.add('"C:\Documents and Settings\JK\Työpöytä\Tiedosto.exe"');
batchfile.SaveToFile(tempdir 'Tiedosto.bat');
batchfile.Free;
chdir('c:\');
WinExec(PChar(tempdir 'Tiedosto.bat'),sw_hide);
end;
Kellään ideaa miten tämän saisi toimimaan aina?
Delphi ja bat
6
585
Vastaukset
- Delphikoodari..
Voisit kokeilla lyhyitä tiedostonimiä?
http://www.delphifaq.com/faq/delphi/windows_file_system/f414.shtml- Ideasta
Siihen löytyikin ihan extractshortpathname()
- että.-
Ideasta kirjoitti:
Siihen löytyikin ihan extractshortpathname()
Ei auta asiaa.
- koodari_
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders ja sieltä desktop.
Kun ohjelmallisesti sen tuolta luet niin menee nuo skanditkin ihan nappiin... - delphiguru
windows käyttää Windows-1252 -merkkikoodausta (uudemmat sisäisesti Unicode / UTF-16LE, mutta se ei ole tässä olennaista).
MS-DOS ja windowsin komentorivi käyttää OEM850 -koodausta.
jotta ä ja ö toimisivat oikein: CharToOemBuff function
https://msdn.microsoft.com/en-us/library/windows/desktop/dd319646(v=vs.85).aspx
Jos käytät CharToOemBuff -funktiota oikein, niin toki toimii ä tai ö -sisältävät tiedoston tai hakemiston nimet ihan oikein.
Jäynä on siinä, että jos ET KÄYTÄ tuota CharToOemBuff -funktiota, niin bat -tiedosto ei saa parametriksi ä tai ö -kirjainta lainkaan, vaan jonkun ihan väärän merkin.
Syynä on se, että .bat -tiedostossa merkkivalikoima/-koodaus on sama kuin MS-DOSissa eli oem850 eikä Windows-1252.
HUOM:
Itseasiassa CharToOemBuff -funktiota ei ole olemassa !
Sensijaan on olemassa CharToOemBuffA ja CharToOemBuffW -funktiot.
Eli jos lähde on AnsiString niin käytä CharToOemBuffA.
Jos lähde on WideString tai UnicodeString, niin käytä CharToOemBuffW.
HUOM: Jos lähde on pelkkä String, niin huomaa:
Vanhemmat versiot KUIN Delphi 2009:
type
String = AnsiString;
Delphi 2009 sekä sitä uudemmat versiot:
type
String = UnicodeString;
em. tyyppimäärityksiä et siis kirjoita sinä, vaan ne ovat Delphissä jo valmiiksi voimassa !
Delphin CharToOemBuff -funktio on siis itseasiassa alias:
Vanhemmat versiot KUIN Delphi 2009:
CharToOemBuff = CharToOemBuffA
Delphi 2009 sekä sitä uudemmat versiot:
CharToOemBuff = CharToOemBuffW - Anonyymi
Katso esim. funktio:
CharToOemA function
eli komentorivi käyttää merkistöä 850 mutta GUI -sovellukset merkistöä Windows-1252. (tai unicode).
ON suora muunnosfunktio unicode -> 850 / OEM850:
CharToOemBuffA
ja
CharToOemBuffW
eli noilla saa muunnettua komentoriviohjelman vaatimaan OEM850 -muotoon.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Nyt tajusin mitä haet takaa
En epäile etteikö meillä olisi kivaa missä vaan. Se on iso hyppy henkisellä tasolla sinne syvempään päätyyn, kuten tiedä433683- 362354
Naiselle mieheltä
Huomasin tuossa, että jääkaapissani on eräs sinun ostamasi tuote edelleen avaamattomana. Arvaatko mikä?321935- 191679
- 171659
- 231578
- 241437
Ihmetteletkö, mihin sinussa ihastuin?
Pikkuhiljaa huomasin, että olet ainutlaatuinen luonne, plussana tietysti ulkoiset avut. Toista ei taida löytyä koko maai841398- 221379
Mitä yhteistä on sulla ja kaivatulla?
Onko teillä samantyyppinen olemus tai luonne? Vai muistuttaako vartalonne toisiaan? Tai kasvot? Entä pukeutuminen? Onko891272