안녕하세요?
회사 공정관리 프로그램을 수정하고 있는 초보 델파이 입문자입니다.
이번에 수정중인 내용은
패치가 발생하면 자동으로 서버에서 다운로드를 받아 업그레이드를 하는 부분을 개발중입니다.
구현방법은 프로그램 실행하여 로그인을 하면
패치가 있는지 확인하여 프로그램을 종료하고 업데이트프로그램을 구동하는 방식을 구현하였습니다.
문의드리는 내용은
본 프로그램인 workprocess.exe가 여러개 미리 실행되어 있는 경우에
새로 로그인을 한 workprocess.exe를 제외하고
이미 실행되고 있는 프로그램들을 종료하는 방법입니다.
FindWindow 후 PostMessage(handle, wm_close, 0, 0)을 해보니
기존 프로그램은 종료 안 하고 새로 실행한 프로그램만 종료가 되더군요... ㅠ_ㅠ
for문이나 while문으로 findwindow를 순차적으로 돌릴수 있나요?
제가 하니까 계속 같은 프로그램만 나타나더라구요... ㅠ_ㅠ
작은 도움 주시면 감사하겠습니다..
function EnumWindowsProc(Hwnd:Hwnd;IParam:lParam):Boolean; stdcall;
begin
Result:=True;
// 일단 윈도우가 보이는 상태인지 보이지 않는 상태인지 검사하는 API 함수
if not IsWindowVisible(Hwnd) then
// 눈에 보이지 않는 윈도우 핸들이면 나갑니다.
Exit;
// 그 다음에 윈도우가 아이콘화되어있는지 검사하는 API 함수
if IsIconic(Hwnd) then
// 아이콘화 된 윈도우 핸들이라면 나갑니다.
Exit;
// 요기서 종료시킬 윈도우를 찾아서 종료시키면 되지 않을가요 ?..
// PostMessage(Hwnd, wm_close, 0, 0)
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@EnumWindowsProc,0);
end;
코드끝: <!--CodeE-->
허접한 생각이엇습니다 ㅡ.ㅡ