2009-04-07 3 views
2

다른 응용 프로그램이 사용 중인지 어떻게 확인합니까?다른 응용 프로그램이 사용 중인지 확인하십시오.

텍스트를 콘솔로 보내는 프로그램이 있습니다. 보내 드릴 텍스트에 # 13 자 (예 : ls#13cd documents#13dir)가 포함되어 있습니다. 즉, 한 번에 많은 명령을 보내려고하고 콘솔이 하나씩 명령을 처리합니다. 문자로 문자를 보내고 있습니다. 때때로 콘솔은 lscd documents 만 실행합니다. 내 프로그램이 콘솔이 통화 중일 때도 계속 문자를 전송하기 때문에 콘솔이 들어오는 문자를 수신하지 못하기 때문일 수 있습니다.

내 코드입니다 :

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; 

난 당신이 올바르게 쉘/명령 줄 인터프리터 일종의 텍스트를 보내는 질문을 해석하면 델파이 7

+0

"코드 샘플"버튼을 사용하여 질문을 작성하십시오. –

답변

5

을 사용하고 당신이 원하는 명령을 실행합니다.

일반적으로 명령 줄 해석기는 새 명령을 받아 들일 수 있음을 나타내는 특정 프롬프트 (예 : Linux 시스템에서는 $ 또는 DOS에서는 C : \)를 출력합니다. 다른 명령을 보내기 전에 적절한 프롬프트를 기다리려면 출력을 읽어야합니다. 당신이 보내지 않으면 당신의 보낸 텍스트는 당신이 경험 한 것처럼 현재 실행중인 명령에 의해 입력으로 소비 될 것입니다.

콘솔에 명령을 보내

+0

예, 그게 제가 생각한 것입니다. 어떻게? 캐릭터를 보내신 후 콘솔의 출력을 읽으시겠습니까? 나는 그것이 이상적이라고 생각하지 않는다. WaitforInputIdle에 대해 읽었습니다. 그러나 콘솔을 열기 위해 shellexecute를 사용하고 있습니다. 그래서 그것은 나를 위해 작동하지 않습니다. – junmats

+0

lothar, 나는 당신의 제안을 시도했지만 내가 복사 할 수있는 유일한 텍스트는 내가 입력 한 것입니다. 미리 정의 된 텍스트 (예 : c : \\)를 복사 할 수 없습니다. 콘솔에있는 모든 텍스트를 복사한다는 것을 알고 있습니까? 귀하의 도움을 많이 주시면 감사하겠습니다. – junmats

+0

지나친 과소 평가가 옳다고 생각합니다. 명령 인터프리터는 입력 및 출력을 읽고 쓸 수있는 프로세스로 시작해야합니다. 파이프. 그것은 훨씬 쉬울 것입니다. – lothar

0

나는 내가 그것에 대한 수정을하지 않는 것이, 무슨 일이 일어나고 있는지 이해 생각합니다. 명령이 실행 중일 때 프로그램은 사용자가 보내는 키를받습니다.

3

로타가 오른쪽 트랙에 있습니다. 원하는 것은 ShellExecute를 사용하는 대신 CreateProcess를 사용하는 것입니다. "Console Redirection"을 위해 Stack Overflow와 Google을 둘러보십시오. 그러면 원하는 것을 얻을 수 있습니다.