eigener Code für Bildschirmauflösung ändern & externe Prozess HWND

  • VB.NET

Es gibt 88 Antworten in diesem Thema. Der letzte Beitrag () ist von Xiantrius.

    hi @-Franky-
    Ich führe mein Tool auf x64 aus auch auf x32 gehts nicht auf 1920x1080 einzustellen.
    Wenn es wirklich ein Unterschied zwischen der API gibt? Warum hab ich nie was gefunden? Finde immer nur die selbe API im netz.

    Das sollte die 64Bit variante sein. Führe auch so mein Tool aus als 64Bit.
    Trotzdem kann ich 1920x1080 nicht ansteuern. ALLE anderen gehen tadellos die höhere Auflösung kann ich mit richtige Frequenz wie 120 und 144Hz anwenden. Bei der problem Auflösung lässt sich nichts ändern.
    Sollte ich mich geirrt haben dann Poste doch bitte die 64Bit variante damit ich den unterschied weis, da ich sonst nichts im netz finde.

    VB.NET-Quellcode

    1. '32Bit variante wird nicht verwendet sollte nur zum vergleich dienen.
    2. <Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="EnumDisplaySettingsA")>
    3. Private Function EnumDisplaySettings(ByVal deviceName As String, ByVal modeNum As Int32, ByRef devMode As DEVMODE) As Int32
    4. End Function
    5. <Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="ChangeDisplaySettingsA")>
    6. Public Function ChangeDisplaySettings(ByRef devMode As DEVMODE, flags As Int32) As Int32
    7. End Function
    8. '64Bit variante wird verwendet
    9. <Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="EnumDisplaySettingsA")>
    10. Private Function EnumDisplaySettings(ByVal deviceName As String, ByVal modeNum As Int64, ByRef devMode As DEVMODE) As Int64
    11. End Function
    12. <Runtime.InteropServices.DllImport("user32.dll", EntryPoint:="ChangeDisplaySettingsA")>
    13. Public Function ChangeDisplaySettings(ByRef devMode As DEVMODE, flags As Int64) As Int64
    14. End Function


    Habe es doch versucht soweit wie möglich zu erklären.
    Wenn es bei QRes.exe geht weil die API 64bit unterstützt, nicht zu vergessen das proggi wurde 2003 gemacht.
    Müsste ja jetzt meine auch gehen allerdings über VB.NET...

    hi @Fakiz
    Warum? Es funktioniert tadellos es geht mir nur um die Auflösung 1920x1080... geht nicht und das liegt nicht an mein Tool hab auch schon wenn du mal den Code angeschaut hast in der Funktion ChangeResolution den Monitor 0 bzw. wenn ich ein 2 hätte könnte ich auch Monitor 1 anwählen und Auflösung ändern. Bei mir ist aber weil ich nur 1 Monitor nutze der Wert 0 drin.
    Windows zeigt über Board mitteln ebenfalls das ich 32Bit Farbtiefe nutze.
    Jeder baut sein tool etwas anders auf und nutzt sein Style, die hauptsache es funktioniert am ende ohne probleme.
    Der Fehler
    Die Meldungen habe ich woanders eingebaut.
    Zwar hab ich das so gemacht:
    Die oberste Textbox/Label zeigt den Status an und liest sämtliche Informationen aus und wird abgefragt.
    Wenn ich zum Beispiel nur die Auflösung ändern will und das ausführen will.
    Wird das abegefragt über ein Timer der kurz mal startet und dannach gleich wieder auf pause geht da es ein bisschen dauert bis er die anzeige richtig anzeigt nach Änderung.
    Auch fragt meine Meldung ab wenn ich versuche die selben Einstellungen zu übernehmen obwohl es schon vorhanden ist.
    Urprünglich hatte ich das so ähnlich wie bei dir. Viele wege führen nach Rom.
    Ich weis auch das es so wie du Vorgeschlagen hast auch funktioniert.
    Wollte halt was eigenes schreiben.
    Trotzdem tut die API immer noch das was sie soll bis auf eine kleine Ausnahme deswegen bin ich ja hier und versuche das problem zu lösen.
    Ausserdem würden alle die das selbe problem haben profitieren wenn wir das gelöst kriegen würden.

    Zur Veranschaulichung das ich wirklich 32bit Farbtiefe habe auf Windows 10.





    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Xiantrius“ ()

    @Xiantrius Sag ja, es gibt sicher Clones von qres.exe. Schaust Du hier: github.com/lzukw/ScreenRes Der Hauptteil steckt in der ResolutionManager.cpp. Probiere doch die beiliegende screenres.exe direkt aus ob diese mit Deiner gewünschen Auflösung funktioniert. Wenn ja, dann studiere den Code oder falls sich jemand erbarmt, lässt Dir den C++ Code (sicher nicht umsonst) übersetzten.
    Mfg -Franky-
    @-Franky-
    Mir ist schon klar das du C++ kannst und nicht helfen willst. So wie dein Satz klingt.
    Wenn sich jemand erbarmt. Naja schade das du so bist.
    Auch wenn in dein Profil nur VB6, VB.NET glaube ich nicht das du C++ nicht ein bisschen beherscht so wie du dein Satz raus haust *schmunzel'
    Mir ist aufgefallen das der Wert von iRetTest beim testen und am schluss der Wert bei iRetUpdate ständig beim versuch 1920x1080 auf 4294967294 landet am ende wenn es gescheitert ist.

    Einfacher wäre es wenn jemand was weis und mir sagen könnte warum ich wegen einer Auflösung die nicht funktioniert den ganzen Code durch wühlen muss anstatt mal zu helfen, ich habe jede Menge code gezeigt und frage mich langsam weshalb es das Forum gibt?
    Normalerweise um sich gegenseitig zu helfen um zu lernen, oder findet ihr nicht?

    die Farbe Rot ist der Moderation vorbehalten und wurde ersetzt ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Xiantrius schrieb:

    Einfacher wäre es wenn jemand was weis und mir sagen könnte warum ich wegen einer Auflösung die nicht funktioniert den ganzen Code durch wühlen muss anstatt mal zu helfen, ich habe jede Menge code gezeigt und frage mich langsam weshalb es das Forum gibt?
    Normalerweise um sich gegenseitig zu helfen um zu lernen, oder findet ihr nicht?


    Weil du ja debuggen musst. Du hast doch hier jetzt super viel Hilfe bekommen was du noch machen kannst.
    Warum soll jemand für dich jetzt die ganze Fehlersuche und das Debuggen übernehmen? Ist das nicht deine Aufgabe?
    Ich habe dich paar Posts vorher nach einem bereinigtem Projekt gefragt so das ich / wir das selbst mal kompilieren können und schauen können
    ob der Fehler bei uns auch Auftritt und FALLS ja wir das eventuell Debuggen können aber da kam nichts - noch nichtmal eine Reaktion.
    Und jetzt möchtest du quasi das man dir die Lösung sofort an die Backe wirft - wobei es sicherlich auch so sein kann das es da einfach gerade keine Lösung gibt.
    Aber wie gesagt. Stell mal ein kompilierbares bereinigtes Projekt bereit das bei dir auf dem PC den Fehler wirft. Dann können wir das auch mal testen.

    Außerdem jemanden hier runter zu machen nur weil er nicht kostenlos einen Code übersetzt find ich echt dreist.
    Hier steckt auch Arbeit drin die jeder freiwillig macht ohne Bezahlung. Bei Aufwendigen dingen ist es völlig klar das man auch eine Gegenleistung erwartet.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen
    Tja warum liest du nicht mal den ganzen text? dann würde dir auffallen das der riesen Wert 4294967294 eine Fehlerquelle ist heist das die Auflösung sich nicht ändern lässt, amsonsten wäre es 0 wenn es funktioniert.
    Du wirst sehen der Fehler wird nicht an mir liegen.
    Wie gesagt ALLE ANDEREN Auflösungen FUNKTIONIEREN nur 1920x1080 will er nicht übernehmen.
    Es geht nur mit externer exe oder mit Windows Boardmittel Anzeige.
    Für Leute die bereit sind zu helfen und nicht fordern ach du musst C++ lernen, mir reicht VB.NET und C++ lohnt sich für mich nicht da es keine Windows Forms Anwendung für die Sprache gibt, wenn dann ehr eventuel C#. Ich mache selbst so gut wie kaum Dos basierte Anwendungen.
    Ich habes heute versucht zu übersetzen aber verstehe C++ zu wenig.

    gelöscht

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Xiantrius“ ()

    Also mit deinem Code kann ich bei mir alle unterstützen Moden einstellen. Hast du eine zerschossene Registry? Bereinigt ist dein Projekt auch nicht, Bin und Obj Ordner nicht gelöscht, eine EXE in RessourcenOrdner, noch eine EXE(memory.exe) in der Mappe, nach deinem Kommentar mit dem lesen, kann ich mir das nicht verkneifen: Mit dem Finger auf andere zeigen aber keine Spur besser. Die Boardregeln untersagen das hochladen von kompilaten ausserhalb des Showrooms, auch wurde explizit eine bereinigte Mappe angefragt.

    Daher hab ich den Beitrag gemeldet, lade eine bereinigte Mappe hoch, ohne BIN, VS, OBJ Ordner und vor allem ohne irgenwelche EXE!

    Deine Memory.exe
    virustotal.com/gui/file/07f362…ef64c2404123a13?nocache=1
    4 von 64 AVs schalgen Alarm.

    Sowas nehm ich persönlich, ich bin jetzt schon wieder raus hier und du auf meiner Blacklist. Ich nehm die exe auseinander und wehe da ist wirklich was drin.

    Edit, die Memory.exe scheint OK, scheint sich um false positives zu handeln, wäre da jetzt was drin gewesen, hätte ich Anzeige erstattet, erwähne ich unverhohlen nur damit dir klar wird, was solch ein handeln für Folgen haben kann.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Takafusa“ ()

    Na gut ganz wie ihr wollt, da man immer noch glaubt das ich Virus programmiere und exe mit einbaue das auch noch ein virus hat, na bitte glaubt es ruhig.
    Jedenfalls ich hatte keine böse absichten und habe es zu genüge bewiesen. Ich bat um hilfe um das eine problem zu lösen und bekam sie nur in sachen von C++ lernen. Dabei hätte man nur sagen brauchen was ich vielleicht falsch mache.
    Und ausserdem ich hätte wohl kaum mein Projekt hoch geladen wenn ich etwas zu verbergen hätte.
    Memory.exe ist ein Memory Spiel mehr nicht. Die hatte ich vergessen zu löschen hab ich auch selber programmiert und compiliert.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Xiantrius“ ()

    Ich hab die EXE untersuchst, scheint ok zu sein, siehe auch noch meinen Edit in meinem letzten Post und lade die Mappe neu hoch, aber sauber ohne EXE und die erwähnten Ordner. Da EXE Dateien ausserhalb des Showrooms so oder so nicht erlaubt sind ist es egal ob false positive oder nicht. Wenn du deswegen nun gekränkt bist, nicht mein Fehler. Darfst dich auch nicht wundern wenn keiner mehr Anhänge von dir runterlädt.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Takafusa“ ()

    @Takafusa
    Ich sagte doch schon vor mehreren Tagen das ist Fehlalarm hab jetzt clean gemacht und nur mit projekt ohne unterordner und exe hochgeladen.
    Wer sich das anschauen will kann es gerne tun wie gesagt ich habe nichts zu verbergen.
    Deine art gefällt mir du schreibst was du denkst.
    Schade das ich bei dir in der Blackliste stehe das nur weil ich ein Fehler davor gemacht habe mit den Projekt hochladen.
    Entschuldige bitte.

    mfg.
    Xiantrius

    Download project clean
    Wollt ihr von den Archiv noch den Hashcode?
    76034C4F5A76922540B2D1EC84603443

    Falls es euch beruhigt 0 viren bzw. scheinviren alles clean nur projekt mit code usw...
    virustotal.com/gui/file/105ffd…269ebfc1b864e44?nocache=1
    Dateien

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Xiantrius“ ()

    Xiantrius schrieb:

    Tja warum liest du nicht mal den ganzen text? dann würde dir auffallen das der riesen Wert 4294967294 eine Fehlerquelle ist heist das die Auflösung sich nicht ändern lässt, amsonsten wäre es 0 wenn es funktioniert.


    Also dieser riesen Wert kann durch falsche interpretation entstehen(signed/unsigned), kann genauso gut -2 sein.

    Hab eben in Winuser.h geschaut
    #define DISP_CHANGE_BADMODE -2

    Dann wäre das nicht unterstützt. Aber ich hab noch was im Archiv, da schau ich mal, lade das morgen hoch, dann kann der TE damit auch noch mal testen. Wollte mich zwar raushalten, aber nachdem sich der TE in einer PN bei mir entschuldigte(obwohl das hier bei allen angebrachter wäre, keiner hier wird exe's in Anhängen mögen), will ich mal nicht so sein, da es auch false positives waren.
    @Takafusa Du hast recht.
    Also Leute entschuldigt bitte mein falsch hochgeladenes projekt war einfach zuviel dabei was nicht rein gehörte das war unachtsam von mir.

    Thema: Wie starte ich aus RAM hatte ich ein anderen Thread damals geöffnet.
    Das Memory.exe stammt von mein eigenen projekt ist nichts anderes als ein Memory Spiel gewesen und war zum testen gedacht. Hab geprüft ob man die aus resource in Process.Start laden kann, leider ein fehlschlag war da nur neugierig. Vielleicht hätte man die weil die von VB.NET Code ist auf andere weise gestartet bekommen ist aber von anderen Thread Thema gewesen wie man eine exe aus Ressource über RAM ausführt. Hab das aber ganz schnell zur abgehackt weil das nicht so funktionierte wie ich es mir gedacht habe. Bei QRes.exe ging das es erst recht nicht. Kann euch nochmal versichern das da keine Böse absicht dahinter war. Benutze ja selbst mein Tool mit der QRes.exe hatte die Datei.
    Diese ist nur ein ausweg um das zu überbrücken. Möchte allerdings unabhängig der externen exe Datei werden.
    Wie ich mein Projekt wieder aufgegriffen habe:
    Mich hatte damals zunext interessiert wie man über CMD die Bildschirmauflösung ändern kann. Auf diese weise bin ich auf dieses kleine Tool gestossen.
    Naja dann hab ich auf mein altes Projekt zurück gegriffen und daraufhin mir ein ganz neues gemacht da ich schon die ganze Zeit probleme hatte über die API 1920x1080 anzuwenden. Hatte versucht das problem zu lösen und offen gestanden mache ich an den Problem 2 Wochen schon rum und sehe kein anderen ausweg nur wegen einer Auflösung QRes.exe zu verwenden über mein Tool.
    Auch über Windows Board mitteln kann ich die Auflösung ändern.

    Wollte das nur etwas aufklären. Auch wenn der Text etwas länger ist. Wer sich dafür interessiert kann es lesen wer nicht ignoriert das Thema.

    ###################################################################

    Jetzt zum eigentlichen Thema zurück.
    Jetzt wisst ihr warum ich seid Tagen um hilfe ersuche, habe mir des öfteren gedanken gemacht ob es an mein Code liegt, oder der Monitor das problem ist.
    Den alle anderen Auflösungen nimmt er ja über mein Tool an Unabhängig der externen exe Datei.
    Werde einfach nicht schlau daraus wo der Fehler liegt.

    mfg.
    Xiantrius

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Xiantrius“ ()

    @Xiantrius [Offtopic On] Ich entschuldige mich für die vllt. falsche Wortwahl. Ich hätte auch anstatt "erbarmt" schreiben können, "opfert jemand seine Freizeit" oder "ach komm, jemand wird das schon übersetzten". Jeder hat ja ein anderes Empfinden was welches Wort ausdrückt. Daher: Ich bin nur verantwortlich für das was ich sage, nicht für das, wie es verstanden wird. Auch für die Annahme das ich gedacht habe das Du C++ etwas lesen kannst entschuldige ich mich. Ich fühle mich auch von überdimensionalen Schriftgrößen in einem Forum genervt. Das ist so als wenn Dich jemand anschreit. Vllt will derjenige aber nur damit sagen, mach doch bitte dieses oder jenes. Ist halt reine Empfindungssache und gehe darauf nicht ein.[Offtopic Off]

    Das Nachfolgende einfach mal Bewertungsfrei lesen. An Deinem Monitor wird es wohl nicht liegen wenn die qres.exe entsprechende Auflösungen einstellen kann. Mich würde sowas voll total abnerven wenn ein Programm etwas kann, wo mein Programm scheitert. Ich würde alles, mit meinen mir zur Verfügung stehenden Tools, daran setzten um herauszufinden was da vor sich geht. Daher mein Vorschlag mal die qres.exe mit dem "API Monitor" zu überwachen um herauszufinden was welchen API da macht und welche Parameter mit welchen Werten gefüllt ist. Dann könnte man noch die Registry überwachen weil die qres.exe wahrscheinlich auch auf die Registry zugreift (Siehe ScreenShot vom HEX-Editor mit den verwendeten APIs) und irgendwelche Daten ausließt. Hast Du denn mal die screenres.exe aus dem GitHub Download probiert?
    Mfg -Franky-

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „-Franky-“ ()

    Schön, scheint sich wieder alles zu entspannnen. Ich suche das gleich raus, kann aber etwas dauern. Muss da einige BlueRay's filzen. In der Zwischenzeit kannst du( @Xiantrius) mal diesen Schnipsel ausprobieren, dann siehst du das ich mit meiner Theorie das die große Zahl wohl eine -2 sein sollte vermutlich recht habe. Wie durch Magie gibt der Code beide Zahlen aus, die "Riesenzahl" wie auch -2.

    VB.NET-Quellcode

    1. Dim b() As Byte = {&HFE, &HFF, &HFF, &HFF}
    2. Dim i As Integer = BitConverter.ToInt32(b, 0)
    3. Dim ii As UInteger = BitConverter.ToUInt32(b, 0)
    4. Debug.WriteLine(i)
    5. Debug.WriteLine(ii)
    API Monitor klingt interesant. Bin aber grade auf der Arbeit kann erst heute abend nach schauen.
    @-Franky-
    Nein hab das mit solchen tools noch nie analysiert um deine frage zu beantworten.

    @Takafusa
    Das gucke ich mir auch heute abend mal an. Sobald ich Zeit hab.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Xiantrius“ ()

    Hi

    Für die, die es Interessiert. Hier der Link zm "API Monitor": rohitab.com/apimonitor Damit kann man schon so einiges mit Analysieren. Empfehlenswert sind auch die "Articles" auf der Seite um einfach mal einen groben Überblick zu erhalten was so geht. Der Einstieg wäre das Tutorial "API Monitor Tutorial: Monitoring your first application".
    Mfg -Franky-

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „-Franky-“ ()

    So, hab ein Projekt zum testen prepariert, dummerweise hatte ich das auch nur in C++, daher hab ich jetzt nur ein minimum gemacht keine Rotation und nichts weiteres, nur Auflösung und Bildrate einstellen. Deinen Code habe ich nur grob durschgeschaut, so einige Sachen sind mir aufgefallen, deine API Deklarationen stimmen zum Teil nicht. Wer auch immer die Deklarationen geschrieben hat, hat wohl nicht bedacht das in C++ ein LONG(auch DWORD) nur 4 Bytes gross ist, hat aber Int64 verwendet was in NET ein Long entspricht in NET aber 8 Bytes gross ist, was in C++ ein QWORD oder "long long" wäre.

    Bei EnumDisplaySetting kommt ein boolean zurück, bei deiner deklaration ein Int64.
    Bei ChangeDisplaySettings kommt laut deiner deklaration ein int64/long raus, in der doku steht LONG(in C++ nur 4 bytes) also wäre da in VB integer richtig.

    In deinem Code liest du an verschiedenen Stellen die Settings aus: Hier Frequenzen, da Bittiefe, woanders Auflösungen. Diese vorgehensweise halte ich für falsch. So könnte möglicherweise ein nicht unterstützter Modus zusammengewürfelt werden. Eine mögliche Ursache für dein Problem.

    Das arbeiten mit der Bittiefe kannste dir auch sparen weil:
    docs.microsoft.com/en-us/windo…user-enumdisplaysettingsa

    Microsoft schrieb:


    Note Apps that you design to target Windows 8 and later can no longer query or set display modes that are less than 32 bits per pixel (bpp); these operations will fail. These apps have a compatibility manifest that targets Windows 8. Windows 8 still supports 8-bit and 16-bit color modes for desktop apps that were built without a Windows 8 manifest; Windows 8 emulates these modes but still runs in 32-bit color mode.


    Das sind nur ein paar Dinge die mir aufgefallen sind, sicher ist noch mehr nicht ganz richtig, aber ganz ehrlich habe ich keine Lust nun alles zu suchen was fehlerhaft sein könnte. Schon allein weil du DEVMODE und DEVMODEW im Projekt hast, wie auch solche Sachen verderben den Spaß "Anonymous_7a7460d9_d99f_4e9a_9ebb_cdd10c08463d", ist das das Ergebnis aus einem Dekompilervorgang? Also die Codequalität lässt sehr zu wünschen übrig(nicht böse gemeint). Daher hab ich ja auch das minimales DemoProjekt gemacht. Bei mir funktioniert es einwandfrei. Mal schauen ob es bei dir nun auch alles geht.

    Kleiner Hinweis zu WinAPI funktionen.
    Hin und wieder ist dir sicher mal aufgefallen das es verschiedene Varianten für funktionen gibt, z.B.
    ChangeDisplaySettings
    ChangeDisplaySettingsA
    ChangeDisplaySettingsW

    Machen alles das gleiche, es gibt aber 3 aus einfachen Grund. Nimmst du die Variante ohne A oder W am Ende wählt das System automatisch die A oder W Variante, jenachdem ob ANSI oder UNICODE festgelegt ist.
    Man kann aber auch expizit die ANSI ...A oder die UNICODE ...W (W steht für Wide, A wohl für ANSI) wählen. Siehe meine Deklarationen überall ANSI explizit festgelegt, wie auch im DLLIMPORT attribute die Variante mit dem A am Ende gewählt.(EntryPoint)
    So ist es auch mit den Structuren.
    Dateien

    Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von „Takafusa“ ()

    @-Franky-
    Danke schaue ich mir näher an heute abend.

    @Takafusa
    Das mit der Int64 variante ging auf meine Kappe. War nur test weil ich versucht habe das problem zu lösen. Davor war es integer wie sich das normal gehört. Trotzdem so oder so hat das nicht funktioniert.
    Die Anonymus ziffer hatte ich von netz.
    Hatte viel rum probiert. Mein Code ist nicht perfekt bin immer noch am üben und lernen mit VB.NET mache sowas nicht Beruflich, sondern nur privat Interessen halber.

    Werde dein Demo heute abend anschauen.
    Danke für die Zeit und mühe.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Xiantrius“ ()

    Dann habe ich einen guten Tipp für dich, du kannst ganz einfach bei google den API-Funktionsnamen suchen, dann schaust du dir bei Microsoft die C++ Doku an, wenn du nicht sicher bist, welche Datentyp in NET richtig ist, suche nach c++ <datentyp> byte size(z.B. WORD) , das machst du auch mit VB. Dabei musst du auch drauf achten ob signed oder unsigned(also mit vorzeichen + und -, oder unsigned was nur positiv sein kann).
    Wenn die Größen(Anzahl Bytes) wie auch Wertebereich(0...n oder -n....0....n) übereinstimmen hast du den richtigen Typ gefunden.

    Mit der Codequalität war wirklich nicht böse gemeint, mir war sofort klar als ich den Code sah, das dies für dich nur ein Hobby ist. Für mich ist es auch nur ein Hobby, mit dem ich allerdings viel zu viel Zeit verbringe.(was sich aber auch auszahlt)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Takafusa“ ()

    @Takafusa
    Es tut mir wirklich sehr leid habe dein variante direkt ausprobiert.
    Die selben Fehler treten auch da auf. Lässt sich weiterhin nicht auf 1920x1080 ändern mit keiner Hz-Frequenz.
    Während alle anderen Tadellos wie bei meinen Code 100%ig funktionieren.
    Irgendwas stimmt da nicht.
    Langsam glaube ich immer mehr das bei VB.NET das nicht so gut funktioniert.
    Bin langsam am verzweifeln und es tut mir wirklich sehr leid.
    Mein Computer zickt anscheinend hartnäckig rum.
    An meine Registry kann das ja nicht liegen.
    1. Geht das ja über Board mittel
    2. externe exe Dateien wie QRes oder andere die das genauso machen geht das.
    Siehe Screenshot


    Der Code Teil wird mitgeteilt.

    VB.NET-Quellcode

    1. Public Const DISP_CHANGE_BADMODE As Integer = -2


    mfg.
    Xiantrius

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Xiantrius“ ()

    Schade, zumindest kommt schon mal eine korrekte Meldung(DISP_CHANGE_BADMODE) . Ich habe bei mir einen Loop laufen lassen, alle gehen. Ich hatte als ich im winuser Header geschaut habe was von UNSAFE flags gelesen, möglicherweise muss man damit was machen.
    Aus der winuser.h

    C-Quellcode

    1. /* Flags for ChangeDisplaySettings */
    2. #define CDS_UPDATEREGISTRY 0x00000001
    3. #define CDS_TEST 0x00000002
    4. #define CDS_FULLSCREEN 0x00000004
    5. #define CDS_GLOBAL 0x00000008
    6. #define CDS_SET_PRIMARY 0x00000010
    7. #define CDS_VIDEOPARAMETERS 0x00000020
    8. #if(WINVER >= 0x0600)
    9. #define CDS_ENABLE_UNSAFE_MODES 0x00000100
    10. #define CDS_DISABLE_UNSAFE_MODES 0x00000200
    11. #endif /* WINVER >= 0x0600 */
    12. #define CDS_RESET 0x40000000
    13. #define CDS_RESET_EX 0x20000000
    14. #define CDS_NORESET 0x10000000

    Versuch mal mit dieser Flag kombination
    erst testen
    WinAPI.ChangeDisplaySettings(mode, WinAPI.CDS_TEST or WinAPI.CDS_ENABLE_UNSAFE_MODES )
    dann übernehmen
    WinAPI.ChangeDisplaySettings(mode, WinAPI.CDS_UPDATEREGISTRY or WinAPI.CDS_ENABLE_UNSAFE_MODES )
    Versuch macht klug. Ich versuch dazu mal nähere Infos zu bekommen. Diese Unsafe flags stehen ab Vista zur Verfügung. Du kannst aber auch andere Flag Combos probieren. Einfach mal verschiede mit or reingeben in die Funktion.
    Du musst constanten aber in der WinAPI klasse eintragen. das 0x einfach durch &H ersetzen(keine angst wenn die führenden nullen hinterm &H verschwinden, das werden sie)

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Takafusa“ ()