 
View Full Version : [VBS?] script x lanciare comandi da una messagebox
Ciao, mi potete aiutare a creare un piccolo script per WindowsXp? 
Non so granchè di programmazione e pensavo al VBS (meglio altro?). 
Non so purtroppo neanche i nomi, quindi cercherò di farmi capire come posso..:mc: 
Mi servirebbe creare un'interfaccia grafica tipo MessageBox (se si chiama così) con opzioni da selezionare (il cerchio in cui si mette un pallino) che eseguono comandi\programmi appena si clicca sul classico pulsante OK.
Al massimo mi potete passare un link ad una guida con esempi?
Help :(
p.s: ho abbozzato la GUI su word (conosco già i comandi dos necessari, ma devo abilitarli e tradurli nel linguaggio scelto):
http://img517.imageshack.us/img517/8805/scriptat4.th.png (http://img517.imageshack.us/my.php?image=scriptat4.png)
EDIT: titolo corretto
Se ho capito bene vuoi creare una semplice form con 4 scelte e cliccando su ok viene eseguita quella selezionata.
In vbs eviterei,se proprio vuoi rimanere con quella sintassi puoi andare di vb6, oppure vb.net,c#,ecc ecc,vedi un po te quale preferisci o quale magari conosci un po meglio.
Qua (http://www.xtremevbtalk.com/showthread.php?t=227528) puoi trovare un esempio per disattivare lo screensaver in vb.net
Ah si chiama form. Comunque si, hai capito esattamente :)
Ma potresti aiutarmi a costruirlo? Non so neanche se vb funziona direttamente o se devo compilarlo (e con cosa?). Oppure mi passi un link ad esempi di form (intanto cerco)?
Per il codice io ho solo le istruzioni in un batch che avevo creato in precedenza (con una voce in più ora):
:SCREENSAV
if "%1"=="" goto :EOF
rem ##lock and run screensaver
if "%1"=="lockscr" ( 
reg add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /d 1 /t REG_SZ /f
sscommander.scr /s
%SYSTEMROOT%\System32\rundll32.exe user32.dll,LockWorkStation
goto :EOF
)
rem ##lock and disable screensaver
if "%1"=="lock" ( 
reg add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /d 0 /t REG_SZ /f
%SYSTEMROOT%\System32\rundll32.exe user32.dll,LockWorkStation
goto :EOF
)
rem ##run screensaver only
if "%1"=="scr" ( 
reg add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /d 1 /t REG_SZ /f
sscommander.scr /s
goto :EOF
)
rem ##enable screensaver
if "%1"=="scron" ( 
reg add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /d 1 /t REG_SZ /f
goto :EOF
)
rem ##disable screensaver
if "%1"=="scroff" ( 
reg add "HKCU\Control Panel\Desktop" /v "ScreenSaveActive" /d 0 /t REG_SZ /f
goto :EOF
)
Beh per creare una form come quella ci metti all'incirca 20 secondi,+ che altro c'è da vedere che strumenti hai a disposizione,se non hai ancora nulla il metodo + veloce potrebbe essere scaricare la versione express dell'ultimo ide della microsoft (visual studio 2008),da li hai la possibilità di "costruirti" graficamente la form e poi in base al linguaggio che utilizzi inserire le 4 scelte.
Si lo script è minuscolo, solo che non sapevo da dove partire.
Dowload per vb2008 express iniziato (pesantuccio comunque.. 700mb).
Vedremo cosa riuscirò a combinare.
Grazie RuKa ;)
Mm..non ho avuto granchè successo. 
Ho creato la GUI ma il codice mi dà errori (molte parti sono copiate da internet). Non ho idea del perchè..mi sai aiutare qui?
Public Class Form1
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Any) As Long
    Private Declare Function LockWorkStation Lib "user32.dll" () As Long
    Private Const WM_SYSCOMMAND As Long = &H112
    Private Const SC_SCREENSAVE As Long = &HF140&
    Dim regKey As RegistryKey
    Dim regVal As String
    Private Sub ButtonOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonOK.Click
        '// lock with screensaver
        If Radio1LockScr.Checked Then
            regKey = Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)
            regVal = regKey.GetValue("ScreenSaveActive")
            If regVal = 0 Then
                regKey.SetValue("ScreenSaveActive", "1")
            End If
            regKey.Close()
            LockWorkStation()
            SendMessage(Form1.hWnd, WM_SYSCOMMAND, SC_SCREENSAVE, ByVal 0&)
        End If
        '// lock without screensaver
        If Radio2Lock.Checked Then
            regKey = Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)
            regVal = regKey.GetValue("ScreenSaveActive")
            If regVal = 1 Then
                regKey.SetValue("ScreenSaveActive", "0")
            End If
            regKey.Close()
            LockWorkStation()
        End If
        '// run screensaver only (run without lock on resume)
        If Radio3Scr.Checked Then
            regKey = Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)
            regVal = regKey.GetValue("ScreenSaveActive")
            If regVal = 0 Then
                regKey.SetValue("ScreenSaveActive", "1")
            End If
            regKey.Close()
            SendMessage(Form1.hWnd, WM_SYSCOMMAND, SC_SCREENSAVE, ByVal 0&)
        End If
        '// screensaver enable (just set. Lock on resume depends on system settings)
        If Radio4ScrOn.Checked Then
            regKey = Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)
            regVal = regKey.GetValue("ScreenSaveActive")
            If regVal = 0 Then
                regKey.SetValue("ScreenSaveActive", "1")
            End If
            regKey.Close()
        End If
        '// screensaver disable 
        If Radio5ScrOff.Checked Then
            regKey = Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)
            regVal = regKey.GetValue("ScreenSaveActive")
            If regVal = 1 Then
                regKey.SetValue("ScreenSaveActive", "0")
            End If
            regKey.Close()
        End If
    End Sub
End Class
Se ti servono, ecco i messaggi di errore:
Error	1	'As Any' is not supported in 'Declare' statements. 3 155
Error	2	Type 'RegistryKey' is not defined. 7 19
Error	3	Name 'Registry' is not declared. 14 22
Error	4	'hWnd' is not a member of 'WindowsApplication1.Form1'. 21 25
Error	5	Expression expected. 21 67  (dove c'è ByVal 0&)
Vedi se cosi ti può andar bene:
Imports Microsoft.Win32
Public Class Form1
    'Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Declare Function LockWorkStation Lib "user32.dll" () As Long
    Private Const WM_SYSCOMMAND As Long = &H112
    Private Const SC_SCREENSAVE As Long = &HF140&
    Dim regKey As RegistryKey
    Dim regVal As String
    Private Sub ButtonOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonOK.Click
        '// lock with screensaver
        If Radio1LockScr.Checked Then
            regKey = Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)
            regVal = regKey.GetValue("ScreenSaveActive")
            If regVal = 0 Then
                regKey.SetValue("ScreenSaveActive", "1")
            End If
            regKey.Close()
            LockWorkStation()
            'SendMessage(hWnd, WM_SYSCOMMAND, SC_SCREENSAVE, ByVal 0&)
        End If
        '// lock without screensaver
        If Radio2Lock.Checked Then
            regKey = Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)
            regVal = regKey.GetValue("ScreenSaveActive")
            If regVal = 1 Then
                regKey.SetValue("ScreenSaveActive", "0")
            End If
            regKey.Close()
            LockWorkStation()
        End If
        '// run screensaver only (run without lock on resume)
        If Radio3Scr.Checked Then
            regKey = Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)
            regVal = regKey.GetValue("ScreenSaveActive")
            If regVal = 0 Then
                regKey.SetValue("ScreenSaveActive", "1")
            End If
            regKey.Close()
            'SendMessage(Form1.hWnd, WM_SYSCOMMAND, SC_SCREENSAVE, ByVal 0&)
        End If
        '// screensaver enable (just set. Lock on resume depends on system settings)
        If Radio4ScrOn.Checked Then
            regKey = Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)
            regVal = regKey.GetValue("ScreenSaveActive")
            If regVal = 0 Then
                regKey.SetValue("ScreenSaveActive", "1")
            End If
            regKey.Close()
        End If
        '// screensaver disable 
        If Radio5ScrOff.Checked Then
            regKey = Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)
            regVal = regKey.GetValue("ScreenSaveActive")
            If regVal = 1 Then
                regKey.SetValue("ScreenSaveActive", "0")
            End If
            regKey.Close()
        End If
    End Sub
End Class
Molto meglio, però ti sei dimenticato di togliere i commenti da alcune parti. Gli errori 4 e 5 sono ancora presenti :(
Penso che potrei sostituirli con questo altro codice (relativo al primo bottone):
Set objShell = CreateObject( "Wscript.Shell" )
returnVal = objShell.Run( "%windir%\System32\sscommander.scr" , 1, True)
objShell.Run "%windir%\System32\rundll32.exe user32.dll,LockWorkStation" 
Ma "Set" non sembra esistere..mi serviranno altri Import? Oppure è colpa della versione Express?
Che casino..
p.s: solita fortuna poi, nella guida manca proprio la pagina di "set statement"..
Sii ce l'ho fatta! Ho usato Dim ed ho sostituito quei comandi assurdi.
Che bello, il mio primo script VB! :sbonk:  (copia&incolla + a caso lol)
Grazie RuKa il tuo aiuto è stato fondamentale! :) 
Imports Microsoft.Win32
Public Class Form1
    Private Declare Function LockWorkStation Lib "user32.dll" () As Long
    Dim regKey As RegistryKey
    Dim regVal As String
    Dim objShell = CreateObject("WScript.Shell")
    Dim returnVal As String
    Private Sub ButtonOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonOK.Click
        '// lock with screensaver
        If Radio1LockScr.Checked Then
            regKey = Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)
            regVal = regKey.GetValue("ScreenSaveActive")
            If regVal = 0 Then
                regKey.SetValue("ScreenSaveActive", "1")
            End If
            regKey.Close()
            returnVal = objShell.Run("%windir%\System32\sscommander.scr", 1, True)
            LockWorkStation()
        End If
        '// lock without screensaver
        If Radio2Lock.Checked Then
            regKey = Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)
            regVal = regKey.GetValue("ScreenSaveActive")
            If regVal = 1 Then
                regKey.SetValue("ScreenSaveActive", "0")
            End If
            regKey.Close()
            LockWorkStation()
        End If
        '// run screensaver only (run without lock on resume)
        If Radio3Scr.Checked Then
            regKey = Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)
            regVal = regKey.GetValue("ScreenSaveActive")
            If regVal = 0 Then
                regKey.SetValue("ScreenSaveActive", "1")
            End If
            regKey.Close()
            returnVal = objShell.Run("%windir%\System32\sscommander.scr", 1, True)
        End If
        '// screensaver enable (just set. Lock on resume depends on system settings)
        If Radio4ScrOn.Checked Then
            regKey = Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)
            regVal = regKey.GetValue("ScreenSaveActive")
            If regVal = 0 Then
                regKey.SetValue("ScreenSaveActive", "1")
            End If
            regKey.Close()
        End If
        '// screensaver disable 
        If Radio5ScrOff.Checked Then
            regKey = Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)
            regVal = regKey.GetValue("ScreenSaveActive")
            If regVal = 1 Then
                regKey.SetValue("ScreenSaveActive", "0")
            End If
            regKey.Close()
        End If
        Close()
    End Sub
    Private Sub ButtonCanc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCanc.Click
        Close()
    End Sub
End Class
p.s: piccola critica su VB.. scomoda Iso udf con dentro TUTTO il pacchetto express, installazione lentissima che si connette ad internet di continuo, stessa cosa il programma. Era proprio necessario? Mah! :rolleyes:
Non ho mai provato la versione express (per lavoro uso quella completa) però considerando che le differenze per un utilizzo amatoriale tra le 2 versioni non ci sono (se non un notevole risparmio :) ) direi che si può anche sopportare un'installazione un po lenta.
Felice di poter essere stato di aiuto.
Vero, ma penso che la versione base sia gratis soprattutto per poter creare nuovi "adepti". 
Cmq è stato divertente :D 
Scrivo l'ultima versone corretta (così, per pignoleria hehe)
Imports Microsoft.Win32
Public Class PaoForm
    Dim regKey As RegistryKey
    Dim regVal As String
    Dim objShell = CreateObject("WScript.Shell")
    '// set the form screen position (center)
    Private Sub PaoForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim working_area As Rectangle = SystemInformation.WorkingArea
        Dim x As Integer = (working_area.Left + working_area.Width - Me.Width) / 2
        Dim y As Integer = (working_area.Top + working_area.Height - Me.Height) / 2
        Me.Location = New Point(x, y)
    End Sub
    '// registry REG_SZ needs to be a string, otherwise you'll get a DWORD
    Private Sub ScrReg(ByVal scrset As String)
        regKey = Registry.CurrentUser.OpenSubKey("Control Panel\Desktop", True)
        regVal = regKey.GetValue("ScreenSaveActive")
        If regVal <> scrset Then
            regKey.SetValue("ScreenSaveActive", scrset)
        End If
        regKey.Close()
    End Sub
    Private Sub ButtonOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonOK.Click
        '// lock with screensaver
        If Radio1LockScr.Checked Then
            ScrReg(1)
            objShell.Run("%WINDIR%\System32\sscommander.scr", 1, True)
            objShell.Run("%WINDIR%\System32\rundll32.exe user32.dll,LockWorkStation")
        End If
        '// lock without screensaver
        If Radio2Lock.Checked Then
            ScrReg(0)
            objShell.Run("%WINDIR%\System32\rundll32.exe user32.dll,LockWorkStation")
        End If
        '// run screensaver only (without lock on resume)
        If Radio3Scr.Checked Then
            ScrReg(1)
            objShell.Run("%WINDIR%\System32\sscommander.scr", 1, True)
        End If
        '// screensaver enable (just set it; lock on resume depends on system settings)
        If Radio4ScrOn.Checked Then
            ScrReg(1)
        End If
        '// screensaver disable 
        If Radio5ScrOff.Checked Then
            ScrReg(0)
        End If
        Close()
    End Sub
    Private Sub ButtonCanc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonCanc.Click
        Close()
    End Sub
End Class
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.