Results 1 to 13 of 13

Thread: Commands voor ShellExecute, CreateProcess, CaptureConsoleOutput, enz...

  1. #1

    Commands voor ShellExecute, CreateProcess, CaptureConsoleOutput, enz...

    Hoi,

    Ik ben er zelf al zoveel maal tegenaan gelopen dat ik dit wil meegeven als tip:

    Hoe commands (voor bv "shellexecute", "createprocess", "CaptureConsoleOutput", enz...) samenstellen.


    Veronderstel dat je de volgende soort command wil meegeven aan een de bovenstaande functies: 'PathAndExeFileNaam Parameter1 Parameter2', bv 'C:\MyProgs\Prog1.exe x.txt y.txt'.
    Dit werkt goed omdat zowel in het path van het uit te voeren programma en ook in de parameters geen spaties zitten.


    Iets anders wordt het bv als het uit te voeren programma bv
    'C:\Program Files\Prog1.exe Parameter 1 Parameter 2' zou zijn (zowel de pathnaam van de exefile als de parameters spaties bevatten spaties).
    Windows kan daar niet mee om (het veronderstelt dat na een spatie een nieuwe parameter begint).


    De oplossing is simpel: zet dubbele quotes rond de naam (path + naam) van het uit te voeren programma en rond iedere parameter.

    Bovenstaand voorbeeld wordt dus:
    Code:
    '"C:\Program Files\Prog1.exe" "Parameter 1" "Parameter2"'
    of, als je alles in variabelen hebt (path, exefile, parameters):

    Code:
    Path := 'C:\Program Files\\';
    Exefile := 'Prog1.exe';
    Parameter1 := 'Dit is een tekstfile.txt';
    Parameter2 := 'Dit is een andere tekstfile.txt';
    S := '"' + Path + Exefile + '" "' + Parameter1 + '" "' + Parameter2 + '"';
    DiffOutput := CaptureConsoleOutput(S);
    Dus: als de volgende keer "shellexecute", "createprocess", "CaptureConsoleOutput", enz... niet het gevraagde uitvoert: check bovenstaande even...

    Veel plezier.
    Last edited by Dany; 01-May-04 at 20:36.
    Vriendelijke groeten,
    Dany

  2. #2
    Code:
    Parameter1 := 'Dit is een tekstfile.txt';
    Parameter1 := 'Dit is een andere tekstfile.txt';
    Zal wel een Typo zijn?
    De beste manier om te leren is door fouten te maken.
    80 procent van alle leugens die jij en ik vertellen blijft onopgemerkt

  3. #3
    Snif, inderdaad. Is al verbeterd.
    Vriendelijke groeten,
    Dany

  4. #4
    Je kan natuurlijk ook de functie QuotedStr gebruiken voor het tussenzetten van dubbele quotes. Je hoeft dan niet rekening te houden dat bv in je paramaters ook een Dubbele Quote in zit

  5. #5
    Oké, welbedankt.

    Dan wordt dat dus:
    Code:
    S := QuotedStr(Path + Exefile) + ' ' + QuotedStr(Parameter1) + ' ' + QuotedStr(Parameter2);
    Dat ziet er inderdaad wat simpeler (beter leesbaar) uit.

    (nog niet uitgetest...)

    Volgende post: QuotedStr gebruikt 'single quotes' in plaats van dubbele.
    Last edited by Dany; 18-Jun-04 at 14:09.
    Vriendelijke groeten,
    Dany

  6. #6
    Hoi,

    kan het zijn dat "QuotedStr" met "enkele" quotes werkt (zoals men in Delphi een stringconstante definieert) in plaats van "dubbele" quotes?

    Werkt die methode dan nog voor het quoten van parameters (accepteert bv "ShellExecute" ook die enkele quotes)?
    Vriendelijke groeten,
    Dany

  7. #7
    Yay: Student(je) af
    Join Date
    Jun 2003
    Location
    Harderwijk
    Posts
    2,621
    Danny,
    QuotedStr quote de string inderdaad in ENKELE aanhalingstekens.

    Met
    ShowMessage('Hallo, ik zeg ' + QuotedStr('dit'));
    wordt dus
    Hallo, ik zeg 'dit'
    getoond.
    My software never contains bugs. Perhaps just undocumented features.

  8. #8
    Thanks,

    Dat dacht ik al.

    Maar...

    Werkt die methode dan nog voor het quoten van parameters (accepteert bv "ShellExecute" ook die enkele quotes)?
    (Zie mijn eerste post)
    Vriendelijke groeten,
    Dany

  9. #9
    Nee, voor een ShellExecute moet het echt een dubbele quote zijn.
    Marcel

  10. #10
    Hoi,

    Er is ook nog zoiets als "AnsiQuotedStr" uit "SysUtils":
    Code:
    function AnsiQuotedStr(const S: string; Quote: Char): string;
    Daarmee kun je het quote teken zelf bepalen.
    Dat wordt dan dus:
    Code:
    S := AnsiQuotedStr(Path + Exefile, '"') + ' ' + AnsiQuotedStr(Parameter1, '"') + ' ' + AnsiQuotedStr(Parameter2, '"');
    (niet getest)
    Last edited by Dany; 21-Jun-04 at 17:46.
    Vriendelijke groeten,
    Dany

  11. #11
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    Wel leuk dat je het hebt over AnsiQuotedStr maar vervolgens de declaratie laat zien van de functie AnsiDequotedStr
    !

  12. #12
    @Svg:

    Sorry, mijn fout, is al hersteld.
    Vriendelijke groeten,
    Dany

  13. #13
    Hoi,

    Er is nu een functie om het werk (het samenstellen van een CommandLine) te vergemakkelijken: zie post http://www.nldelphi.com/forum/showth...920#post130920

    Verder brouwend op voorgaande voorbeelden kan men met de functie een command line maken als volgt:
    Code:
    S := MakeCommandLine
          ([ Path + Exefile,
             Parameter1,
             Parameter2
          ]);
    De functie zet dubbele quotes (voor parameters met spaties erin) en spaties (om de parameters te scheiden) waar het nodig is.
    Last edited by Dany; 03-Aug-04 at 13:26.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •