Я слышал, что некоторые авторы пользовательских компонентов используют процедуру RTL, которая проверяет, работает ли Delphi, чтобы установить ограничения условно-бесплатного программного обеспечения. Кто-нибудь знает, что это за распорядок? Проверка очевидных имен, таких как «DelphiRunning» или «IsDelphiRunning», не дает ничего полезного.
задан 28 мая ’09, 14:05
3 ответы
Существуют 2 разные идеи здесь:
— Delphi запущен и работает
— Приложение работает под отладчиком
Обычный способ проверить, если Delphi работает заключается в проверке наличия известных IDE Windows с определенным именем класса, например TAppBuilder или TPropertyInspector.
Эти 2 работают во всех версиях Delphi IIRC.
Если вы хотите узнать, подходит ли ваше приложение работает под отладчиком, т.е. запускается в обычном режиме из среды IDE с помощью «Выполнить» (F9) или присоединен к отладчику, когда он уже запущен, вам просто нужно протестировать глобальную переменную DebugHook.
ДИАГНОСТИКА ГРУЗОВИКОВ БЮДЖЕТНЫМ СКАНЕРОМ DELPHI DS 150E
Обратите внимание, что «Отсоединить от программы» не удаляет значение DebugHook, но «Присоединить к процессу» устанавливает его.
function IsDelphiRunning: Boolean; begin Result := (FindWindow(‘TAppBuilder’, nil) > 0) and (FindWindow(‘TPropertyInspector’, ‘Object Inspector’) > 0); end; function IsOrWasUnderDebugger: Boolean; begin Result := DebugHook <> 0; end;
Если цель — ограничить использование пробной версии вашего компонента, когда приложение разрабатывается, у обоих есть недостатки:
— Скрытые окна с правильным именем класса / заголовком могут быть включены в приложение
— DebugHook можно вручную установить в коде
ответ дан 28 мая ’09, 19:05
Источник: stackovergo.com
Как проверить запущена ли программа delphi
У нас вы качаете только рабочие исходники
Как определить, запущена ли Delphi
Как определить, запущена ли Delphi
Как определить, запущена ли Delphi If FindWindow(‘TAppBuilder’,nil)
Эта запись была добавлена в Четверг, 15 мая, 2008 — 23:23 В разделы Delphi, IDE. Вы можете подписаться на получение новых комментариев RSS 2.0 feed. Both comments and pings are currently closed.
Архивы
Категории
- Delphi (226)
- BDE (3)
- dll (10)
- Exceptions (2)
- IDE (10)
- INI-файлы (3)
- OLE (2)
- БД (7)
- Игры (19)
- Медиа (11)
- Ресурсы (12)
- Сеть, модем (22)
- Система (33)
- Файлы (6)
- Функции (6)
- Excel (7)
- Word (5)
- Hooks (4)
- Завершение работы (13)
- Запуск программ (16)
- Общие вопросы (22)
- Окна (1)
- Переменные среды (9)
- Графика (52)
- Дата, время (6)
- Кодирование (6)
- Математика (4)
- Преобразования (4)
- BIOS (3)
- CD, DVD (7)
- Видеосистема (3)
- Диски (4)
- Звуковые устройства (4)
- Источники питания (1)
- Клавиатура (24)
- Мышка (5)
- Порты (20)
- Процессор (4)
- Сетевая карта (1)
- ADO (9)
- BLOB поля (11)
- DBase (1)
- interbase (5)
- MS Office (2)
- sql (1)
- Application (5)
- TBitMap (4)
- TCanvas (2)
- TDateTime (1)
- TFont (4)
- TIcon (2)
- TJpegImage (1)
- TList (1)
- TmetaFile (1)
- TString, TStrings (4)
- BitBtn (4)
- ComboBox (2)
- CoolBar (1)
- DBCtrlGrid (1)
- DBGrid (18)
- DBImage (2)
- DrawGrid (1)
- Edit (3)
- FileListBox (1)
- form (29)
- image (12)
- ImageList (3)
- Label (1)
- ListBox (9)
- ListView (2)
- MediaPlayer (6)
- Memo (8)
- Menu (5)
- PageControl (1)
- ProgressBar (2)
- Query (1)
- RadioButton (1)
- RadioGroup (1)
- RichEdit (4)
- ScrollBox (3)
- ShellListView (2)
- SpeedButton (1)
- StatusBar (1)
- StringGrid (4)
- TabbedNoteBook (1)
- Timer (2)
- TrackBar (1)
- TreeView (15)
- WebBrowser (6)
- Help (3)
- Диалоги (25)
- Процессы (26)
- Реестр (5)
- Сети, интернет (36)
- Сообщения (7)
- Файловая система (37)
- Экран (13)
- Ярлыки (5)
Кейворды
delphi исходники для управления windows Работает на WordPress | студия Веб-сателлит |
Delphi DS150E, Autocom, Multidiag — диагностический сканер с Aliexpress
Источник: pblog.ru
Как проверить, запущен ли процесс с использованием Delphi?
У меня есть программа обновления, я хочу, чтобы она проверяла, что программа, которую она собирается обновить, в данный момент не запущена, желательно, чтобы она проверяла всех пользователей, а не только текущего пользователя.
user26305 18 май ’09 в 04:12 2009-05-18 04:12
2009-05-18 04:12
5 ответов
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;
user108578 18 май ’09 в 04:18 2009-05-18 04:18
2009-05-18 04:18
Если вы пишете немного кода автообновления, вы также можете подумать о том, чтобы установить какое-либо соединение с вашим приложением и попросить его отключиться.
Это может включать, например, размещение сообщения в главном окне вашего приложения с указанием закрыть его. Или открытие трубы IPC и т. Д.
user91872 18 май ’09 в 04:52 2009-05-18 04:52
2009-05-18 04:52
uses TlHelp32, PsAPI; function ProcessExists(anExeFileName: string): Boolean; var ContinueLoop: BOOL; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; fullPath: string; myHandle: THandle; myPID: DWORD; begin // wsyma 2016-04-20 Erkennung, ob ein Prozess in einem bestimmten Pfad schon gestartet wurde. // Detection wether a process in a certain path is allready started. // http://stackru.com/questions/876224/how-to-check-if-a-process-is-running-using-delphi // http://swissdelphicenter.ch/en/showcode.php?id=2010 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(ExtractFileName(anExeFileName)) then begin myPID := FProcessEntry32.th32ProcessID; myHandle := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, myPID); if myHandle <> 0 then try SetLength(fullPath, MAX_PATH); if GetModuleFileNameEx(myHandle, 0, PChar(fullPath), MAX_PATH) > 0 then begin SetLength(fullPath, StrLen(PChar(fullPath))); if UpperCase(fullPath) = UpperCase(anExeFileName) then Result := True; end else fullPath := »; finally CloseHandle(myHandle); end; if Result then Break; end; ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); end; CloseHandle(FSnapshotHandle); end;
user6230608 20 апр ’16 в 13:50 2016-04-20 13:50
2016-04-20 13:50
Если у вас есть контроль над приложением (как следует из вашего вопроса), хороший способ сделать это — создать именованный объект сопоставления файлов в начале процесса. Это похоже на предложение создать мьютекс из RedLEON.
// Add this into the application you wish to update CreateFileMapping(HWND($FFFFFFFF), nil, PAGE_READONLY, 0, 32, ‘MAIN-PROGRAM’); // Note: Mapping object is destroyed when your application exits // Add this into your updater application var hMapping: HWND; begin hMapping := CreateFileMapping(HWND($FFFFFFFF), nil, PAGE_READONLY, 0, 32, ‘MAIN-PROGRAM’); if (hMapping <> 0) then begin if (GetLastError() = ERROR_ALREADY_EXISTS) then ShowMessage(‘Application to update is already running!’); end;
Проверьте документацию MSDN на CreateFileMapping для получения дополнительной информации.
Смотрите также принятый ответ на этот вопрос, который охватывает ответ Люка и предоставляет дополнительные решения.
Источник: stackru.com