![]() |
Re: Ferby-Fall II
Hallo,
also bei mir kann mann das nicht ???? Ich weiß nicht einmal wie mann auf die Registry mit Delphi zugreift, da ich das noch nie gebraucht habe. Und ich weiß was in meiner Programmierung steht, und da ist 100% nichts was in irgendeiner weiße die Registry verändert! Wegen der Bildschirmfrequenz: Ich verwende diese Procedure um die auflösung zu ändern, wiederherzustellen und um die Symbole am Desktop wieder zu richten. function changescreen(Width, Height: Word; pfad: string): Boolean; var lpDevMode: TDeviceMode; saveiconherstellen: boolean; begin saveiconherstellen:=false; if width<>0 then begin ScreenAlt.x:=(screen.width); ScreenAlt.y:=(screen.height); ShellExecute(0,'open', PChar(pfad + 'saveicon.exe'),'"\s"', nil, SW_Show); sleep(1000); end else begin saveiconherstellen:=true; width:=ScreenAlt.X; height:=ScreenAlt.Y; end; Result := EnumDisplaySettings(nil, 0, lpDevMode); if Result then begin lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT; lpDevMode.dmPelsWidth := Width; lpDevMode.dmPelsHeight := Height; Result := ChangeDisplaySettings(lpDevMode, CDS_UPDATEREGISTRY) = DISP_CHANGE_SUCCESSFUL; if saveiconherstellen then ShellExecute(0,'open', PChar(pfad + 'saveicon.exe'),'"\r"', nil, SW_Show); end; if not Result then begin MessageBeep(MB_ICONERROR); MessageDlg('Fehler1' +#10#10+ 'Das Programm konnte die Auflösung nicht auf '+inttostr(width)+'x'+inttostr(height)+ ' umstellen.' +#10+ 'Es könnte sein das der Computer diese Auflösung nicht unterstützt' +#10+ 'Sollte der Computer diese Auflösung doch unterstüzen,' +#10+ 'dann stelle bitte die Auflösung manuel ein und starte das Spiel erneut.', mtError, [mbOK], 0); Application.Terminate; end; end; Ich habe diese Procedure nicht ganz alleine geschrieben, wo wird hier die Bildschirmfrequent verändert? Wie kann ich das verhindern, bzw wie kann ich die alte Bildschirmfrequenz wieder herstellen??? Danke für jede Hilfe, Ferby PS Zitat:
mfg, Ferby |
Re: Ferby-Fall II
Wie schon gesagt, du solltest das Problem mit den 60 Hz noch lösen. Du könntest z.B. vor dem Start die Frequenz auslesen und beim beenden wieder setzen. Ich halte dieses 60-Hz-Geflimmere nicht aus... :?
Und mach UM GOTTES WILLEN den Timer etwas schneller... Damit richtige Reaktionsgeschwindigkeit gefragt ist. Ein Setup schreibt IMMER was in die Registry, selbst wenn du ihm ausdrücklich befiehlst, es nicht zu tun. Ich denke, du verwendest Inno Setup. Wenn du dein eigenes Setup schreibst, könntest du dich drumherummanövrieren. |
Re: Ferby-Fall II
Hallo,
ich habe mein Setup Programm (falls es ein Setup ist, ich weiß nicht wie Setup definiert ist) selbst mit Delphi geschrieben, der hauptteil dieses Programmes besteht daraus:
Delphi-Quellcode:
Mein Installationsprogramm schreibt NICHTS in die Registry!
procedure Tform1.daten;
var i: byte; Datei:TResourceStream; begin for i:=1 to 2 do begin Datei:=TResourceStream.Create(hInstance,'wav' + inttostr(i),'EXEDATA'); Datei.SaveToFile(pfadtmp + inttostr(i) + '.wav'); end; progress.position:=50; progress.Refresh; for i:=1 to 8 do begin Datei:=TResourceStream.Create(hInstance,'mid' + inttostr(i),'EXEDATA'); Datei.SaveToFile(pfadtmp + inttostr(i) + '.mid'); end; progress.position:=70; progress.Refresh; Datei:=TResourceStream.Create(hInstance,'optionen','EXEDATA'); Datei.SaveToFile(pfadtmp + 'optionen.ini'); progress.position:=80; progress.Refresh; Datei:=TResourceStream.Create(hInstance,'score','EXEDATA'); Datei.SaveToFile(pfadtmp + 'score.ini'); end; Und sonst steht darin nichts mehr was mit den Dateientpacken (Installation) zu tun hat. Zitat:
Ferby |
Re: Ferby-Fall II
Also du hast noch viel zu tun ...
Zur Frequenz: Verurasacht das, so dass man sich total besoffen fühlt und man, egal ob zurück geändert immer noch was nicht ganz stimmr ? |
Re: Ferby-Fall II
Hier eine Funktion zum Verändern der Bildschirmauflösung (auch nicht ganz selber geschrieben ;) (bzw. garnicht)):
Delphi-Quellcode:
vllt geht es ja damit
function ChangeResolution(XResolution, YResolution, Depth: DWORD): BOOL;
var DevMode: TDeviceMode; i: Integer; begin Result := False; i := 0; while EnumDisplaySettings(nil, i, DevMode) do with DevMode do begin if (dmPelsWidth = XResolution) and (dmPelsHeight = YResolution) and (dmBitsPerPel = Depth) then if ChangeDisplaySettings(DevMode, [CDS_FULLSCREEN]) = DISP_CHANGE_SUCCESSFUL then begin Result := True; SendMessage(HWND_BROADCAST, WM_DISPLAYCHANGE, SPI_SETNONCLIENTMETRICS, 0); Break; end; Inc(i); end; end; |
Re: Ferby-Fall II
Zitat:
|
Re: Ferby-Fall II
Hallo,
ich habe das Programm umbennant damit ich sofort weiß was dieses Programm tut, warum soll ich die Herkunft verschleiern??? Mann braucht ja nur dein Programm zu öffnen und schon weiß mann wo es her kommt. Nachdem du es Openscource gemacht hast würde ich, wenn ich es verschleiern würde, einfach alles auf der Form löschen und neu compilen...... Nein der Ordner wird nicht gelöscht, weil mein "Setup Programm" keine "Reinstallt" hat, ich werde sobald ich Zeit habe ein Reinstallt Programm schreiben, mfg, Ferby |
Re: Ferby-Fall II
Zitat:
Denk nächstes Mal daran, wenn Dir jemand auf Dein Bitten hin was erzählt. Ich persönlich teste übrigens keine EXEn ohne Source, denn es sind in Foren wie Diesem auch schon Trojaner als vermeidlich zu testende Tools gepostet worden. Zumindest der Source sollte mitgeliefert werden. Deinem Tool nach zu urteilen stecken sowieso keine Geheimnisse drin. |
Re: Ferby-Fall II
Delphi-Quellcode:
So, damit sollte es klappen mit der Frequenz. MultiMon unter 98 und ME werden dabei nciht sauber unterstützt - diese Leutchen werden dann auch weiterhin die falsche Frequenz haben. Grundsätzlich könnte man da noch mit dem CDS_UPDATEREGISTRY rumspielen und deine Spieleauflösung nicht gleich fest abspeichern und dadurch die Wiederholfrequenz behalten.
Uses
ShellAPI, registry; // auch wenn du es nicht wolltest, nun hast doch ein wenig Registry mit drinne - aber nur lesen... .... Var ScreenAlt: TPoint; // diese solltest du schon haben ScreenAltFrequenz : Integer; // diese kommt neu hinzu Function ChangeScreen(AWidth, AHeight: Word; AFrequenz: Integer; Const APfad: string): Boolean; // modified by Muetze1 Const ENUM_CURRENT_SETTINGS : Cardinal = Cardinal(-1);//$ffffffff; // = -1 Var lpDevMode: TDeviceMode; saveiconherstellen: boolean; lRegInfo : TRegistry; Begin saveiconherstellen := false; If ( AWidth <> 0 ) Then Begin ScreenAlt.x := Screen.Width; ScreenAlt.y := Screen.Height; ScreenAltFrequenz := 0; // diese Variable noch definieren If ( EnumDisplaySettings(Nil, ENUM_CURRENT_SETTINGS, lpDevMode) ) Then Begin If ( ( lpDevMode.dmFields And DM_PELSWIDTH ) > 0 ) Then ScreenAlt.x := lpDevMode.dmPelsWidth; If ( ( lpDevMode.dmFields And DM_PELSHEIGHT ) > 0 ) Then ScreenAlt.y := lpDevMode.dmPelsHeight; If ( ( lpDevMode.dmFields And DM_DISPLAYFREQUENCY ) > 0 ) Then ScreenAltFrequenz := lpDevMode.dmDisplayFrequency Else If ( Win32Platform = VER_PLATFORM_WIN32_WINDOWS ) Then // Win9x/ME Begin lRegInfo := TRegistry.Create(KEY_READ); lRegInfo.RootKey := HKEY_CURRENT_CONFIG; Try If lRegInfo.OpenKey('\Display\Settings', False) Then Begin ScreenAltFrequenz := StrToIntDef(lRegInfo.ReadString('RefreshRate'), 0); End; Finally lRegInfo.CloseKey; lRegInfo.Free; End; End; End; ShellExecute(0, 'open', PChar(APfad + 'saveicon.exe'),'"\s"', nil, SW_Show); Sleep(1000); End Else Begin saveiconherstellen:=true; AWidth := ScreenAlt.X; AHeight := ScreenAlt.Y; AFrequenz := ScreenAltFrequenz; End; lpDevMode.dmFields := DM_PELSWIDTH Or DM_PELSHEIGHT; lpDevMode.dmPelsWidth := AWidth; lpDevMode.dmPelsHeight := AHeight; If ( AFrequenz > 20 ) Then // valid? Begin lpDevMode.dmDisplayFrequency := AFrequenz; lpDevMode.dmFields := lpDevMode.dmFields Or DM_DISPLAYFREQUENCY; End; Result := ChangeDisplaySettings(lpDevMode, CDS_UPDATEREGISTRY) = DISP_CHANGE_SUCCESSFUL; If saveiconherstellen Then ShellExecute(0,'open', PChar(APfad + 'saveicon.exe'),'"\r"', nil, SW_Show); If Not Result Then Begin MessageBeep(MB_ICONERROR); MessageDlg('Fehler1' +#10#10+ 'Das Programm konnte die Auflösung nicht auf '+inttostr(AWidth)+'x'+inttostr(AHeight)+ ' umstellen.' +#10+ 'Es könnte sein das der Computer diese Auflösung nicht unterstützt' +#10+ 'Sollte der Computer diese Auflösung doch unterstüzen,' +#10+ 'dann stelle bitte die Auflösung manuel ein und starte das Spiel erneut.', mtError, [mbOK], 0); Application.Terminate; End; End; Ansonsten kannst du nun auch eine Wiederholfrequenz für deine Spielauflösung angeben - da ist wieder die Frage, ob es der Monitor unterstützt. Die nicht vom Monitor unterstützten Auflösungen werden zwar beim EnumDisplaySettings() ausgeblendet (ab NT), aber beim setzen kann man auch nicht unterstützte setzen. Wenn die 60 Hz auf deiner Spielauflösung bisher nicht störten, dann gebe bei dem Frequenzparameter eine 0 an beim Aufruf. Die Registry wird nun doch gebraucht für die Wiederholfrequenz unter 9x/ME - aber es wird nur gelesen... Und grundsätzlich gilt meine Signatur! |
Re: Ferby-Fall II
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz