Willkommen im cgboard - classic games Forum! Deine gemütliche Retro Gaming Community. Besuche uns auch im Discord Chat.

[Hilfe] PC zu schnell - Programm zum Bremsen gesucht
#61
0
Zitat:Original von Thorium
TaDa: SlowIt v0.05 (16kb RAR)

Sollte selbsterklärend sein. Ist noch nicht ganz fertig, sollte aber soweit funktionieren. Im Augenblick kann nur die Pausendauer eingestellt werden. Dafür mit GUI und die Pausendauer ist in Echtzeit regelbar.

Jetzt interessiert mich aber doch schon, wie du das gemacht hast...
Oder bleibt das Programmierer Geheimnis? ;-)
Give a man a gun and he'll rob a bank. Give a man a bank and he'll rob everybody.
Zitieren
#62
0
Zitat:Original von Apie
Jetzt interessiert mich aber doch schon, wie du das gemacht hast...
Oder bleibt das Programmierer Geheimnis? ;-)

Naja, sooo kompliziert ist es nicht, das ichs unbedingt geheimhalten müsste.
Habs in PureBasic geschrieben.

SlowIt.dll
Wird in den Zielprozess injiziert und nimmt da die Verlangsamung vor.
Code:
;/------------------\\
;| Process SlowIt   |
;| DLL              |
;|                  |
;| Version 0.05     |
;| PureBasic 4.20   |
;\\------------------/

EnableExplicit

#THREAD_ALL_ACCESS = $1F03FF

Structure SharedData
  PauseTime.l
  Exit.l
EndStructure

Global *SharedConfig.SharedData

Procedure AllocSharedMemory(SizeOfSharedData.l,MemoryName.s)
  Define.l hMapping
  
  hMapping = CreateFileMapping_(#INVALID_HANDLE_VALUE,0,#PAGE_READWRITE,0,SizeOfSharedData,MemoryName)
  hMapping = MapViewOfFile_(hMapping,#FILE_MAP_WRITE,0,0,0)
  ProcedureReturn hMapping

EndProcedure

Procedure.l GetThreadID(ProcessID.l)
  Define.l hSnapshot,RetVal
  Define.THREADENTRY32 ThreadInfo

  ThreadInfo\\dwSize = SizeOf(ThreadInfo)
  hSnapshot = CreateToolhelp32Snapshot_(#TH32CS_SNAPTHREAD,0)
  If hSnapshot <> 0
    RetVal = Thread32First_(hSnapshot,@ThreadInfo)
    If RetVal <> 0
      If ThreadInfo\\th32OwnerProcessID = ProcessID
        CloseHandle_(hSnapshot)
        ProcedureReturn ThreadInfo\\th32ThreadID
      EndIf
      Repeat
        RetVal = Thread32Next_(hSnapshot,@ThreadInfo)
        If RetVal = 0
          Break
        Else
          If ThreadInfo\\th32OwnerProcessID = ProcessID
            CloseHandle_(hSnapshot)
            ProcedureReturn ThreadInfo\\th32ThreadID
          EndIf
        EndIf
      Until RetVal = 0
      CloseHandle_(hSnapshot)
    EndIf
  EndIf
  
  ProcedureReturn 0
EndProcedure

Procedure SelfUnloadModule(SelfModuleName.s)
  Define.l NewProcAddr,ProcSize,hKernel32,hSelfModule,FreeLibraryAddr,ExitThreadAddr
  
  ProcSize = ?SelfUnloadProcEnd - ?SelfUnloadProcStart
  NewProcAddr = VirtualAlloc_(0,ProcSize,#MEM_COMMIT | #MEM_RESERVE,#PAGE_EXECUTE_READWRITE)
  CopyMemory(?SelfUnloadProcStart,NewProcAddr,ProcSize)

  hSelfModule = GetModuleHandle_(SelfModuleName)
  hKernel32 = GetModuleHandle_("kernel32.dll")
  FreeLibraryAddr = GetProcAddress_(hKernel32,"FreeLibrary")
  ExitThreadAddr = GetProcAddress_(hKernel32,"ExitThread")
  
  !jmp dword[p.v_NewProcAddr]
  
  SelfUnloadProcStart:
  !mov eax,dword[p.v_FreeLibraryAddr]
  !mov ebx,dword[p.v_hSelfModule]
  !push ebx
  !call eax
  !mov eax,dword[p.v_ExitThreadAddr]
  !xor ebx,ebx
  !push ebx
  !call eax
  SelfUnloadProcEnd:

EndProcedure

Procedure SlowDown(Param.l)
  Define.l hThread,StartTime,EndTime,hKernel32DLL
  
  *SharedConfig = AllocSharedMemory(SizeOf(SharedData),"SlowItConfigGSM")
  hKernel32DLL = OpenLibrary(#PB_Any,"kernel32.dll")
  hThread = CallFunction(hKernel32DLL,"OpenThread",#THREAD_ALL_ACCESS,0,GetThreadID(GetCurrentProcessId_()))
  SetThreadPriority_(GetCurrentThread_(),#THREAD_PRIORITY_ABOVE_NORMAL)

  Repeat  
    Sleep_(1)
    SuspendThread_(hThread)
    Sleep_(*SharedConfig\\PauseTime)
    ResumeThread_(hThread)
  Until *SharedConfig\\Exit = 1
  
  *SharedConfig\\Exit = 0
  CloseHandle_(hThread)
  SelfUnloadModule("SlowIt.dll")
  
EndProcedure

ProcedureDLL AttachProcess(Instance)

  CreateThread(@SlowDown(),0)

EndProcedure

ProcedureDLL DetachProcess(Instance)

EndProcedure

SlowIt.exe
GUI und Injector für die SlowIt.dll
Code:
;/------------------\\
;| Process SlowIt   |
;| Injector         |
;|                  |
;| Version 0.04     |
;| PureBasic 4.20   |
;\\------------------/

EnableExplicit

Enumeration
  #MainWindow
EndEnumeration

Enumeration
  #Gad_List
  #Gad_PauseTrackbar
  #Gad_PauseText
  #Gad_StartButton
EndEnumeration

#AppTitle = "SlowIt"
#UpdateInterval = 200

Structure ProcessInfo
  Name.s
  Path.s
  ID.l
  ParentID.l
  ThreadsCnt.l
  PriorityClass.l
  Icon.l
EndStructure

Structure SharedData
  PauseTime.l
  Exit.l
EndStructure

Global OS.l
Global Dim ProcessList.ProcessInfo(0)
Global ProcessListCnt.l
Global SystemAppIcon.l
Global SlowItDLLPath.s
Global *SharedConfig.SharedData
Global SlowState.l
Global SlowProcessHandle.l

Procedure AllocSharedMemory(SizeOfSharedData.l,MemoryName.s)
  Define.l hMapping
  
  hMapping = CreateFileMapping_(#INVALID_HANDLE_VALUE,0,#PAGE_READWRITE,0,SizeOfSharedData,MemoryName)
  hMapping = MapViewOfFile_(hMapping,#FILE_MAP_WRITE,0,0,0)
  ProcedureReturn hMapping

EndProcedure

Procedure OpenMainWindow()

  If OpenWindow(#MainWindow, 216, 0, 590, 328, "SlowIt 0.05 by Thorium",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#MainWindow))
      ListIconGadget(#Gad_List,0,0,590,290,"Name",150,#PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect | #PB_ListIcon_AlwaysShowSelection)
      AddGadgetColumn(#Gad_List,1,"Path",250)
      AddGadgetColumn(#Gad_List,2,"PID",50)
      AddGadgetColumn(#Gad_List,3,"Parent PID",75)
      TrackBarGadget(#Gad_PauseTrackbar, 90, 300, 200, 20, 0, 20, #PB_TrackBar_Ticks)
      TextGadget(#Gad_PauseText, 0, 300, 90, 20, "Pause Time:", #PB_Text_Right)
      ButtonGadget(#Gad_StartButton, 300, 297, 100, 27, "&Slow It")
    EndIf
  EndIf
  
EndProcedure

Procedure.l InjectDLLThread(hProcess.l,DLLFileName.s)
  Define.l FileNameLen,FileNameAddr,BytesWritten,hKernel32,LoadLibraryAAddr,hThread
  
  ;Dateiname der DLL in den Zielprozess schreiben
  FileNameLen = Len(DLLFileName) + 1
  FileNameAddr = VirtualAllocEx_(hProcess,0,FileNameLen,#MEM_COMMIT | #MEM_RESERVE,#PAGE_READWRITE)
  If FileNameAddr = 0
    ProcedureReturn 0
  EndIf
  If WriteProcessMemory_(hProcess,FileNameAddr,DLLFileName,FileNameLen,@BytesWritten) = 0
    ProcedureReturn 0
  EndIf
  If BytesWritten <> FileNameLen
    ProcedureReturn 0
  EndIf
  
  ;Addresse von LoadLibraryA ermitteln
  hKernel32 = GetModuleHandle_("Kernel32.dll")
  If hKernel32 = 0
    ProcedureReturn 0
  EndIf
  LoadLibraryAAddr = GetProcAddress_(hKernel32,"LoadLibraryA")
  If LoadLibraryAAddr = 0
    ProcedureReturn 0
  EndIf
  
  ;Thread im Zielprozess erstellen um LoadLibraryA auszuführen
  hThread = CreateRemoteThread_(hProcess,0,0,LoadLibraryAAddr,FileNameAddr, 0, 0)
  If hThread = 0
    ProcedureReturn 0
  EndIf

  ;warten bis der Thread beendet ist und aufräumen
  WaitForSingleObject_(hThread,#INFINITE)
  VirtualFreeEx_(hProcess,FileNameAddr,0,#MEM_RELEASE)

  ProcedureReturn 1
EndProcedure

Procedure GetProcessList()
  Define.l ProcessSnapHandle,ModuleSnapHandle,RetVal,i,ProcessID,ExePath,IconHandle
  Define.PROCESSENTRY32 ProcessEntry
  Define.MODULEENTRY32 ModuleEntry

  ReDim ProcessList.ProcessInfo(0)
  ProcessListCnt = 0
  ProcessEntry\\dwSize = SizeOf(ProcessEntry)
  ModuleEntry\\dwSize = SizeOf(ModuleEntry)

  ;laufende Prozesse ermitteln
  ExePath = AllocateMemory(1024)
  ProcessSnapHandle = CreateToolhelp32Snapshot_(#TH32CS_SNAPPROCESS,0)
  RetVal = Process32First_(ProcessSnapHandle,ProcessEntry)
    
  While RetVal = #True
    ProcessListCnt = ProcessListCnt + 1
    ReDim ProcessList.ProcessInfo(ProcessListCnt)
    ProcessList(ProcessListCnt)\\Name = PeekS(@ProcessEntry\\szExeFile)
    If OS = #PB_OS_Windows_95 Or OS = #PB_OS_Windows_98 Or OS = #PB_OS_Windows_ME
      ProcessList(ProcessListCnt)\\Name = GetFilePart(ProcessList(ProcessListCnt)\\Name)    
    EndIf
    ProcessList(ProcessListCnt)\\ID = ProcessEntry\\th32ProcessID
    ProcessList(ProcessListCnt)\\ParentID = ProcessEntry\\th32ParentProcessID
    ProcessList(ProcessListCnt)\\ThreadsCnt = ProcessEntry\\cntThreads
    ProcessList(ProcessListCnt)\\PriorityClass = ProcessEntry\\pcPriClassBase

    If ProcessEntry\\th32ProcessID <> 0
      ModuleSnapHandle = CreateToolhelp32Snapshot_(#TH32CS_SNAPMODULE,ProcessEntry\\th32ProcessID)
      If ModuleSnapHandle
        If Module32First_(ModuleSnapHandle,ModuleEntry)
          ProcessList(ProcessListCnt)\\Path = GetPathPart(Trim(PeekS(@ModuleEntry\\szExePath)))
        EndIf
        CloseHandle_(ModuleSnapHandle)
      EndIf
    EndIf
    
    PokeS(ExePath,ProcessList(ProcessListCnt)\\Path + ProcessList(ProcessListCnt)\\Name)
    IconHandle = ExtractIcon_(0,ExePath,0)
    If IconHandle = 0
      IconHandle = SystemAppIcon
    EndIf
    ProcessList(ProcessListCnt)\\Icon = IconHandle
    
    RetVal = Process32Next_(ProcessSnapHandle,ProcessEntry)
  Wend
  CloseHandle_(ProcessSnapHandle)
  FreeMemory(ExePath)
EndProcedure

Procedure FillProcessList()
  Define.l i

  ClearGadgetItemList(#Gad_List)
  
  For i = 1 To ProcessListCnt
    AddGadgetItem(#Gad_List,i-1,ProcessList(i)\\Name,ProcessList(i)\\Icon)
    SetGadgetItemText(#Gad_List,i-1,ProcessList(i)\\Path,1)
    SetGadgetItemText(#Gad_List,i-1,Hex(ProcessList(i)\\ID),2)
    SetGadgetItemText(#Gad_List,i-1,Hex(ProcessList(i)\\ParentID),3)
  Next
EndProcedure

Procedure UpdateProcessList()
  Define.l i,i2,OldProcessListCnt
  Dim OldProcessList.ProcessInfo(ProcessListCnt)
  
  For i = 1 To ProcessListCnt
    OldProcessList(i)\\Name = ProcessList(i)\\Name
    OldProcessList(i)\\Path = ProcessList(i)\\Path
    OldProcessList(i)\\ID = ProcessList(i)\\ID
    OldProcessList(i)\\Icon = ProcessList(i)\\Icon
  Next
  OldProcessListCnt = ProcessListCnt
  
  For i = 1 To OldProcessListCnt
    If OldProcessList(i)\\Icon <> SystemAppIcon
      DestroyIcon_(OldProcessList(i)\\Icon)
    EndIf
  Next
  
  GetProcessList()
  
  If OldProcessListCnt = ProcessListCnt
    For i = 1 To ProcessListCnt
      If OldProcessList(i)\\Name <> ProcessList(i)\\Name Or OldProcessList(i)\\Path <> ProcessList(i)\\Path Or OldProcessList(i)\\ID <> ProcessList(i)\\ID
        FillProcessList()
        Break
      EndIf
    Next
  Else
    FillProcessList()
  EndIf
EndProcedure

Procedure InitProcessSlow(Index.l)
  Define.s ModulePath
  Define.l PauseTime
  
  PauseTime = GetGadgetState(#Gad_PauseTrackbar)
  SlowProcessHandle = OpenProcess_(#PROCESS_ALL_ACCESS,0,ProcessList(Index)\\ID)
  If InjectDLLThread(SlowProcessHandle,SlowItDLLPath) = 0
    SlowProcessHandle = 0
    MessageRequester(#AppTitle,"Error: Can't inject SlowIt.dll!",16)
    ProcedureReturn
  EndIf
  
  DisableGadget(#Gad_List,1)
  SetGadgetText(#Gad_StartButton,"&Stop")
  SlowState = 1

EndProcedure

Procedure EndProcessSlow()

  SetGadgetText(#Gad_StartButton,"Stopping...")
  DisableGadget(#Gad_StartButton,1)
  *SharedConfig\\Exit = 1
  SlowState = 2

EndProcedure

Procedure ProcessSlowEnded()

  SlowProcessHandle = 0
  *SharedConfig\\Exit = 0
  SetGadgetText(#Gad_StartButton,"&Slow It")
  DisableGadget(#Gad_StartButton,0)
  DisableGadget(#Gad_List,0)
  SlowState = 0

EndProcedure

Procedure CheckProcessSlowEnded()
  
  If *SharedConfig\\Exit = 0
    ProcessSlowEnded()
  EndIf

EndProcedure

Procedure.l CheckProcessRunning(hProcess.l)
  Define.l ExitCode

  GetExitCodeProcess_(hProcess,@ExitCode)
  If ExitCode = #STILL_ACTIVE
    ProcedureReturn 1
  Else
    CloseHandle_(hProcess)
    ProcedureReturn 0
  EndIf

EndProcedure

Define.l Event,Index,UpdateStartTime,hMutex

OS = OSVersion()
If OS < #PB_OS_Windows_2000
  MessageRequester(#AppTitle, "Unsupported Windows version!",#MB_ICONEXCLAMATION)
  End
EndIf

CreateMutex_(0,0,"SlowItInstanceMutex")
If GetLastError_() = #ERROR_ALREADY_EXISTS
  End
EndIf

SlowItDLLPath = Space(1024)
GetModuleFileName_(0,@SlowItDLLPath,1024)
SlowItDLLPath = GetPathPart(Trim(SlowItDLLPath)) + "SlowIt.dll"

*SharedConfig = AllocSharedMemory(SizeOf(SharedData),"SlowItConfigGSM")
*SharedConfig\\Exit = 0
*SharedConfig\\PauseTime = 1

SystemAppIcon = LoadIcon_(0,#IDI_APPLICATION)
OpenMainWindow()
GetProcessList()
FillProcessList()

Repeat
  
  UpdateStartTime = ElapsedMilliseconds()
  Event = WaitWindowEvent(#UpdateInterval)
  Select Event
    
    Case #PB_Event_SizeWindow
      ResizeGadget(#Gad_List,#PB_Ignore,#PB_Ignore,WindowWidth(#MainWindow),WindowHeight(#MainWindow)-40)
      TrackBarGadget(#Gad_PauseTrackbar, 90, WindowHeight(#MainWindow) - 30, 200, 20, 1, 20, #PB_TrackBar_Ticks)
      TextGadget(#Gad_PauseText, 0, WindowHeight(#MainWindow) - 28, 90, 20, "Pause Time:", #PB_Text_Right)
      ButtonGadget(#Gad_StartButton, 300, WindowHeight(#MainWindow) - 32, 100, 27, "&Slow It")
    
    Case #PB_Event_Gadget
    
      Select EventGadget()
      
        Case #Gad_List
      
          Select EventType()
          
            Case #PB_EventType_LeftDoubleClick
            
              Index = GetGadgetState(#Gad_List)
              If Index > -1
                InitProcessSlow(Index+1)
              EndIf
            
          EndSelect
        
        Case #Gad_StartButton
        
          If SlowState = 0
            Index = GetGadgetState(#Gad_List)
            If Index > -1
              InitProcessSlow(Index+1)
            EndIf
          ElseIf SlowState = 1
            EndProcessSlow()
          EndIf
        
        Case #Gad_PauseTrackbar
        
          *SharedConfig\\PauseTime = GetGadgetState(#Gad_PauseTrackbar)
          
      EndSelect
      
  EndSelect
  
  If ElapsedMilliseconds() => UpdateStartTime + #UpdateInterval
  
    If SlowProcessHandle <> 0
      If CheckProcessRunning(SlowProcessHandle) = 0
        ProcessSlowEnded()
      EndIf
    EndIf
  
    If SlowState = 2
      CheckProcessSlowEnded()
    EndIf
    
    UpdateProcessList()
    
  EndIf
  
Until Event = #PB_Event_CloseWindow

End
Wir entwickeln Spiele, schaut mal vorbei: CatBit Software
Zitieren
#63
0
Nicht schelcht, dafür musste dich aber doch schon sehr gut mit den Win32 APIs auskennen Wink
*RESPEKT*
Give a man a gun and he'll rob a bank. Give a man a bank and he'll rob everybody.
Zitieren
#64
0
Ich seh's leider erst jetzt und habe momentan keine Zeit zum Testen - aber ich kann mich Apie nur anschließen: Großartige Arbeit. Wink Ich will sobald wie möglich mal auf Version 0.05 umsteigen.

EDIT: Hab's dann doch getestet und muss sagen: Schöne Sache, das grafische Menü gefällt mir. Nur könntest du bei dem Schieberegler noch was dranschreiben, damit man in etwa eine Ahnung hat, wieviel der jetzt abbremst. Ich würde vielleicht sogar 2 Boxen bevorzugen, in die man die Run- und Pause-Zeit wieder in ms angeben kann, dann hat man die bessere Kontrolle. Oder ist der Schieberegler vielleicht logarithmisch eingeteilt? Hätte vielleicht den gleichen Effekt....
Auf jeden Fall vielen Dank für deine Arbeit. So ein Programm hat der Welt noch gefehlt. Wink
Zitieren
#65
0
Zitat:Original von Thorium
TaDa: SlowIt v0.05 (16kb RAR)

Sollte selbsterklärend sein. Ist noch nicht ganz fertig, sollte aber soweit funktionieren. Im Augenblick kann nur die Pausendauer eingestellt werden. Dafür mit GUI und die Pausendauer ist in Echtzeit regelbar.
Hey, das Programm funktioniert ja echt klasse. So etwas habe ich schon lange gesucht, weil es mich gestört hat, dass ich beim Verlangsamen von Prozessen gleich auch sonst nichts mehr am PC machen konnte, da das Verlangsamungsprogramm die komplette CPU-Zeit in Anspruch genommen hat. Vielen Dank für dieses geniale Programm, das werde ich nie wieder löschen Smile
Zitieren
#66
0
Bitte nochnicht so viel rumverteilen, das Programm. Es ist wie gesagt noch nicht fertig. Ich bin noch am machen aber dank täglicher Überstunden, diese Woche nur 3 Zeilen Code am Tag geschafft. Cry
Also dauert noch ein bissel.
Wir entwickeln Spiele, schaut mal vorbei: CatBit Software
Zitieren
#67
0
Lass dir Zeit, läuft ja eigentlich gut genug. Es kommt mir allerdings so vor, als würde mein gebremstes Spiel ein wenig ruckeln - vielleicht ist ja die Pause-Zeit zu lang. Wie ich schon sagte: Zwei Boxen zum Eingeben fand ich schöner.... Wink

Und weiterverteilen werde ich es auch nicht (kannst ja eine kleine Notiz zu deinem Programm zufügen), womöglich wirst du nochmal reich damit? Big Grin
Zitieren
#68
0
Zitat:Dosbox, ja? Muss ich gleich mal schauen. Ich bin ja noch relativ neu hier. Wenn ich mal richtig hinschaue, dann stelle ich fest, dass es hier Spiele gibt, die in Dos laufen. Sowas muss man sich mal vorstellen! Dos! Also muss ich mal bei google Doxbos eingeben.... ach nee "BosDox"..... mmhh....gibt's beides nicht. Tja, dann muss ich wohl weiterhin ohne auskommen. Wink
War nur ein kleiner Scherz, nimm's mir nicht übel gruffi Wink, die DosBox kenne ich natürlich. Du hast schon Recht, sie ist das wohl beste Tool um ein Dos-Spiel zum Laufen zu bekommen. Als ich aber die CPU-Bremse für Dos ansprach, dachte ich eher daran, dass auch unter jeder Windows-Version vor Win95 noch ein vollständiges Dos steckte. Und Windows 3.1 habe ich leider in der Dosbox nur mit Problemen zum Laufen bekommen. Das heißt, ich brauche eine gute "Bremse", die unter Dos läuft. Ein "Slowdown" und "Moslo" habe ich da schon probiert, aber da gibt's gleich ein 50-seitiges Handbuch dazu und ca. eine Million Parameteroptionen.
Ok, ich dachte, du suchst einfach nur eine Möglichkeit, die Geschwindigkeit für DOS Spiele zu regulieren. Ist aber eine interessante Diskussion hier.
Zitieren
#69
0
Stimmt, sehr interessante Sache hier. Ich will gleich mal *push* machen und fragen, ob es schon was neues gibt? Vielleicht ist in meiner Abwesenheit schonmal an Version 0.06 gearbeitet worden? Wink
Zitieren
#70
0
Zitat:Original von thEClaw
Vielleicht ist in meiner Abwesenheit schonmal an Version 0.06 gearbeitet worden? Wink
Ja, ich arbeite drann. Gibt aber keine neue öffentliche Version, Gedult. Wink
Wir entwickeln Spiele, schaut mal vorbei: CatBit Software
Zitieren
#71
0
Schade, aber das klingt trotzdem schonmal gut. Willst wohl tatsächlich reich damit werden? Wink

Ich habe dein Programm vorhin nochmal ausprobiert, habe allerdings etwas festgestellt: Wenn man ein Programm im Kompatibilitätsmodus ausführt, dann wird es nicht gebremst - da scheint dann wohl so etwas wie ein Emulator zu laufen. Falls du weißt, welchen Prozess man dazu bremsen muss, könntest du mal eine kleine Readme dazu legen (viele zu bremsende Programme werden wohl einen Komp.-Modus benötigen). Kann aber auch sein, dass das ein so systemnaher Prozess ist, dass man deine Bremse nicht drauf anwenden kann, ich habe schon eine Weile rumprobiert. Da wird dann wohl nur der Umweg über einen virtuellen PC helfen.

Und wenn du bereit dazu wärst, deine Version an mich zu verschicken, dann würde ich gern weiter testen - weitergeben würde ich das Programm natürlich nicht. Wink
Zitieren
#72
0
Zitat:Original von thEClaw
Schade, aber das klingt trotzdem schonmal gut. Willst wohl tatsächlich reich damit werden? Wink
Nein, es wird auf jeden Fall 100% kostenlos und werbefrei sein!
Aber ich glaub ich werd mir bei PayPal ein Spendenkonto anlegen. Wer will kann dann was spenden. Big Grin

Zitat:Original von thEClaw
Ich habe dein Programm vorhin nochmal ausprobiert, habe allerdings etwas festgestellt: Wenn man ein Programm im Kompatibilitätsmodus ausführt, dann wird es nicht gebremst
Danke für den Hinweis, werde mir das anschauen.

Zitat:Original von thEClaw
Und wenn du bereit dazu wärst, deine Version an mich zu verschicken, dann würde ich gern weiter testen - weitergeben würde ich das Programm natürlich nicht. Wink
Das währe super, wenn du für mich testen könntest. Mal sehen werd dir heute oder morgen mal ne neue Version schicken. Es geht beim "nicht weitergeben" darum das sich einfach keine unfertigen und fehlerhaften Versionen verbreiten. Sowas schaded dem Ruf der Software. Wink
Wir entwickeln Spiele, schaut mal vorbei: CatBit Software
Zitieren
#73
0
Zitat:Original von Thorium
Das währe super, wenn du für mich testen könntest. Mal sehen werd dir heute oder morgen mal ne neue Version schicken. Es geht beim "nicht weitergeben" darum das sich einfach keine unfertigen und fehlerhaften Versionen verbreiten. Sowas schaded dem Ruf der Software.

Kann ich verstehen, ich bereite mich mal drauf vor. Wink

Ich habe übrigens mit der aktuellen Version immer noch das Problem, dass das Spiel (ich teste ja nur Betrayal in Antara, vielleicht finde ich auch mal ein anderes) schnell ins Stocken kommt, wenn ich den Schieberegler mehr als 2 Striche nach rechts ziehe. Ich teste zwar auch nur auf einem Celeron mit 2,6 GHz, aber falls die Striche jeweils eine Millisekunde bedeuten, dürfte es da nicht so schnell bergab gehen. In der Ursprungsversion (0.03) hatte ich dieses Problem nie (will nachher nochmal vergleichen).
Und wie sieht es jetzt eigentlich mir der Prozesspriorität aus? Hast du die Wahl automatisiert? Oder soll ich im Taskmanager lieber noch die Einstellungen vornehmen? Und dazu gleich noch eine Frage: Wäre es vielleicht günstig, die Priorität auf "Echtzeit" zu setzen? Das Problem, das andere Programme da machen, nämlich dass die CPU plötzlich völlig ausgelastet wird, dürfte ja nicht auftreten, so lange eine Pause eingestellt ist.
Zitieren
#74
0
Der Doppelpost muss jetzt sein, damit mein Text nicht untergeht:

Ich habe Version 0.06 jetzt eine ganze Weile getestet, mir fällt zuerst auf, dass es gar nicht so leicht ist, eine Einstellung zu finden, die für die richtigen Ergebnisse sorgt. Ich hatte bei Betrayal in Antara die Run-Zeit auf 1ms, die Pause-Zeit auf 18ms und es lief viel zu schnell. Bei Pause 20ms hat es ziemlich gestockt und bei 19ms lief es dann gut. Big Grin

Jetzt kommen mal meineWünsche für das Programm, ein Teil sollte nicht allzu schwierig umzusetzen sein:
1. Wunsch: Beschriftung für die Achsen der Schieberegler (OK, da gibt's ja jetzt Einblendungen, aber Beschriftungen alle 25ms wären trotzdem praktisch, damit man nicht bei jedem Start suchen muss)

2. Wunsch: Möglichkeit, die Regelung nach oben offen zu halten (damit das Programm auch in 10 Jahren noch funktioniert Wink )

3. Wunsch: Möglichkeit, zwischen "Schieberegler"-Modus und Direkteingabemodus umzuschalten (wenn bei Direkteingabe ein Wert steht, der größer ist, als der maximale Schieberegler-Wert, dann soll der Eingabewert gelten bis man den Regler berührt - das würde gleichzeitig den 2. Wunsch erfüllen)

4. Wunsch: SlowIt minimieren, wenn es aktiv ist.

Und wie schwer wäre die Erstellung einer Verknüpfung, die das Starten und Einstellen von SlowIt erspart? Automatische Erstellung wäre schön, eine Kommandozeilen-Option wäre auch ausreichend (Im Stile: C:\\Spiel\\Game.exe -C:\\Programme\\SlowIt\\SlowIt.exe R:1 P:3; oder natürlich andersherum: C:\\Programme\\SlowIt\\SlowIt.exe R:1 P:3 -C:\\Spiel\\Game.exe <-- wäre wahrscheinlich leichter). Wenn es die Möglichkeit gäbe, könnte man sich ja schnell eine Verknüpfung zusammenbasteln, die alles nötige automatisiert.

Ein kleines Problem habe ich, wenn ich Betrayal in Antara (in Virtual PC) mit R:1 und P:19 laufen lasse (gut spielbar). Wenn ich jetzt zu R:2 und P:19 wechsle, stockt das Spiel ziemlich stark - eigentlich müsste es doch eher schneller laufen, oder? Ist da der Timing-Aufwand zu groß?

Ach ja, eines gäbe es noch: Da ich nur Betrayal in Antara in Virtual PC testen kann, wäre es vielleicht gut, mal was anderes zu testen. Allerdings fällt mir nicht auf Anhieb ein Windows-Spiel ein, das zu schnell liefe - da ich eine ziemliche Sammlung besitze, wäre ein Vorschlag nützlich, was ich denn noch testen könnte.

EDIT: Es gab mal einen Rainbow Six-Teil, der ungebremst lief, den habe ich auch irgendwo....
Zitieren
#75
0
Hallo,

hier ist noch ein sehr vielversprechendes und ungewöhnliches Slowdown-Tool für Vista/XP/NT/2K:

http://www.oldskool.org/pc/throttle

Auf der Seite ist auch ein Link zur DOS-Version. Dort wird genauer erklärt, wie es arbeitet. Kurz gesagt: Es kann den L1 Cache deaktivieren und außerdem noch die CPU heruntertakten. Letzteres soll im Prinzip mit allen ACPI-fähigen Chipsätzen per Software möglich sein. Durch die Kombination aus beidem soll man sehr große Verlangsamungen erreichen können, ohne daß es ruckelig wird. Zusätzlich kann man es auch noch mit herkömmlichen Software-Slowdownprogrammen kombinieren, da "Throttle" ja die Hardware anspricht und daher ganz anders arbeitet.

Diese Seite ist in dem Zusammenhang interessant, weil sie die verschiedenen Möglichkeiten erklärt einen Rechner langsamer zu machen:

http://www.oldskool.org/guides/oldonnew/cripple

Oboe
Zitieren


Möglicherweise verwandte Themen…
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Nancy Drew Spiele Spezialist gesucht Teddybaerchen 0 150 21.01.2024, 17:23
Letzter Beitrag: Teddybaerchen
  HILFE gesucht: Dungeon Keeper Direct3D Version lopez72 27 8.915 20.06.2020, 16:10
Letzter Beitrag: lopez72
  [Hilfe] Warlords IV Patch 1.05 für Deutsche Version gesucht Commodus 5 2.332 19.03.2020, 10:41
Letzter Beitrag: Traxx Amiga EP
  Gesucht: PC-Player 11/1997 lopez72 0 1.040 05.10.2019, 09:19
Letzter Beitrag: lopez72
  [Hilfe] Tester gesucht! Req.: CH-Tastatur & 1h Zeit SirJohn 1 1.748 13.04.2019, 09:10
Letzter Beitrag: Heinrich Reich

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste