Как проверить, выполняет ли процесс Delphi использования?

Вам понадобится специальная обработка, чтобы сопоставить эти методы с примитивными параметрами с соответствующими типами в штучной упаковке.

Простой подход, который может быть достаточным, состоит в том, чтобы создать отображение между коробочным и примитивным типами и искать методы, использующие оба типа. Это всего лишь набросок:

    Map<Class<?>, Class<?>> boxedToPrimitive = new HashMap<>();
    boxedToPrimitive.put(Integer.class, Integer.TYPE);
    boxedToPrimitive.put(Long.class, Long.TYPE);
    boxedToPrimitive.put(Boolean.class, Boolean.TYPE);
    ...

    String name = getSetMethod(key);
    Method method;
    try {
        method = target.getClass().getMethod(name, val.getClass());
    } catch (NoSuchMethodException missing) {
        Class<?> alt = boxedToPrimitive.get(val.getClass());
        if (alt == null) throw missing;
        method = target.getClass().getMethod(name, alt);
    }
    method.invoke(target, value);
15
задан Community 23 May 2017 в 12:25
поделиться

2 ответа

от: http://www.delphitricks.com/source-code/windows/check_if_a_process_is_running.html

uses TlHelp32; 

    function processExists(exeFileName: string): Boolean; 
var 
  ContinueLoop: BOOL; 
  FSnapshotHandle: THandle; 
  FProcessEntry32: TProcessEntry32; 
begin 
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32); 
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); 
  Result := False; 
  while Integer(ContinueLoop) <> 0 do 
  begin 
    if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = 
      UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = 
      UpperCase(ExeFileName))) then 
    begin 
      Result := True; 
    end; 
    ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); 
  end; 
  CloseHandle(FSnapshotHandle); 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  if processExists('notepad.exe') then 
    ShowMessage('process is running') 
  else 
    ShowMessage('process not running'); 
end;
40
ответ дан 1 December 2019 в 00:27
поделиться

Если вы пишете немного автообновляющегося кода, вы также можете подумать о том, чтобы установить какое-либо соединение с вашим приложением и сказать ему, чтобы оно отключилось.

Это может, например, предполагать отправку сообщения в главное окно вашего приложения, в котором говорится, что оно должно выключиться. Или открытие трубы IPC и т. Д.

4
ответ дан 1 December 2019 в 00:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: