Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 07.06.2018, 16:13   #1
1_4yma_1
Новичок
 
Регистрация: 07.06.2018
Сообщений: 3
Репутация: 10
Восклицание Как закрыть стороннюю программу программно

Такая тема, есть программа которая открывает по нажатию кнопки презентацию (1.pptx) и есть 2 кнопка (закрыть) ну и нужно чтобы по нажатию кнопки процесс PowerPoint крякался или сама презентация закрывалась, я пробовал через код
--------------------------------------------------
Код:

h:=FindWindow(nil, 'Microsoft PowerPoint'); 
 if h=0 then exit;                                       
 SendMessage(h, WM_DESTROY, 0,0)

Пожалуйста, оформляйте Ваш код согласно правилам.
--------------------------------------------------
но там просто верхняя полоска где крестик полосочка и окошко исчезает а презенташка остаётся открытой
Исходник прикреплён!
Вложения
Тип файла: rar Презенташка.rar (170.2 Кб, 3 просмотров)

Последний раз редактировалось Вадим Мошев; 07.06.2018 в 21:42.
1_4yma_1 вне форума   Ответить с цитированием
Старый 07.06.2018, 21:32   #2
Sciv
Профессионал
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Адрес: Курган
Сообщений: 3,201
Репутация: 1205
По умолчанию

Код:

function TServiceManager.KillTask(const aTaskFileName: string): Integer;
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
  FExeName: string;
  ExePos: integer;
begin
  ExePos := pos('.exe', aTaskFileName);
  if ExePos > 0 then
    FExeName := Copy(aTaskFileName, 1, ExePos + 3);
  Result := 0;
  if aTaskFileName <> '' then
  begin
    FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
    ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
    while Integer(ContinueLoop) <> 0 do
    begin
      if (UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(FExeName))
          or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(FExeName))
      then
        Result := Integer(TerminateProcess(
      OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0));
      ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
    end;
    CloseHandle(FSnapshotHandle);
  end
end; // KillProcess

__________________
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума   Ответить с цитированием
Старый 08.06.2018, 13:54   #3
1_4yma_1
Новичок
 
Регистрация: 07.06.2018
Сообщений: 3
Репутация: 10
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Код:

function TServiceManager.KillTask(const aTaskFileName: string): Integer;
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
  FExeName: string;
  ExePos: integer;
begin
  ExePos := pos('.exe', aTaskFileName);
  if ExePos > 0 then
    FExeName := Copy(aTaskFileName, 1, ExePos + 3);
  Result := 0;
  if aTaskFileName <> '' then
  begin
    FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
    ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);
    while Integer(ContinueLoop) <> 0 do
    begin
      if (UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(FExeName))
          or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(FExeName))
      then
        Result := Integer(TerminateProcess(
      OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0));
      ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
    end;
    CloseHandle(FSnapshotHandle);
  end
end; // KillProcess

Проблемы по этому коду? И 2 вопрос, как подключить этот процесс к кнопке?
А и ещё вопрос как сделать так чтобы значение счетчика обратного отсчёта сохранялось при закрытии, а потом при дальнейшем использовании программы он начинал с того места с которого закончил? Заранее спасибо)
1_4yma_1 вне форума   Ответить с цитированием
Старый 08.06.2018, 14:00   #4
Sciv
Профессионал
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Адрес: Курган
Сообщений: 3,201
Репутация: 1205
По умолчанию

Цитата:
Сообщение от 1_4yma_1 Посмотреть сообщение
Проблемы по этому коду?
У меня - никаких, работает.


Цитата:
Сообщение от 1_4yma_1 Посмотреть сообщение
И 2 вопрос, как подключить этот процесс к кнопке?
Вызывать эту функцию по событию кнопки OnClick


Цитата:
Сообщение от 1_4yma_1 Посмотреть сообщение
как сделать так чтобы значение счетчика обратного отсчёта сохранялось при закрытии
Сохранять в файл, например. Или в реестр.
__________________
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума   Ответить с цитированием
Старый 08.06.2018, 14:40   #5
1_4yma_1
Новичок
 
Регистрация: 07.06.2018
Сообщений: 3
Репутация: 10
По умолчанию

А uses надо что нибудь прописывать?
1_4yma_1 вне форума   Ответить с цитированием
Старый 08.06.2018, 14:43   #6
Sciv
Профессионал
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Адрес: Курган
Сообщений: 3,201
Репутация: 1205
По умолчанию

У меня так:

Код:

uses
  System.Classes, System.SysUtils, Windows, WinSvc, Tlhelp32;

__________________
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запустить стороннюю программу с ПРАВАМИ АДМИНИСТРАТОРА - Delphi WinAPI yurius Общие вопросы Delphi 6 15.05.2016 16:19
Mono: как программно закрыть окно Mixim Общие вопросы .NET 5 02.09.2012 12:13
Как программно закрыть другое приложение(программу) masicev C# (си шарп) 14 07.07.2012 15:57
Как закрыть программу?! Abnimka Общие вопросы Delphi 2 10.06.2010 14:56
Как программно закрыть все открытые модальные формы перед сворачиванием главной формы в трей? SkAndrew Общие вопросы Delphi 8 27.01.2010 23:44


08:10.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru