Håvard Skrevet 27. april 2006 Del Skrevet 27. april 2006 Hei. Satt å kjedet meg, og tengte at jeg kunne jo prøve meg litt mer på visual basic programering.. Så satte jeg meg ned, og funderte på hva jeg skulle lage, og kom frem til at jeg skal lage et program, som man kan bruke på lan, til å pinge, osv. Da tengte jeg jo at det kunne være med en måte å låse pcn på, så jeg startet med det. Jeg gjør det veldig enkelt, men jeg trenger å deaktivere noen taster, som windows tasten, ctrl+esc osv. Lar dette seg gjøre? Lenke til kommentar
backup Skrevet 27. april 2006 Del Skrevet 27. april 2006 Joda, i vb er det mulig. Det kan gjøres med forskjellige api'er. Det enkleste er nok med SystemParametersInfo api'en. Se for eksempel her: http://groups.google.no/group/microsoft.pu...fe34e824aa5376a Lenke til kommentar
Håvard Skrevet 27. april 2006 Forfatter Del Skrevet 27. april 2006 Takk Takk. Men jeg er helt ny på VS programering, og skjønte desverre ikke så veldig mye.. Kan du poste en kode jeg må lime inn i koden min? slik ak det blir litt lettere, nå i begynnelsen ? Lenke til kommentar
aadnk Skrevet 27. april 2006 Del Skrevet 27. april 2006 (endret) Den nevnte kode, som fungerer ved å emulere skjermsparermodus (der visse taster er avskrudd for å muliggjør sikker passordautorisering, er imidlertid ikke fungerende i 2000/NT/XP der slik autorisering foregår i påloggingsmodus. I slike systemer må du nok ty til noen mer avanserte teknikker enn å kalle en simpel API: http://www.vb-helper.com/howto_disable_keys.html Den fremgangsmåten vil riktignok ikke deaktive tastekombinasjonen Ctrl+alt+delete. Da må du muligens gå så langt som å skrive din egen tastaturdriver, lage en såkalt GINA stub eller overstyre SAS-vinduet i winlogon-prosessen (artikkel). Dette er nokså komplekse saker, men om du ønsker, kan du benytte DLL-filen i artikkelen jeg linket for dette formålet slik: Private Declare Function CtrlAltDel_Enable_Disable Lib "WinLockDll.dll" (ByVal bEnableDisable As Boolean) As Integer Public Sub EnableCAD(bEnable As Boolean) ' True = bruk CAD; False = ikke bruk CAD CtrlAltDel_Enable_Disable bEnable End Sub Ellers kan du rett og slett skru av Task Manager: Public Sub EnableTaskManager(bEnable As Boolean) Dim oWshShell As Object ' Initialiser klassen med registerfunksjonene Set oWshShell = CreateObject("WScript.Shell") ' Sett den riktige verdi til policy-nøkkelen oWshShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\" & _ "Policies\System\DisableTaskMgr", IIf(Not bEnable, 1, 0), "REG_DWORD" ' Rydd opp Set oWshShell = Nothing End Sub Da kaller du bare EnableTaskManager med True og False for å henholdsvis skru på og av Task Manager. Endret 27. april 2006 av aadnk Lenke til kommentar
Håvard Skrevet 27. april 2006 Forfatter Del Skrevet 27. april 2006 SÅ, det som skulle være et enkelt program, ble plutselig noe veldig avangsert noe? For en nybegynner da.. Lenke til kommentar
Håvard Skrevet 27. april 2006 Forfatter Del Skrevet 27. april 2006 Kom på en ting. Er det en måte å legge programmet til "altid øverst", selvom taskmanager åpnes, eller windows tasten blir trykka inn? Det løser jo også mine problemer... Lenke til kommentar
aadnk Skrevet 27. april 2006 Del Skrevet 27. april 2006 (endret) Det involverer òg API, er jeg redd, men er kan hende ikke fullt så vanskelig: ' API-kallet utfører selve endringenPrivate Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) ' Nødvendige deklarasjoner Const HWND_TOPMOST = -1 Const HWND_NOTOPMOST = -2 Const SWP_NOSIZE = &H1 Const SWP_NOMOVE = &H2 Const SWP_NOACTIVATE = &H10 Const SWP_SHOWWINDOW = &H40 Private Sub Form_Activate() ' Gjør formen til "top most" SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE End Sub Bare lim inn koden ovenfor i formen din, og det skulle fungere. Endret 27. april 2006 av aadnk Lenke til kommentar
Håvard Skrevet 27. april 2006 Forfatter Del Skrevet 27. april 2006 (endret) Jeg risikerer ikke noe ikkefungerende task manager, etter at jeg har lukket programmet da ? EDIT: Får beskjed, om at det er noe feil i dette: Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long Det står: "Only comments may appear after End Sub, End Function, or End Property" Endret 27. april 2006 av Hrisebro Lenke til kommentar
aadnk Skrevet 28. april 2006 Del Skrevet 28. april 2006 (endret) Du må plassere koden HELT øverst i formen, men under Option Explicit om du finner den inkludert. Nei, det gjør du ikke, såfremt du husker å "enable" Task Manager når du lukker programmet (bruk Unload-hendelsen). Endret 28. april 2006 av aadnk Lenke til kommentar
Håvard Skrevet 28. april 2006 Forfatter Del Skrevet 28. april 2006 Jeg skjønner ikke helt jeg. Jeg legger ut koden. Kan du legge det inn, så jeg får se hvordan det skal være? Og, også gjøre, slik at når jeg lukker programmet, så blir taskmanager enabla igjen.. (ja, jeg vet at programmet ikke er veldig sikkert, men det er en start) Lenke til kommentar
aadnk Skrevet 28. april 2006 Del Skrevet 28. april 2006 Øvers vil si øverst i koden ... jeg tror du bør ta en titt på denne guiden. For øvrig, erstatt all kode i formen med følgende: Option Explicit ' API-kallet utfører selve endringen Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) ' Nødvendige deklarasjoner Const HWND_TOPMOST = -1 Const HWND_NOTOPMOST = -2 Const SWP_NOSIZE = &H1 Const SWP_NOMOVE = &H2 Const SWP_NOACTIVATE = &H10 Const SWP_SHOWWINDOW = &H40 Private Sub Form_Activate() ' Gjør formen til "top most" SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE ' Skru av Task Manager EnableTaskManager False End Sub Private Sub Form_Unload(Cancel As Integer) ' Skru på Task Manager EnableTaskManager True End Sub Public Sub EnableTaskManager(bEnable As Boolean) Dim oWshShell As Object ' Initialiser klassen med registerfunksjonene Set oWshShell = CreateObject("WScript.Shell") ' Sett den riktige verdi til policy-nøkkelen oWshShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\" & _ "Policies\System\DisableTaskMgr", IIf(Not bEnable, 1, 0), "REG_DWORD" ' Rydd opp Set oWshShell = Nothing End Sub Private Sub Command1_Click() ' Husk å benytte innrykk - det gjør koden mer oversiktelig If Text1.Text = "passord" Then MsgBox "Du er logget på!" End Else MsgBox "Feil passord!" End If End Sub Jeg vil anbefale at du leser en programmeringsbok om VB 6.0. Det er avgjørende at du forstår de respektive koders plassering og betydning i konteksen. Kort kan jeg nevne at Option-likende koder alltid plasserest helt øverst, for all annen kode. Deretter finner en ofte variabel-, konstant-, enumerings-, UDT- og API-deklarasjoner. Til sist finner en alle prosedyrene (Function, Sub, Property, ect.) Lenke til kommentar
Håvard Skrevet 28. april 2006 Forfatter Del Skrevet 28. april 2006 Må bare få tak i en sånn bok.. Det er på ønskelisten ja.. Lenke til kommentar
Håvard Skrevet 28. april 2006 Forfatter Del Skrevet 28. april 2006 Hmm Limte inn det i koden min, men da ville ikke programmet lukke seg, når jeg trykket logg på, og jeg ble stående der, å måtte restarte.. :| Lenke til kommentar
aadnk Skrevet 28. april 2006 Del Skrevet 28. april 2006 Problemet er at meldingsboksene vil vises bak hele formen fordi de ikke er top most. Bruk en labell i stedet (legg inn en labell med navn lblOutput), og erstatt den nederste delen av koden med dette: Private Sub Command1_Click() ' Husk å benytte innrykk - det gjør koden mer oversiktelig If Text1.Text = "passord" Then Unload Me Else lblOutput = "Feil passord!" End If End Sub Evt. kan du jo bruke API til å gjøre meldingsboksen child av hovedformen, men dette er temmelig unødvendig når det øverste fungerer. Uansett begynner dette programmet å bli langt mer komplisert enn hva en nybegynner kan håndtere. Jeg vil råde deg å prøve på noe lettere først. Det eneste du lærer av dette er CTRL+C og CTRL+V. Lenke til kommentar
Håvard Skrevet 28. april 2006 Forfatter Del Skrevet 28. april 2006 (endret) Tror jeg får tak i en bok i morgen.. Så da blir det lesing.. Men takk for hjelpen da.. EDIT: bare spørre om en rask ting til jeg Unload Me Virker det på samme måte som End, eller må jeg skrive inn end inni der også? Endret 28. april 2006 av Hrisebro Lenke til kommentar
aadnk Skrevet 28. april 2006 Del Skrevet 28. april 2006 (endret) Unload Me Virker det på samme måte som End, eller må jeg skrive inn end inni der også? 6003872[/snapback] Den uinitialiserer formen koden kjøres i. Et program der alle formene er uinitialisert, vil automatisk avslutte seg selv. End bør en ikke benytte, da det avslutter programmet umiddelbart, ofte med fare for å unnlate å rydde opp i minnet eller i det hele kalle Unload-hendelsene. Dette førte til at Task Manager fremdeles var avslått etter at programmet ble avsluttet, selv om en plasserte den riktige koden i Unload. Endret 28. april 2006 av aadnk Lenke til kommentar
Håvard Skrevet 28. april 2006 Forfatter Del Skrevet 28. april 2006 Ok.. Begynner å skjønne litt Lenke til kommentar
Håvard Skrevet 28. april 2006 Forfatter Del Skrevet 28. april 2006 Men nå har jeg et problem. Etter en liten frys i sta, sitter jeg igjen med en deaktivert taskmanager. Kan jeg få litt hjelp? Lenke til kommentar
aadnk Skrevet 28. april 2006 Del Skrevet 28. april 2006 Bare kjør følgende kode i et nytt prosjekt (plasser koden etter Option Explicit): Private Sub Form_Load() ' Skru på Task Manager EnableTaskManager True End Sub Public Sub EnableTaskManager(bEnable As Boolean) Dim oWshShell As Object ' Initialiser klassen med registerfunksjonene Set oWshShell = CreateObject("WScript.Shell") ' Sett den riktige verdi til policy-nøkkelen oWshShell.RegWrite "HKCU\Software\Microsoft\Windows\CurrentVersion\" & _ "Policies\System\DisableTaskMgr", IIf(Not bEnable, 1, 0), "REG_DWORD" ' Rydd opp Set oWshShell = Nothing End Sub Du kan òg gjøre dette manuelt ved å navigere deg frem til den gitte nøkkel og slette den med regedit.exe. Lenke til kommentar
Håvard Skrevet 28. april 2006 Forfatter Del Skrevet 28. april 2006 Takk Var litt kipt å ikke ha taskmanager Men jeg legger prosjektet på is, til jeg lærer litt mer... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå