|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2006
Messaggi: 450
|
[VB] script x eseguire comandi da un form (lock, screensaver)
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.. 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): ![]() EDIT: titolo corretto Ultima modifica di phaolo : 01-09-2008 alle 02:27. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2003
Città: Farra di Soligo
Messaggi: 965
|
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 puoi trovare un esempio per disattivare lo screensaver in vb.net |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Sep 2006
Messaggi: 450
|
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): Codice:
: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 ) Ultima modifica di phaolo : 02-09-2008 alle 13:13. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Sep 2003
Città: Farra di Soligo
Messaggi: 965
|
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.
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Sep 2006
Messaggi: 450
|
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 |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Sep 2006
Messaggi: 450
|
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? Codice:
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&) |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Sep 2003
Città: Farra di Soligo
Messaggi: 965
|
Vedi se cosi ti può andar bene:
Codice:
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
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Sep 2006
Messaggi: 450
|
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): Codice:
Set objShell = CreateObject( "Wscript.Shell" ) returnVal = objShell.Run( "%windir%\System32\sscommander.scr" , 1, True) objShell.Run "%windir%\System32\rundll32.exe user32.dll,LockWorkStation" Che casino.. p.s: solita fortuna poi, nella guida manca proprio la pagina di "set statement".. Ultima modifica di phaolo : 01-09-2008 alle 01:19. |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Sep 2006
Messaggi: 450
|
Sii ce l'ho fatta! Ho usato Dim ed ho sostituito quei comandi assurdi.
Che bello, il mio primo script VB! (copia&incolla + a caso lol)Grazie RuKa il tuo aiuto è stato fondamentale! Codice:
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! Ultima modifica di phaolo : 01-09-2008 alle 02:20. |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Sep 2003
Città: Farra di Soligo
Messaggi: 965
|
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
Felice di poter essere stato di aiuto. |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Sep 2006
Messaggi: 450
|
Vero, ma penso che la versione base sia gratis soprattutto per poter creare nuovi "adepti".
Cmq è stato divertente Scrivo l'ultima versone corretta (così, per pignoleria hehe) Codice:
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
Ultima modifica di phaolo : 02-09-2008 alle 14:07. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:22.












(copia&incolla + a caso lol)








