Rozlišení při startu a ukončení aplikace   otázka

VB.NET, DirectX, WinForms

Ahoj,

vím, že se to tady již řešilo, ale niže uvedený kod mi ne a ne chodit, o co mi vlastně jde zákazník používá win s minimálním rozlišením protože tam používá dos program, který má být nahrazen programem ve vb.netu, a já potřebui před spuštěním přenastavit rozlišení a po ukončení zase vrátir zpět původní.

Funkce na přečtení rozlišení funguje, ale ta změna hlásí, že se pokuším změnit vnitřní funkci ...

Můžete mi prosím někdo poradit, popřípadě poslat na nějaký odkaz, nedovoliji si přímo žádat o nějaký kód, ale aspoň kde bude nějaký příkládek.

Díky moc

Imports Microsoft.DirectX.DirectDraw

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim dev As Device = New Device()

        dev.SetDisplayMode(800, 600, 32, 75, True)
    End Sub
End Class

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Používat funkci DirectDraw k něčemu, k čemu vůbec nebyla navržena, je zhovadělost.

Imports System.Runtime.InteropServices

Module Module1
  Sub Main()
    Select Case ChangeResolution(1440, 900)
      Case DISP_CHANGE_FAILED
        'Při pokusu o změnu rozlišení došlo k chybě.
      Case DISP_CHANGE_RESTART
        'Změna rozlišení vyžaduje restart.
      Case DISP_CHANGE_SUCCESSFUL
        'Změna rozlišení proběhla úspěšně.
    End Select
  End Sub
End Module

Public Module UnsafeNativeMethods
  Public Const CCDEVICENAME As Integer = 32
  Public Const CCFORMNAME As Integer = 32
  Public Const CDS_UPDATEREGISTRY As Integer = &H1
  Public Const CDS_TEST As Long = &H2
  Public Const DISP_CHANGE_FAILED As Integer = -1
  Public Const DISP_CHANGE_RESTART As Integer = 1
  Public Const DISP_CHANGE_SUCCESSFUL As Integer = 0
  Public Const ENUM_CURRENT_SETTINGS As Integer = -1
  <StructLayout(LayoutKind.Sequential)> Public Structure DEVMODE
    <MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst:=CCDEVICENAME)> Public dmDeviceName As String
    Public dmSpecVersion As Short
    Public dmDriverVersion As Short
    Public dmSize As Short
    Public dmDriverExtra As Short
    Public dmFields As Integer
    Public dmOrientation As Short
    Public dmPaperSize As Short
    Public dmPaperLength As Short
    Public dmPaperWidth As Short
    Public dmScale As Short
    Public dmCopies As Short
    Public dmDefaultSource As Short
    Public dmPrintQuality As Short
    Public dmColor As Short
    Public dmDuplex As Short
    Public dmYResolution As Short
    Public dmTTOption As Short
    Public dmCollate As Short
    <MarshalAsAttribute(UnmanagedType.ByValTStr, SizeConst:=CCFORMNAME)> Public dmFormName As String
    Public dmUnusedPadding As Short
    Public dmBitsPerPel As Short
    Public dmPelsWidth As Integer
    Public dmPelsHeight As Integer
    Public dmDisplayFlags As Integer
    Public dmDisplayFrequency As Integer
  End Structure
  <DllImport("user32")> _
  Public Function EnumDisplaySettings(ByVal lpszDeviceName As Integer, ByVal iModeNum As Integer, ByRef lpDevMode As DEVMODE) As Integer
  End Function
  <DllImport("user32")> _
  Public Function ChangeDisplaySettings(ByRef DEVMODE As DEVMODE, ByVal flags As Integer) As Integer
  End Function
  Public Function ChangeResolution(ByVal width As Integer, ByVal height As Integer) As Integer
    Dim devMode As DEVMODE
    With devMode
      .dmDeviceName = New [String](New Char(32) {})
      .dmFormName = New [String](New Char(32) {})
      .dmSize = CShort(Marshal.SizeOf(GetType(DEVMODE)))
      If EnumDisplaySettings(Nothing, ENUM_CURRENT_SETTINGS, devMode) <> 0 Then
        .dmPelsWidth = width
        .dmPelsHeight = height
        Dim lResult As Integer
        lResult = ChangeDisplaySettings(devMode, CDS_TEST)
        If lResult = DISP_CHANGE_FAILED Then
          Return lResult
        End If
        lResult = ChangeDisplaySettings(devMode, CDS_UPDATEREGISTRY)
        Return lResult
      End If
    End With
  End Function
End Module

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback