Access 2013'te çalışıyorum ve başarılı bir şekilde VBA için GetRawInputDeviceList, GetRawInputDeviceInfo, RegisterRawInputDevices ve GetRawInputData eşdeğerlerini almaya çalışıyorum. Bir barkod tarayıcısı seçmek için bilgisayara bağlı HID aygıtlarının bir listesini almak için bir yordam, işlev veya modül için boş yere de aradım. Bu üçüncü haftanın başlangıcıdır, bu yüzden dizlerimde yardım için yalvarıyorum. Herhangi birinizin paylaşmaya hazır olduğunuz bir modülünüz var mı, bununla ilgili bir web sitesine bir bağlantı mı? Herhangi bir yardım büyük beğeni topluyor.VBA ve GetRawInputDeviceList
cevap
VBA'dan GetRawInputDeviceList API'sini kullanmak pRawInputDeviceList parametresi nedeniyle oldukça zor olabilir. Kendi belleğinizi yönetmek ve RAWINPUTDEVICELIST'in ham belleğindeki el ile işlemek için bir ton çemberin içinden atlamak istemediğiniz sürece, başka bir yönden bu konuda daha iyi olursunuz.
Çoğu barkod tarayıcısını, Windows'a bir klavye olarak sunmayı düşünüyorum.
Private Sub ShowKeyboardInfo()
Dim WmiServer As Object
Dim ResultSet As Object
Dim Keyboard As Object
Dim Query As String
Query = "SELECT * From Win32_Keyboard"
Set WmiServer = GetObject("winmgmts:root/CIMV2")
Set ResultSet = WmiServer.ExecQuery(Query)
For Each Keyboard In ResultSet
Debug.Print Keyboard.Name & vbTab & _
Keyboard.Description & vbTab & _
Keyboard.DeviceID & vbTab & _
Keyboard.Status
Next Keyboard
End Sub
Not: Yukarısı açılmıyorsa, sen CIM_USBDevice sorgulayarak USB cihazların tüm numaralandırabilmesidir: Query = "SELECT * From Win32_Keyboard"
DÜZENLEME: Yukarıdaki yorumlar, yukarıdaki kodlar ham giriş olaylarını almak için kaydolmak için gereken tanıtıcıyı döndürmez. Bu, ancak başlamanız gerekir - RegisterRawInputDevices ve GetRawInputData yönleri kolayca bir cevapta gidecek ne kapsamı dışındadır. Bir hack atın ve herhangi bir sorunla karşılaşırsanız kodunuzu başka bir soruya gönderin.
Tanımlamalar: GetRawInputDeviceInfo cihaz isimleri alınmasıyla
Private Type RawInputDeviceList
hDevice As Long
dwType As Long
End Type
Private Type RidKeyboardInfo
cbSize As Long
dwType As Long
dwKeyboardMode As Long
dwNumberOfFunctionKeys As Long
dwNumberOfIndicators As Long
dwNumberOfKeysTotal As Long
End Type
Private Enum DeviceType
TypeMouse = 0
TypeKeyboard = 1
TypeHID = 2
End Enum
Private Enum DeviceCommand
DeviceName = &H20000007
DeviceInfo = &H2000000B
PreParseData = &H20000005
End Enum
Private Declare Function GetRawInputDeviceList Lib "user32" (_
ByVal pRawInputDeviceList As Long, _
ByRef puiNumDevices As Long, _
ByVal cbSize As Long) As Long
Private Declare Function GetRawInputDeviceInfo Lib "user32" Alias "GetRawInputDeviceInfoW" (_
ByVal hDevice As Long, _
ByVal uiCommand As Long, _
ByVal pData As Long, _
ByRef pcbSize As Long) As Long
Private Declare Function GetLastError Lib "kernel32"() As Long
Örnek:
yan kaydırma yaklaşıkPrivate Sub SampleCode()
Dim devices() As RawInputDeviceList
devices = GetRawInputDevices
Dim i As Long
For i = 0 To UBound(devices)
'Inspect the type - only looking for a keyboard.
If devices(i).dwType = TypeKeyboard Then
Dim buffer As String
Dim size As Long
'First call with a null pointer returns the string length in size.
If GetRawInputDeviceInfo(devices(i).hDevice, DeviceName, 0&, size) = -1 Then
Debug.Print "GetRawInputDeviceInfo error " & GetLastError()
Else
'Size the string buffer.
buffer = String(size, Chr$(0))
'The second call copies the name into the passed buffer.
If GetRawInputDeviceInfo(devices(i).hDevice, DeviceName, StrPtr(buffer), size) = -1 Then
Debug.Print "GetRawInputDeviceInfo error " & GetLastError()
Else
Debug.Print buffer
End If
End If
End If
Next i
End Sub
Private Function GetRawInputDevices() As RawInputDeviceList()
Dim devs As Long
Dim output() As RawInputDeviceList
'First call with a null pointer returns the number of devices in devs
If GetRawInputDeviceList(0&, devs, LenB(output(0))) = -1 Then
Debug.Print "GetRawInputDeviceList error " & GetLastError()
Else
'Size the output array.
ReDim output(devs - 1)
'Second call actually fills the array.
If GetRawInputDeviceList(VarPtr(output(0)), devs, LenB(output(0))) = -1 Then
Debug.Print "GetRawInputDeviceList error " & GetLastError()
Else
GetRawInputDevices = output
End If
End If
End Function
yazık ki.
İlk bölüm mükemmel çalıştı. Şimdi çok aptalım; Çözüm kadar basitti. – DevilDawg
Hangi kaynaktan geldiğini tespit etmek için herhangi bir kodunuz olmaz. – DevilDawg
@DevilDawg - Cevaplamak için puan istemeniz veya istemiyorsanız başka bir soru olarak gönderebilirim - Ne geldi? Deviceıd? – Comintern
- 1. Recordset VBA ve C#
- 2. SAS IOM ve VBA
- 3. VBA
- 4. VBA
- 5. VBA
- 6. VBA
- 7. VBA
- 8. VBA
- 9. VBA
- 10. VBA
- 11. VBA
- 12. VBA 6.0 ve VBA 7.0 arasındaki farklar nelerdir?
- 13. VBA
- 14. VBA:
- 15. Vba
- 16. excel vba kodu açık ve kapalı yorumlar
- 17. VBA Sayfadan geçirme ve doğruluğunu kontrol etme
- 18. belgesiz vba özel anahtar Çember ve Ölçek
- 19. VBA IF ve Formül referanslı RC Aralığı
- 20. arasındaki fark nedir? = Ve = Excel'de VBA
- 21. VBA Makro
- 22. Excel VBA
- 23. Vba vlookup,
- 24. VBA kodu
- 25. Access vba
- 26. Excel VBA
- 27. excel-vba
- 28. VBA Maç ve Hata bul: Eşleşen tipi ve Tanımsız Hata
- 29. Veri tablosunu seçme VBA
- 30. birden argüman subs vba
Sadece mevcut olup olmadığını tespit etmeniz gerekiyor mu? Bunu bir WMI sorgusu aracılığıyla gerçekleştirebilirsiniz. – Comintern
Onları bir açılan kutuda listelemek için varlığı tespit etmem gerekiyor ve daha sonra diğer formlarda hangi cihazın metni gönderdiğinin tespit edilmesi gerekiyor. Daha sonra, tarayıcıdan gelen girdinin yazarak yazdığı bir kişinin çok daha hızlı bir hızda olacağı süre kadar zaman harcayacağına inanıyorum. Ben henüz bu yönünü araştırdım ama Comintern için belirttiğim gibi, eğer nasıl cevap verebileceğinizi biliyorsanız, başka bir soru olarak yayınlayabilirim ya da cevaplamak için puan isteyebilirsiniz – DevilDawg