|
|
|
WinAPI - перевести код из 32-bit в 64-bit
|
|||
|---|---|---|---|
|
#18+
Доброго дня господа ! Обращаюсь не по теме - но WinApi он един и он ВСЕГДА !!!! А господа дельфисты более глубоко осведомлены Необходимо привести 32-bit код WinAPI (VBA - Excel) к 64-bit WinApi (VBA - Excel) Просмотрел массу сайтов (в том числе и порнографического характера) - не могу добиться результата Основное непонимание в определении размерности типа и выделении памяти Вот первоисточник - логическая суть в блокноте написать слово и нажать Enter Код: 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. 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. 66. 67. 68. 69. 70. Ошибки в неверном описании структуры и выделении памяти, Не смогли бы на WinApi Delphi описать нечто подобное Попытаюсь по результатам перевести код на VB Заранее благодарен ! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2020, 17:35 |
|
||
|
WinAPI - перевести код из 32-bit в 64-bit
|
|||
|---|---|---|---|
|
#18+
https://stackoverflow.com/questions/8962850/sendinput-fails-on-64bit#8963130 Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2020, 17:40 |
|
||
|
WinAPI - перевести код из 32-bit в 64-bit
|
|||
|---|---|---|---|
|
#18+
IntPtr - пробывал аналогичное - не фига В документации рекомендуют LongPtr Если у Вас Office 2016 x 64 попытайтесь Excel -> Alt - F11 -> Insert Module -> Вставить вышеизложенный код -> F5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2020, 19:46 |
|
||
|
WinAPI - перевести код из 32-bit в 64-bit
|
|||
|---|---|---|---|
|
#18+
Microsoft прикольный, в двух редакциях одного и того же ЯП использует несовместимые типы данных с одинаковыми названиями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2020, 21:48 |
|
||
|
WinAPI - перевести код из 32-bit в 64-bit
|
|||
|---|---|---|---|
|
#18+
HOME_X, Код: vbnet 1. Кстати, почему до 31-то, если размер одного указателя увеличивается на 4 байта?.. До 27 же, не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2020, 23:55 |
|
||
|
WinAPI - перевести код из 32-bit в 64-bit
|
|||
|---|---|---|---|
|
#18+
alekcvp Microsoft прикольный, в двух редакциях одного и того же ЯП использует несовместимые типы данных с одинаковыми названиями. Да не однозначно как-то и главное НЕ хочет работать Не смогли бы прояснить зачем используется прием CopyMemory Почему бы не описать изначально необходимый тип и нужным образом не инициализировать прямо в элементах массива Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Но так не работает и под 32 bit Или GENERALINPUT - фиксирован по длине для SendInput ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2020, 23:58 |
|
||
|
WinAPI - перевести код из 32-bit в 64-bit
|
|||
|---|---|---|---|
|
#18+
alekcvp HOME_X, Код: vbnet 1. Кстати, почему до 31-то, если размер одного указателя увеличивается на 4 байта?.. До 27 же, не? Там аналогичный подтип для MOUSE Private Type MOUSEINPUT dx As Long dy As Long mouseData As Long dwFlags As Long time As Long dwExtraInfo As Long -- здесь изменение до 8 б LongPtr End Type Отвечу что изначально пробывал до 27 B - тоже ничего не получилось ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2020, 00:01 |
|
||
|
WinAPI - перевести код из 32-bit в 64-bit
|
|||
|---|---|---|---|
|
#18+
alekcvp HOME_X, Код: vbnet 1. Кстати, почему до 31-то, если размер одного указателя увеличивается на 4 байта?.. До 27 же, не? Изначально зарезервировано 24 элемента это вероятно по максимальной размерности возможного типа Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. Long в подтипе MOUSEINPUT = 4*6 = 24 получается это размер можно взять любой MAX(=100) а CopyMemory ограничит длину и обеспечит перенос данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2020, 00:31 |
|
||
|
WinAPI - перевести код из 32-bit в 64-bit
|
|||
|---|---|---|---|
|
#18+
HOME_X Long в подтипе MOUSEINPUT = 4*6 = 24 Я может чего-то не понимаю, но для x64: 4 * 5 + 8 - у меня упорно получается 28, а не 32... HOME_X получается это размер можно взять любой MAX(=100) а CopyMemory ограничит длину и обеспечит перенос данных Я не знаю как хранятся элементы в массивах VBA. Но что-то мне подсказывает, что при неправильно выбранном xi в этом массиве Код: vbnet 1. поедут поля, т.е. присваивание Код: vbnet 1. запишет данные куда-то в рандомное место. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2020, 13:54 |
|
||
|
WinAPI - перевести код из 32-bit в 64-bit
|
|||
|---|---|---|---|
|
#18+
Посмотри тут в JwaWinUser.pas. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2020, 21:22 |
|
||
|
WinAPI - перевести код из 32-bit в 64-bit
|
|||
|---|---|---|---|
|
#18+
del ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2020, 22:26 |
|
||
|
WinAPI - перевести код из 32-bit в 64-bit
|
|||
|---|---|---|---|
|
#18+
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. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2020, 22:45 |
|
||
|
WinAPI - перевести код из 32-bit в 64-bit
|
|||
|---|---|---|---|
|
#18+
Bred eFeM, А откуда ты взял эту структуру? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Потому что вот здесь ( https://docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-keybdinput ) она описана совершенно иначе (часть про KEYBDINPUT): Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2020, 01:36 |
|
||
|
WinAPI - перевести код из 32-bit в 64-bit
|
|||
|---|---|---|---|
|
#18+
alekcvp Bred eFeM, А откуда ты взял эту структуру? Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Потому что вот здесь ( https://docs.microsoft.com/en-us/windows/win32/api/winuser/ns-winuser-keybdinput ) она описана совершенно иначе (часть про KEYBDINPUT): Код: plaintext 1. 2. 3. 4. 5. 6. 7. судя по всему, сруктура ТС просто развёрнута ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2020, 01:44 |
|
||
|
WinAPI - перевести код из 32-bit в 64-bit
|
|||
|---|---|---|---|
|
#18+
alekcvp , откуда ты взял эту структуру? GENERAL_KEYBDINPUT как-бы намекает, что это уже нужная 'сборка' структур GENERALINPUT и KEYBDINPUT чтобы не делать лишних телодвижений, например, с CopyMemory. Наибольший размер из KEYBDINPUT, HARDWAREINPUT, MOUSEINPUT имеет MOUSEINPUT. Значит GENERALINPUT.xi должен быть не меньше. Но вместо просто массива, размечаем там нужные поля для нашего случая (KEYBDINPUT) и дополнительные - для расширения общей структуры до нужного размера. Правильнее для x64 будет, наверное, так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. и под x32: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. А можно всё это сделать и лаконичнее: Код: vbnet 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2020, 07:14 |
|
||
|
WinAPI - перевести код из 32-bit в 64-bit
|
|||
|---|---|---|---|
|
#18+
Bred eFeM, Код: vbnet 1. 2. 3. time_RoundTo8Byte - почему до 8, если оно везде 4?.. И тогда для KEYBOARD 'dwExtraInfo' должно уехать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2020, 12:21 |
|
||
|
WinAPI - перевести код из 32-bit в 64-bit
|
|||
|---|---|---|---|
|
#18+
alekcvp, Читаю - ищу - пробую ! Спасибо за активное участие господа Вопрос - относительно Африки Нельзя ли из DELPHI (иди используя ИСХОДНИКИ DELPHI) подсмотреть/ОТЛОВИТЬ структуру и размерность типа 64 типа ? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2020, 20:32 |
|
||
|
WinAPI - перевести код из 32-bit в 64-bit
|
|||
|---|---|---|---|
|
#18+
Bred eFeM, Большое Вам спасибо ! Оба варианта прекрасно работают ! Насчет совмещения структур здесь вывод очевиден Насчет time As LongPtr здесь нужно быть жестким экстраСЕКСОМ Нашел еще и китайско - тайваньскую интерпретацию структуры там dwFlags As LongPtr Но как бы не много было китайцев - Ваш вариант работает "Теперь я засну спокойно......" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2020, 05:54 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=40031190&tid=2037753]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 259ms |
| total: | 408ms |

| 0 / 0 |
