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.