powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перевод на VBA
4 сообщений из 4, страница 1 из 1
Перевод на VBA
    #40031660
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго дня господа !

Необходимо использовать SendInput под 64 bit
Нашел код структур но в C++


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
Public Class SendInputs

    Private Const KeyDown As Integer = &H0
    Private Const KeyUp As Integer = &H2

    <DllImport("user32.dll")> _
  Private Shared Function SendInput( _
        ByVal nInputs As Integer, _
        ByVal pInputs() As INPUT, _
        ByVal cbSize As Integer) As Integer
    End Function

    <StructLayout(LayoutKind.Explicit)> _
   Private Structure INPUT
        'Field offset 32 bit machine 4
        '64 bit machine 8
        <FieldOffset(0)> _
        Public type As Integer
        <FieldOffset(8)> _
        Public mi As MOUSEINPUT
        <FieldOffset(8)> _
        Public ki As KEYBDINPUT
        <FieldOffset(8)> _
        Public hi As HARDWAREINPUT
    End Structure

    Private Structure MOUSEINPUT
        Public dx As Integer
        Public dy As Integer
        Public mouseData As Integer
        Public dwFlags As Integer
        Public time As Integer
        Public dwExtraInfo As IntPtr
    End Structure

    Private Structure KEYBDINPUT
        Public wVk As Short
        Public wScan As Short
        Public dwFlags As Integer
        Public time As Integer
        Public dwExtraInfo As IntPtr
    End Structure

    Private Structure HARDWAREINPUT
        Public uMsg As Integer
        Public wParamL As Short
        Public wParamH As Short
    End Structure

      Public Shared Sub SendKey(ByVal key As Char)
        Dim Inpts(1) As INPUT

        'key down
        Inpts(0).type = 1
        Inpts(0).ki.wVk = Convert.ToInt16(CChar(key))
        Inpts(0).ki.dwFlags = KeyDown

        'key up
        Inpts(1).type = 1
        Inpts(1).ki.wVk = Convert.ToInt16(CChar(key))
        Inpts(1).ki.dwFlags = KeyUp

        SendInput(2, Inpts, Marshal.SizeOf(GetType(INPUT)))
    End Sub
End Class



По смыслу код относительно ясен - но вот кусок

<StructLayout(LayoutKind.Explicit)> _
Private Structure INPUT
'Field offset 32 bit machine 4
'64 bit machine 8
<FieldOffset(0)> _
Public type As Integer
<FieldOffset(8)> _
Public mi As MOUSEINPUT
<FieldOffset(8)> _
Public ki As KEYBDINPUT
<FieldOffset(8)> _
Public hi As HARDWAREINPUT
End Structure

<FieldOffset(0)> _
<FieldOffset(8)> _

Проясните логику - если win64
по все поля должно от начала смещаться на иметь 8Б
т.е. вводим ДВА резервных поля Long = 4

Private Type INPUT_TYPE
dwType As Long
dummy1 As Long
dummy2 As Long
mi As MOUSEINPUT
ki As KEYBDINPUT
hi As HARDWAREINPUT
End Type

И как правильно декларировать структуру
каждый НЕОБХОДИМЫЙ тип в отдельности

Private Type INPUT_TYPE
dwType As Long
dummy1 As Long
dummy2 As Long
mi As MOUSEINPUT
End Type

Private Type INPUT_TYPE
dwType As Long
dummy1 As Long
dummy2 As Long
ki As KEYBDINPUT
End Type

Private Type INPUT_TYPE
dwType As Long
dummy1 As Long
dummy2 As Long
hi As HARDWAREINPUT
End Type

Или все три события вместе а инициализировать необходимое

Private Type INPUT_TYPE
dwType As Long
dummy1 As Long
dummy2 As Long
mi As MOUSEINPUT
ki As KEYBDINPUT
hi As HARDWAREINPUT
End Type

Поясните пожалуйста
...
Рейтинг: 0 / 0
Перевод на VBA
    #40031661
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

Понимаю где-то так

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
Описание событий клавиатуры
   Private Type KEYBDINPUT
       wVk As Integer
       wScan As Integer
       dwFlags As LongPtr
       time As LongPtr
       dwExtraInfo As LongPtr
       dummy1 As Long
       dummy2 As Long
   End Type

   Private Type INPUT_TYPE
      dwType As Long
      dummy As Long  
      ki As KEYBDINPUT   'сдвинул на Long*2
   end Type

Описание событий клавиатуры
-------------------------------------------------
    Private Type MOUSEINPUT
        dX As Long
        dY As Long
        mouseData As Long
        dwFlags As Long
        time As LongLong
        dwExtraInfo As LongPtr
    End Type

    Private Type INPUT_TYPE
        dwType As Long
        dummy As Long    
        mi As MOUSEINPUT   'сдвинул на Long*2
    End Type
...
Рейтинг: 0 / 0
Перевод на VBA
    #40031671
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И со второй попытки ты тоже промахнулся мимо раздела по VBA.
Posted via ActualForum NNTP Server 1.5

Модератор: Тема перенесена из форума "C++".
...
Рейтинг: 0 / 0
Перевод на VBA
    #40032655
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Тема решена - вопрос закрыт всем спасибо
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Перевод на VBA
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]