Domanda

Come faccio a verificare se un'altra applicazione è occupata?

Ho un programma che invia il testo a una console. Il testo che io manderò contiene # 13 char (ad esempio ls#13cd documents#13dir). In altre parole, voglio mandare molti comandi in una sola volta e la console verrà elaborare uno per uno. Io mando il testo un carattere. A volte la console esegue solo ls e cd documents. Penso che forse questo è perché il mio programma invia continuamente carattere anche se la console è occupato, nel qual caso la console non riceve personaggi in arrivo.

Questo è il mio codice:

procedure TForm1.SendTextToAppO(Str: String; AHandle: Integer);
var
  iWindow, iPoint, i: Integer;
  SPass: PChar;
  sList: TStringList;
begin
sList := TStringList.Create;
  ExtractStrings([#13],[' '],PChar(Str),sList);
  iWindow := AHandle;// AHandle is the handle of the console
  iPoint := ChildWindowFromPoint(iWindow, Point(50,50));
  for i:=0 to sList.Count-1 do begin
    SPass := PChar(sList[i]);
    try
      while(SPass^ <> #$00) do begin
      SendMessage(iPoint,WM_CHAR,Ord(SPass^),0);
      Inc(SPass);
      end;
      SendMessage(iPoint,WM_KEYDOWN,VK_RETURN,0);
    except
        // do nothing;
    end;
  end;
end;

Sto usando Delphi 7.

È stato utile?

Soluzione

Se interpreto correttamente si mette in discussione si sta inviando il testo a una sorta di guscio / riga di comando interprete e lo si vuole per eseguire i comandi.

Di solito comando uscita interpreti di linea di una certa prompt (come $ su un sistema Linux o C: \ per DOS), che indicano che essi possono accettare nuovi comandi. Hai bisogno di leggere l'output di attendere la richiesta appropriata prima di inviare un altro comando. Se non il testo inviato sarà consumato come input dal comando attualmente in esecuzione (come si è verificato).

Altri suggerimenti

Lothar è sulla strada giusta; ciò che si vuole fare è, invece di usare ShellExecute, usare CreateProcess. Guarda intorno Stack Overflow e Google per "Console Redirection" -. Che ti farti quello che stai cercando per

Credo di capire cosa sta succedendo, non che io abbia una correzione per esso:

Si invia un comando alla console. Mentre il comando è in esecuzione il programma riceverà le chiavi inviati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top