Jump to content

Leaderboard

Popular Content

Showing content with the highest reputation on 10/28/2015 in all areas

  1. There are some ways to do this. Such as using a external DLL.But I do not like this way. The Inno surport Pascal script. The Pascal script can call standard Win32 API functions inside standard Windows DLLs. So we can check the app is whether running. Here is a part of script in section:; Any question, let me know. ;It work on 32 and 64 modules! [code] type HANDLE = LongInt; HMODULE = HANDLE; pHMODULE = Array[0..255] of HMODULE; LPDWORD = DWORD; PDWORD = Array[0..255] of DWORD; LPTSTR = String; const PROCESS_QUERY_INFORMATION = $400; PROCESS_VM_READ = $10; MAX_LENGTH = 255; function OpenProcess(dwDesiredAccess : DWORD; bInheritHandle : Boolean; dwProcessId : DWORD) : HANDLE; external 'OpenProcess@kernel32.dll stdcall delayload'; function CloseHandle(hObject : HANDLE) : BOOL; external 'CloseHandle@kernel32.dll stdcall delayload'; function EnumProcesses(var pProcessIds : PDWORD; cb : DWORD; var pBytesReturned : DWORD) : BOOL; external 'EnumProcesses@psapi.dll stdcall delayload'; //notice:delayload EnumProcessModules and EnumProcessModulesEx functions //64-bit using EnumProcessModulesEx; 32-bite using EnumProcessModules function EnumProcessModulesEx(hProcess : HANDLE; var lphModule : pHMODULE; cb : DWORD; var lpcbNeeded : LPDWORD; dwFilterFlag : DWORD) : BOOL; external 'EnumProcessModulesEx@psapi.dll stdcall delayload';function EnumProcessModules(hProcess : HANDLE; var lphModule : pHMODULE; cb : DWORD; var lpcbNeeded : LPDWORD) : BOOL; external 'EnumProcessModules@psapi.dll stdcall delayload'; function GetModuleFileNameExW(hProcess : HANDLE; hModule : HMODULE; lpFilename : LPTSTR; nSize : DWORD) : DWORD; external 'GetModuleFileNameExW@psapi.dll stdcall delayload'; //here is the functionfunction zylIsAppRunning(procName : String; fullPath : Boolean) : Boolean; var found : Boolean; filenameEnd : Integer; filename : String; NA : DWORD; entry : DWORD; maxEntries : DWORD; processes : PDWORD; lpFilename : LPTSTR; hProcess : HANDLE; hMod : pHMODULE; isModuleShot: Boolean; begin SetLength(lpFilename, MAX_LENGTH); 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(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, processes[entry]); if (hProcess <> 0) then begin isModuleShot := False; if IsWin64 then begin //EnumProcessModulesEx @param $3,surport 32-bit modules and 64-bit modules the sametiem isModuleShot := EnumProcessModulesEx(hProcess, hMod, SizeOf(hMod), NA, $3); end else 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 end How to use: I wish you have installed the Unicode Inno Setup (the 5.5.x version or more).(If not, you can download it from the home page http://www.jrsoftware.org) You can use it where you need just like:zylIsAppRunning('notdpad.exe', false); An example project for Unicode Inno Setup is provided as download. The attachment "CheckAppRunning.zip" is the script. Unzip the file CheckAppRunning.zip, you can get a file named "CheckAppRunning.iss". Please copy the *.iss files to the directory: ./Inno Setup 5/Examples Then build the program and run it. CheckAppRunning.zip
    1 point
×
×
  • Create New...