Det kommer helt an på hvilket styresystem du har. hvis du har 2000 eller xp kan du prøv at trykke på [ctrl] + [alt] + [del] og se hvad der står i joblisten. Her kan du også stoppe et program hvis det kager. Du kan bruge Regcleaner til at fjerne et givent program helt fra din computer.. Håber det er svar nok. Per
Siden jeg har stillet spørgsmålet under "Programmering:Delphi" og IKKE "Styresystemer:Windows" tror du så ikke jeg kunne tænke mig at vide hvordan det gøres med kode?
Type TEnumData = Record hW: HWND; pID: DWORD; End;
Function EnumProc( hw: HWND; Var data: TEnumData ): Bool; stdcall; Var pID: DWORD; Begin Result := True; If (GetWindowLong(hw, GWL_HWNDPARENT) = 0) and (IsWindowVisible( hw ) or IsIconic(hw)) Then Begin GetWindowThreadProcessID( hw, @pID ); If pID = data.pID Then Begin data.hW := hW; Result := False; End; { If } End; { If } End; { EnumProc }
Function WindowFromAppname32( appname: String ): HWND; { Take only the application filename, not full path! Need to pass the extension as well. } Var snapshot: THandle; processEntry : TProcessEntry32; Begin Result := 0; snapshot := CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 ); If snapshot <> 0 Then try processEntry.dwSize := Sizeof( processEntry ); If Process32First( snapshot, processEntry ) Then Repeat If AnsiCompareText( appname, ExtractFilename( StrPas(processEntry.szExeFile)) ) = 0 Then Begin Result:= WindowFromProcessID( processEntry.th32ProcessID); Break; End; { If } Until not Process32Next( snapshot, processEntry ); finally CloseHandle( snapshot ); End; { try } End; { WindowFromAppname32 }
procedure TForm1.Timer1Timer(Sender: TObject); begin If WindowFromAppname32('Project1.exe') <> 0 then ShowMessage('Project1 kører'); end;
snowball > koden fra linket du skrev virker og det er jo cool :) Det der er skod er bare at der er så forfærdelig meget kode! Kan jeg ikke smide dem ind i et eller andet form for "library" eller en .pas fil for sig selv? Hvordan gør jeg det?
Gem nedenstående som process.pas og tilføj den til dit eksisterende projekt. Under Uses i den unit du vil kalde den fra tilføjer du så Process og kalder den på følgende måde: if Process.EXE_Running('Notepad.exe', False) then ...
procedure CreateWin9xProcessList(List: TstringList); var hSnapShot: THandle; ProcInfo: TProcessEntry32; begin if List = nil then Exit; hSnapShot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnapShot <> THandle(-1)) then begin ProcInfo.dwSize := SizeOf(ProcInfo); if (Process32First(hSnapshot, ProcInfo)) then begin List.Add(ProcInfo.szExeFile); while (Process32Next(hSnapShot, ProcInfo)) do List.Add(ProcInfo.szExeFile); end; CloseHandle(hSnapShot); end; end;
procedure CreateWinNTProcessList(List: TstringList); var PIDArray: array [0..1023] of DWORD; cb: DWORD; I: Integer; ProcCount: Integer; hMod: HMODULE; hProcess: THandle; ModuleName: array [0..300] of Char; begin if List = nil then Exit; EnumProcesses(@PIDArray, SizeOf(PIDArray), cb); ProcCount := cb div SizeOf(DWORD); for I := 0 to ProcCount - 1 do begin hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, PIDArray[I]); if (hProcess <> 0) then begin EnumProcessModules(hProcess, @hMod, SizeOf(hMod), cb); GetModuleFilenameEx(hProcess, hMod, ModuleName, SizeOf(ModuleName)); List.Add(ModuleName); CloseHandle(hProcess); end; end; end;
procedure GetProcessList(var List: TstringList); var ovi: TOSVersionInfo; begin if List = nil then Exit; ovi.dwOSVersionInfoSize := SizeOf(TOSVersionInfo); GetVersionEx(ovi); case ovi.dwPlatformId of VER_PLATFORM_WIN32_WINDOWS: CreateWin9xProcessList(List); VER_PLATFORM_WIN32_NT: CreateWinNTProcessList(List); end end;
function EXE_Running(FileName: string; bFullpath: Boolean): Boolean; var i: Integer; MyProcList: TstringList; begin MyProcList := TStringList.Create; try GetProcessList(MyProcList); Result := False; if MyProcList = nil then Exit; for i := 0 to MyProcList.Count - 1 do begin if not bFullpath then begin if CompareText(ExtractFileName(MyProcList.Strings[i]), FileName) = 0 then Result := True end else if CompareText(MyProcList.strings[i], FileName) = 0 then Result := True; if Result then Break; end; finally MyProcList.Free; end; end;
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.