Avatar billede nummer8 Nybegynder
29. april 2004 - 11:18 Der er 13 kommentarer og
2 løsninger

Nogen som kan få det her til at virke??

Jeg har sat den til at starte i Sub main som vejlednigen siger man skal men den kommer med en fejl: "Must have startup form or Sub main()"

http://vbnet.mvps.org/index.html?code/hooks/lowlevelkeyboardproc.htm
Avatar billede martin_moth Mester
29. april 2004 - 11:32 #1
Har du en sub der hedder main?
Har du en form?
I hvilken linie kommer fejlen?
Avatar billede martin_moth Mester
29. april 2004 - 11:33 #2
Glem spørgsmål nr. 2...
Og 1....
Avatar billede bennytordrup Nybegynder
29. april 2004 - 12:08 #3
Eksemplet viser bare en MsgBox i det øjeblik, hooken er installeret korrekt. Lige så snart, der er trykket på OK i den, fjernes hooken igen, og programmet afsluttes.

Prøv at ændre sub main til følgende:

Public Sub Main()

  'set and obtain the handle to the keyboard hook
  m_hDllKbdHook = SetWindowsHookEx(WH_KEYBOARD_LL, _
                                  AddressOf LowLevelKeyboardProc, _
                                  App.hInstance, _
                                  0&)
 
  If m_hDllKbdHook <> 0 Then
 
    'It's hooked! Show a messagebox
    'to temporarily suspend the app here
    '(the LowLevelKeyboardProc will continue
    'to process messages), and follow the
    'messagebox, for this demo, with the
    'unhook call. See the text above for
    'specific information.
      MsgBox "Ctrl+Esc, Alt+Tab and Alt+Esc are blocked. " & _
            "Click OK to quit and re-enable the keys.", _
            vbOKOnly Or vbInformation, _
            "Keyboard Hook Active"
   
        Form1.Show
       
'    'Placement for this demo only.
'    'Move to the unload event of the
'    'main form when used in an application.
'      Call UnhookWindowsHookEx(m_hDllKbdHook)
     
  Else
     
      MsgBox "Failed to install low-level keyboard hook - " & Err.LastDllError

  End If
 
End Sub

Derudover tilføjer du følgende:

Public Function UnHookMe()
    'Placement for this demo only.
    'Move to the unload event of the
    'main form when used in an application.
      Call UnhookWindowsHookEx(m_hDllKbdHook)

End Function



denne UnHookMe SKAL du sørge for at kalde i Form1_Unload.

Når dit program (form1) kører, er Ctrl+Esc, Alt+Esc og Alt+Tab blokeret af dit program (hvilket du kan se i Immediate vinduet i VB).
Avatar billede nummer8 Nybegynder
29. april 2004 - 12:17 #4
Har ændret Sub Main til det du siger....men det er jo ikke det der er problemet...

Problemet er at jeg ikke kan starte programmet. Når jeg trykker F5 eller prøver på at gemme som en .exe fil siger den "Must have startup form or Sub main()"!?

Hvad skal jeg gøre ved det??
Avatar billede bennytordrup Nybegynder
29. april 2004 - 12:23 #5
Luk dit projekt ned og luk vbp-filen op med notapad. Indholdet af min er følgende (sammenlign med din):


Type=Exe
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\WINDOWS\system32\stdole2.tlb#OLE Automation
Form=Form1.frm
Module=Module1; Module1.bas
Startup="Sub Main"
HelpFile=""
Command32=""
Name="Project1"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
VersionCompanyName="FK-DATA A/S"
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
Retained=0
ThreadPerObject=0
MaxNumberOfThreads=1
Avatar billede nummer8 Nybegynder
29. april 2004 - 12:30 #6
Type=Exe
Form=Form2.frm
Reference=*\G{00020430-0000-0000-C000-000000000046}#2.0#0#..\..\..\..\WINDOWS\System32\stdole2.tlb#OLE Automation
IconForm="Form1"
Startup="Sub Main"
HelpFile=""
ExeName32="Project2.exe"
Command32=""
Name="Project1"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0
ServerSupportFiles=0
VersionCompanyName="It skolen"
CompilationType=-1
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
Retained=0
ThreadPerObject=0
MaxNumberOfThreads=1

Det er næsten kun CompilationType der er forskel på.
Avatar billede bennytordrup Nybegynder
29. april 2004 - 12:32 #7
Er SubMain public?

Hvor er modulet med Hook-procedurerne?
Avatar billede nummer8 Nybegynder
29. april 2004 - 12:39 #8
Jeg har ikke ændret andet i koden end det du foreslog.
Avatar billede bennytordrup Nybegynder
29. april 2004 - 12:54 #9
Nej, men din projektfil indeholder ikke noget modul (og eksemplet virker i mit tilfælde ved anvendelsen af et modul).

Jeg er ikke sikker på, at det vil virke, hvis du lægger det i formens kode-modul.
Avatar billede nummer8 Nybegynder
29. april 2004 - 13:01 #10
Hvad er et modul?
Avatar billede bennytordrup Nybegynder
29. april 2004 - 13:41 #11
En .bas fil
Avatar billede nummer8 Nybegynder
29. april 2004 - 13:44 #12
Hvordan anvender jeg så et modul?
Avatar billede bennytordrup Nybegynder
29. april 2004 - 13:45 #13
Du tilføjer det simpelthen til projektet, hvorefter du kan bruge subs og functions, der har foranstillet Public overalt i dit projekt.
Avatar billede nummer8 Nybegynder
29. april 2004 - 13:56 #14
Woohoo... deet virker!! :D

Point til dig :P
Avatar billede martin_moth Mester
29. april 2004 - 14:57 #15
Nu er det jo nemt at være bagklog, men der står en linie - endda med fed - i linket, med en brugsanvisning for koden:

Set your application start up object as Sub Main (under Project / Properties), and place the following code into the general declarations area of a BAS MODULE:

Du havde åbentbart læst første halvdel af sætningen, men ikke den sidste...

:o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester