// --------------------------------------------
// 파일이 실행상태가 아니면 실행하기
// 최소화 상태면 활성화시키기
// 다른 창 아래에 가려졌으면 맨 앞으로 가져오기
// --------------------------------------------
procedure test;
begin
h := WindowFromProcessID(getProcessId('실행파일명.exe'));
// h := FindWindow('TFormName', nil);
if h = 0 then
ShellExecute(handle, 'open', PChar(FileName), nil, nil, SW_SHOW)
else if IsIconic(h) then
ShowWindow(h, SW_RESTORE)
else
SetForegroundWindow(h);
end;
// 실행파일명으로 프로세스 ID 찾기
function getProcessId(Exename: string; User: string = ''): DWORD;
var
snap: DWORD;
pe: TprocessEntry32;
sUser, sDomain: string;
begin
Result := 0;
Exename := LowerCase(Exename);
snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if snap <> INVALID_HANDLE_VALUE then
begin
pe.dwSize := SizeOf(TprocessEntry32);
if process32First(snap, pe) then
begin
repeat
if LowerCase(pe.szExeFile) = Exename then
begin
if User <> '' then
begin
if not GetUserAndDomainFromPID(pe.th32ProcessID, sUser,
sDomain) then
Continue;
if LowerCase(sUser) <> LowerCase(User) then
Continue;
end;
Result := pe.th32ProcessID;
CloseHandle(snap);
Exit;
end;
until not process32Next(snap, pe);
CloseHandle(snap);
end;
Result := 0;
end;
end;
// 프로세스 ID로 핸들 구하기
function WindowFromProcessID(pID: DWORD): HWND;
var
Data: TEnumData;
begin
Data.pID := pID;
Data.hW := 0;
EnumWindows(@EnumProc, longint(@Data));
Result := Data.hW;
end;
'삽질 > Delphi' 카테고리의 다른 글
[Delphi] InnoSetup : 방화벽 추가 (netsh.exe) (0) | 2021.08.30 |
---|---|
[Delphi] ComPort 오류 수정 (0) | 2020.08.03 |
[Delphi] 기본 프린터 설정 및 정보 가져오기 (0) | 2020.05.28 |
[Delphi] TStringlist를 OleVariant로 변환하기 (0) | 2019.06.14 |
[Delphi] Webbrowser html 가져오기 (0) | 2019.06.14 |
댓글