Gå til innhold

Deaktivere taster i program?


Anbefalte innlegg

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
Videoannonse
Annonse

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 av aadnk
Lenke til kommentar

Det involverer òg API, er jeg redd, men er kan hende ikke fullt så vanskelig:

 

' 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

   

End Sub

 

Bare lim inn koden ovenfor i formen din, og det skulle fungere.

Endret av aadnk
Lenke til kommentar

Jeg risikerer ikke noe ikkefungerende task manager, etter at jeg har lukket programmet da :p ?

 

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 av Hrisebro
Lenke til kommentar

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 av aadnk
Lenke til kommentar

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.. :p

 

(ja, jeg vet at programmet ikke er veldig sikkert, men det er en start)

Lenke til kommentar

Ø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

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

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 :blush:

Unload Me

Virker det på samme måte som End, eller må jeg skrive inn end inni der også?

Endret av Hrisebro
Lenke til kommentar
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 av aadnk
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...