$ 제겐 너무 벅차요..
...델파이 응용프로그램에서 외부프로그램인 도스에디터를 실행시키고 나서
도스에디터의 핸들을 얻으려고 하는데,잘 받아지지 않아요.
답답해서 소스도 함께 올립니다.고수님들 잘 보아주세요(꼭 부탁).
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() 이벤트로 윈도우 응용프로그램에서
도스프로그램을 제어하는 것이 가능합니까?
>>끝까지 읽어 주셔서 감사하구요,제발 부탁드립니다.
그럼 즐코하세요....