PDA

Zobrazit plnou verzi : Furt aktivní VB



The_derava_bota
28-05-2007, 17:17
Na tom svém přehrávači mám podporu multimediální klávesnice, normálně sem odchyt číslo klávesy a OK. Jenže jak to mám udělat když přehrávač je neaktivní (ale hraje). Nějakej přídavnej form stále aktivní, to ale nejde. Tak kde ve windows najdu aktivity klávesnice ???

Použít plochu jako form ???

Poraďte.

Devaster
28-05-2007, 21:45
skus pri spusteni hlavneho formu oddelit thread ktory bude monitorovat klavesy aj ked bude hlavny form neaktivny , a potom z hlavneho formu zavolaj v timeri synchro metodu toho threadu ....

ide o stary VB alebo VB.NET ?

The_derava_bota
28-05-2007, 22:40
Jde o Visual studio 6 + sp.

Hmm, tak na to jak oddělit therad se musím podívat ..., voání je mě potom jasný, ikdyž timerem ..., to bude náročný na CPU ...

Devaster
28-05-2007, 23:36
alebo este lepsie riesenie : tvoje separatne vlakno v pripade stlacenia klaves priamo vykona potrebnu akciu ...

The_derava_bota
29-05-2007, 08:14
A to separátní vlákno se bude chovat jako "furt na střehu" ? To by se mohl takhle chovat rovnou ten form když bude aktivní klávesnice.

The_derava_bota
02-06-2007, 18:13
skus pri spusteni hlavneho formu oddelit thread ktory bude monitorovat klavesy aj ked bude hlavny form neaktivny , a potom z hlavneho formu zavolaj v timeri synchro metodu toho threadu ....

ide o stary VB alebo VB.NET ?

Timer ano, ale už "hotový z windows" ...

---------------------------------------------------------------------
Upravil sem kód od fY níže,

---------------------------

'In a form
Private Sub Form_Load()
'KPD-Team 1999
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
Me.Caption = "Key Spy"
'Create an API-timer
SetTimer Me.hwnd, 0, 1, AddressOf TimerProc
End Sub
Private Sub Form_Unload(Cancel As Integer)
'Kill our API-timer
KillTimer Me.hwnd, 0
'Show all the typed keys
End Sub

-------------------------------------------

'In a module

Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer

Public Cnt As Long, Ret As Long, stare As Long
Function GetPressedKey() As Long

For Cnt = 32 To 256 ' 0-32, je tam i myš
'Get the keystate of a specified key
If GetAsyncKeyState(Cnt) <> 0 Then ' písmeno klávesy
GetPressedKey = Cnt ' číslo klávesy
Exit For
End If
Next Cnt

End Function
Sub TimerProc(ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long)

Ret = GetPressedKey

If Ret <> 0 Then
stare = stare + 10 'timerFuc vrací o 10 více, proč to nevím.
If stare <> lpTimerFunc Then
stare = lpTimerFunc
'vrací číslo klávesy po intervalech lpTimerFunc
Debug.Print Ret
End If
End If

End Sub

-------------------------------------


Akorát by mě zajímala ta vracečka od Win, to je nějaká rychlost kláves s možností nastavení ve Windows ???

Devaster
03-06-2007, 15:27
lpTimerFunc je akysi interface ku timeru co bezi vnutri windows jadra . ma to cosi docinenia s pocitani uptime casu ...

dobre riesenie, ak to nie je licencovane niekde to tu zaves do nejakeho vlakna ... :)