SendInput как нажать ALT+SHIFT ?

Тема в разделе "WASM.BEGINNERS", создана пользователем Semiono, 7 ноя 2011.

  1. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    Код (Text):
    1. include '%fasm%/win64ax.inc'
    2. section '.code' executable
    3. start:
    4.         sub rsp,8
    5.  
    6.         mov [z],$-pInputs
    7.         mov [ki.wVk],VK_TAB+VK_MENU
    8.         invoke Sleep,1000
    9.         invoke SendInput,1,pInputs,[z]
    10. exit:
    11.         invoke ExitProcess,NULL
    12.  
    13.         VK_TAB = 0x0009
    14.         VK_MENU = 0x0012
    15.  
    16. section '.data' readable writeable
    17.  
    18.         z rd MAX_PATH
    19.  
    20. struct KEYBDINPUT
    21.  
    22.         wVk dw ?
    23.         wScan dw ?
    24.         dwFlags dd ?
    25.         time dd ?
    26.         dwExtraInfo dd ?
    27. ends
    28.         ki KEYBDINPUT
    29.  
    30. struct INPUT
    31.  
    32.         mi dd ?
    33.         ki dd ?
    34.         hi dd ?
    35. ends
    36.         pInputs INPUT
    37.  
    38. section '.idata' import readable
    39.  
    40.         library kernel32,'KERNEL32.DLL',user32,'USER32.DLL'
    41.         include '%fasm%/api/kernel32.inc'
    42.         include '%fasm%/api/user32.inc'
    Этот код я полностью написал сам читая мсдн, ничего не понятно, ничего не получается, ну пожалуйста покажите пример?
    Мне же я надеюсь тут не нужен хендл окна, ведь функция не спрашивает? Почему ничего не работает?
    Если на рабочем столе нажать ALT+SHIFT сами знаете что происходит, мне именно это и нужно.

    Каждый раз когда начинаю читать про WM_SYSCOMMAND итд нервы не выдерживают от нагромаждения структур.
     
  2. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Значит программирование в Винде не для вас. Займитесь PHP и прочими адаптированными языками - там с этим проще.

    А ошибка элементарная. Т.к. не думаешь совсем. Писать VK_TAB+VK_MENU можно для битовых полей с флагами. А так у тебя получилось 9+12=1B - это VK_ESC

    ты как и все новички считаешь что на все случаи существует одна волшебная функция, которая делает то, что тебе нужно. Увы это не так. Либо есть готовая библиотека, которую кто-то запрограммировал под себя, либо читать MSDN и кропотливо делать эту библиотеку под себя. И больше думать и меньше спрашивать - быстрее научишься.
     
  3. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    VK_ESC неужели только в этом ошибся! Да всё сказанное идеально подходит для меня :)
    PHP - одним названием пугает)) Однако не моя вина что так обстоит, было бы действительно лучше если бы всё по волшебству получалось, если я бы был гуру, я бы написал макрос: cominvk,VK_TAB+VK_MENU,MB_OK, ха-ха :)
    дауж, извините за эмоции) буду стараться!
     
  4. Semiono

    Semiono Member

    Публикаций:
    0
    Регистрация:
    27 ноя 2005
    Сообщения:
    793
    блин, invoke keybd_event,VK_ESCAPE,NULL,NULL,NULL работает без всякого шаманства,
    почему они пишут что функа устарела, я так и не смог это же самое воспроизвести с SendInput,
    хотя мышь у меня зашевелилась, но с кибордом глухо
    лишь понял по ходу dwFlags dwExtraInfo type надо расширять до кворда (x64)