Newsgroup: it.comp.lang.visual-basic
Titolo: [?] Passare a 800X600 all'avvio di un programma

Ciao, ho il problema in oggetto e tramite gli esempi trovati in rete non
sono riuscito a risolvere il mio problema, se qualcuno vuole aiutarmi...beh
grazie
Ringrazio anticipatamente Mateo


Caro "Mateo" (eh, eh, ti sei scordato la "t" !!!)
è molto più semplice di quanto tu possa pensare ! Basta che crei un .exe
che, prima di avviare un file che tu scegli, cambia risoluzione dello schermo !
Facile, no ? Ti scrivo qui di seguito il codice:
Private Declare Function EnumDisplaySettings Lib "user32" Alias _
"EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal _
iModeNum As Long, lpDevMode As Any) As Boolean
Private Declare Function ChangeDisplaySettings Lib "user32" Alias _
 "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwflags As Long) _
As Long
       Const CCDEVICENAME = 32
       Const CCFORMNAME = 32
       Const DM_PELSWIDTH = &H80000
       Const DM_PELSHEIGHT = &H100000
Private Type DEVMODE
       dmDeviceName As String * CCDEVICENAME
       dmSpecVersion As Integer
       dmDriverVersion As Integer
       dmSize As Integer
       dmDriverExtra As Integer
       dmFields As Long
       dmOrientation As Integer
       dmPaperSize As Integer
       dmPaperLength As Integer
       dmPaperWidth As Integer
       dmScale As Integer
       dmCopies As Integer
       dmDefaultSource As Integer
       dmPrintQuality As Integer
       dmColor As Integer
       dmDuplex As Integer
       dmYResolution As Integer
       dmTTOption As Integer
       dmCollate As Integer
       dmFormName As String * CCFORMNAME
       dmUnusedPadding As Integer
       dmBitsPerPel As Integer
       dmPelsWidth As Long
       dmPelsHeight As Long
       dmDisplayFlags As Long
       dmDisplayFrequency As Long
End Type
Dim DevM As DEVMODE
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal
hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters
As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Sub ChangeRes(iWidth As Single, iHeight As Single)
       Dim a As Boolean
       Dim i&
       i = 0
              Do
                     a = EnumDisplaySettings(0&, i&, DevM)
                     i = i + 1
              Loop Until (a = False)
       Dim b&
       DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
       DevM.dmPelsWidth = iWidth
       DevM.dmPelsHeight = iHeight
       b = ChangeDisplaySettings(DevM, 1)
End Sub
Private Sub Form_Load()
Call ChangeRes(800, 600)
Call ShellExecute(Form1.hWnd, "open", "c:\windows\cdplayer.exe", "", "", 1)
End
End Sub
Vedi ? Ti basta creare un Form1 e inserire questo codice !!! Nient'altro !!!!!!!!!!!!
Se vuoi, puoi inserirci una TextBox e avviare il prog che vuoi a 800x600, e un
mucchio
di altre opzioni. Scrivimi, se ne vuoi, ok ?
Questo programma, come puoi vedere, avvia CDPLAYERa 800x600, ma puoi avviare il prog
che vuoi.
Ok, allora ? Fammi sapere com'è andata ! Ciao !
Lorenzo "Cyberneticus" Del Vecchio

Ciao sono Matteo :D
Ti ringrazio infinitamente per questo aiuto richidendoti un'altra piccola mano.
Io ho fatto un programma in visual basic e voglio che questo all'avvio mandi
la risoluzione a 800x600 e poi all'uscita la riporti come era in origine (un
pò come fanno tutti i giochi oggigiorno), il tutto se possibile senza
utilizzare 2 eseguibili...
Ringrazio comunque Matteo
Certo che è possibile, Matteo ! SENZA 2 eseguibili !
Ti insegno un trucco: La X di chiusura di una finestra la si può gestire come ti pare
!!!
Con l'evento Query_Onunload()
Un esempio ? Alla chiusura di una finestra puoi far partire il CDPLAYER, o
addirittura
spegnere, riavviare Windows, aprire un qualsiasi file............ecc.......ecc
Puoi anche scrivere in una TextBox il percorso del programma che vuoi avviare,
e lo avvii alla risoluzione che vuoi tu !!!!! Bello, no ?
Ora ti spiego in dettaglio:
Crea un Form1 e mettici questo codice:



Dim DevM As DEVMODE
Sub ChangeRes(iWidth As Single, iHeight As Single)
       Dim a As Boolean
       Dim i&
       i = 0
              Do
                     a = EnumDisplaySettings(0&, i&, DevM)
                     i = i + 1
              Loop Until (a = False)
       Dim b&
       DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT
       DevM.dmPelsWidth = iWidth
       DevM.dmPelsHeight = iHeight
       b = ChangeDisplaySettings(DevM, 1)
End Sub
Private Sub Form_Load()
Call ChangeRes(1024, 768)
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
   If UnloadMode = 0 Then
      Call ChangeRes(800, 600)
      Unload Me
   End If
End Sub
Come vedi, nella Sub del Query Unload, lui prima ti cambia la risoluzione, e
poi si chiude da solo ("unload me" lo conosci, no ? :P)
Io ho finito. Spero di esserti stato utile !!!!!  :)
Ah, scusa la pochezza, ma ho il Pc da un anno e mezzo, e uso VB solo da
un mese, perciò lo sto ancora imparando.
Ciao !
Lorenzo