Jump to content
Korean Random

AtotIK

User
  • Content Count

    1,518
  • Joined

  • Last visited

  • Days Won

    8

Everything posted by AtotIK

  1. А вот универсальный метод, но он сложнее. Работает везде. type HANDLE = LongInt; HMODULE = HANDLE; pHMODULE = Array[0..255] of HMODULE; LPDWORD = DWORD; PDWORD = Array[0..255] of DWORD; LPTSTR = String; function OpenProcess(dwDesiredAccess: DWORD; bInheritHandle: Boolean; dwProcessId: DWORD): HANDLE; external '[email protected] stdcall delayload'; function CloseHandle(hObject: HANDLE): BOOL; external '[email protected] stdcall delayload'; function EnumProcesses(var pProcessIds: PDWORD; cb: DWORD; var pBytesReturned: DWORD): BOOL; external '[email protected] stdcall delayload'; function EnumProcessModules(hProcess: HANDLE; var lphModule: pHMODULE; cb: DWORD; var lpcbNeeded: LPDWORD): BOOL; external '[email protected] stdcall delayload'; function GetModuleFileNameExW(hProcess: HANDLE; hModule: HMODULE; lpFilename: LPTSTR; nSize: DWORD): DWORD; external '[email protected] stdcall delayload'; function IsAppRunning(procName: String; FullPath: Boolean): Boolean; var Found, isModuleShot: Boolean; FilenameEnd: Integer; Filename: AnsiString; NA, Entry, maxEntries: DWORD; Processes: PDWORD; lpFilename: LPTSTR; hProcess: HANDLE; hMod: pHMODULE; begin SetLength(lpFilename, 255); Found := False; if (EnumProcesses(Processes, SizeOf(Processes), maxEntries)) then begin Entry := 0; maxEntries := maxEntries / SizeOf(maxEntries); while ((not Found) and (Entry < maxEntries)) do begin hProcess := OpenProcess($400 or $10, False, Processes[Entry]); if (hProcess <> 0) then begin isModuleShot := False; begin isModuleShot := EnumProcessModules(hProcess, hMod, SizeOf(hMod), NA); end; if (isModuleShot) then if (GetModuleFileNameExW(hProcess, hMod[0], lpFilename, Length(lpFilename)) > 0) then begin FilenameEnd := Pos(#0, lpFilename); Filename := Copy(Lowercase(lpFilename), 1, FilenameEnd - 1); if (not Fullpath) then Filename := ExtractFileName(Filename); if (AnsiLowercase(Filename) = AnsiLowercase(procName)) then Found := True; end; CloseHandle(hProcess); end; Entry := Entry + 1; end; end; Result := Found; end; function NextButtonClick(CurPage: Integer): Boolean; begin Result := True; if CurPage = 1 then begin case IsAppRunning('WorldOfTanks.exe', False) of True: begin MsgBox(ExpandConstant('{cm:IsAppRunningLabel}'), mbError, MB_OK); Result := False; end; False: Result := True; end; end; end; Тогда может это не твоё?
  2. function IsAppRunning(const FileName : AnsiString): Boolean; var FSWbemLocator: Variant; FWMIService : Variant; FWbemObjectSet: Variant; begin Result := False; FSWbemLocator := CreateOleObject('WBEMScripting.SWBEMLocator'); FWMIService := FSWbemLocator.ConnectServer('', 'root\CIMV2', '', ''); FWbemObjectSet := FWMIService.ExecQuery(Format('SELECT Name FROM Win32_Process Where Name="%s"', [FileName])); Result := (FWbemObjectSet.Count > 0); FWbemObjectSet := Unassigned; FWMIService := Unassigned; FSWbemLocator := Unassigned; end; function InitializeSetup(): Boolean; begin case IsAppRunning('WorldOfTanks.exe') of True: begin MsgBox(ExpandConstant('{cm:IsAppRunningLabel}'), mbError, MB_OK); Result := False; end; False: begin Result := True; end; end; end; Работает с Windows 7. Что бы не вылетал с ошибкой инсталлятор на XP и Vista нужно обвернуть это в проверку версии, а лучше запретить инсталлятор запускать на системах ниже Windows 7 (сколько можно уже?). Так же можно закинуть в NextButtonClick с проверкой на любой странице (первой). Не причастные к друг другу вещи. Ищите ошибку у себя.
  3. Скачивать XFW.ExtensionLib_2021.05.01.zip, брать в архиве файл xvmextensions.x86_32.dll, файл примера там же.
  4. Лучше используйте это: https://gitlab.com/xvm/xvm-extensions/xfw.extensionlib/-/releases
  5. В XVM можно использовать шаблоны для миникарты под названием vtypeDead, vehicleDead и nickDead из minimapLabelsTemplates.xc. Подключите их в minimapLabels.xc и minimapLabelsAlt.xc.
  6. К сборке претензий нет. Претензии к картинке в шапке.
  7. А как она может не появляться при каждом запуске? Вы проверяете какие-то данные и только потом отображаете что на скриншотах? Инсталлятор показывает то, что ему сказали отобразить. А вот если идут дополнительные проверки, то смотрите в них. Какой вопрос, такой ответ.
  8. @CaitanBlood файлик под 1.14. mod_no_radio_ally_killed_by_enemy.wotmod
  9. %SYSTEMDRIVE%\Users\%USERNAME%\AppData\Roaming\Wargaming.net\WorldOfTanks\preferences.xml Поиск по параметру <sensitivity>.
  10. По сути должно быть вот так. Проверяй (закинуть в mods\*версия*). no_radio_ally_killed_by_enemy.wotmod
  11. Скорее всего вам сюда:
  12. @ktulho отвалился скрипт на 1.13. В логах ошибок нет. xvm.log python.log
  13. Да, спасибо. Уже обновился и понял, что пора сносить пост. А ты уже ответил. Спасибо.
  14. @night_dragon_on подскажи как нарисовать QL версию WZ-111?
  15. Черный рынок точно будет, в файлах релизного 1.12. тексты и кейсы присутствуют.
  16. https://github.com/yamashi/PerformanceOverhaulCyberpunk/releases Без патчей, работает как плагин. Куча плюшек в придачу, есть конфиг для настройки.
  17. Увы, но не пропал. Процитирую "да, да есть такая проблема :("
  18. Это баг клиента, моды тут не причём.
  19. Вроде бы это тема для TankIconMaker. Для неё и расписал решение.
  20. Качаешь билд 21, выставляешь в свойствах каждого набора ширину 4512 и делаешь.
×
×
  • Create New...