Q&A

  • 도스프로그램 핸들은 어떻게 얻나요?
$ 제겐 너무 벅차요..



...델파이 응용프로그램에서 외부프로그램인 도스에디터를 실행시키고 나서

도스에디터의 핸들을 얻으려고 하는데,잘 받아지지 않아요.

답답해서 소스도 함께 올립니다.고수님들 잘 보아주세요(꼭 부탁).



procedure TFMain.btnEditConnectClick(Sender: TObject);

const

VK_ALT:18;

var

h:THandle; //핸들 선언

CurrDir : array[0..200] of char; //현재디렉토리 저장 변수 선언

begin

//현재디렉토리를 CurrDir에 저장

GetCurrentDirectory(sizeof(CurrDir), CurrDir);



//디렉토리를 Edit로 넘김

SetCurrentDirectory('c:WINDOWSCOMMAND');



//도스에디트가 실행되어 있지 않으면 WinExec()로 실행

if FindWindow(nil,'한글 MS-DOS - EDIT')=0 then begin

WinExec('command.com /c edit.exe',sw_show);



//여기서부터 도스에디터의 핸들을 구하기 위해 구현한 곳인데,

핸들을 정확히 얻었는지 모르겠군요

h:=FindWindow(nil,'한글 MS-DOS - EDIT');



//만약 도스에디터의 핸들을 제대로 구했다면 도스에디터로 포커스를 옮기고

키보드이벤트로 도스에디터의 ALT+F 명령을 자동으로 실행되게하려고 합니다.

if h<>0 then begin



//도스에디터의 핸들이 제대로 구해지지 않아서 Step을 밟아 에러를 체크하면

여기서부터는 그냥 빠져나갑니다.(제가 하고 싶은 곳이 여기 입니다.)

SetForegroundWindow(h);

Keybd_Event(VK_ALT,VK_ALT,0,0);

Keybd_Event(Byte('F'),Byte('F'),0,0);

Keybd_Event(Byte('F'),Byte('F'),KEYEVENTF_KEYUP,0);

Keybd_Event(VK_ALT,VK_ALT,KEYEVENTF_KEYUP,0);

end

end



//이미 도스에디터가 실행 중이면 두번 실행되는 걸 막기 위함

else begin

h:=FindWindow(nil,'한글 MS-DOS - EDIT');

SetForegroundWindow(h);

end;

//여기 루틴은 제대로 실행 되거든요.그래서 여기서는 도스에디터의 핸들을

제대로 찾고 있는것 같구요.아무튼 핸들이 안 잡힙니다.

end;



참고로 ws32로 도스에디터의 클래스명을 찾아 보니까 tty로 보이던데,

제가 맞게 생각하는지 모르겠습니다.만약 tty가 맞다면

핸들을 h:=FindWindow('tty',nil)이나

h:=FindWindow('tty','한글 MS-DOS - EDIT')로 하는게

맞습니까? 해 보니까 틀린 것 같더라구요.틀리다면 당연히

tty가 아니겠지요?

또,spy로도 FindWindow를 해보았는데,이것은 잘 모르겠습니다.



너무 모르는게 많아서 죄송합니다.그래도 염치 불구하고 하나만 더 질문하겠습니다.



만약,핸들을 제대로 찾는다면 Keybd_Event() 이벤트로 윈도우 응용프로그램에서

도스프로그램을 제어하는 것이 가능합니까?



>>끝까지 읽어 주셔서 감사하구요,제발 부탁드립니다.

그럼 즐코하세요....

0  COMMENTS