Что нового

как пользоваться WinApi

sasha-ld

Новичок
Сообщения
48
Репутация
0
Здравствуйте!
Для меня больная тема WinApi, я ничего не понимаю, тёмный лес, но очень хочу разобраться, как пользоваться этими функциями.
Вот недавно я спрашивал на форуме "Как программно нажать кнопку Button"
На что я получил вполне конкретный ответ

Код:
$hWnd = GUICreate("My GUI ")
$ButtonTest = GUICtrlCreateButton("Button Test", 10, 10, 100,30)
$ButtonUp = GUICtrlCreateButton("Нажать", 10, 80, 100,30)
$ButtonDown = GUICtrlCreateButton("Отжать",120, 80,100,30)
$hbut = ControlGetHandle($hWnd,"",$ButtonTest)
GUISetState()
$BM_SETSTATE  = 0x000000F3

While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
        ExitLoop
    Case $msg = $ButtonUp
        _SendMessage($hbut, $BM_SETSTATE, True)
    Case $msg = $ButtonDown
        _SendMessage($hbut, $BM_SETSTATE, False)
    EndSelect
WEnd

Спасибо VladUs
Но я не понял откуда взялась $BM_SETSTATE
в справке говорят ищите в библиотеке MSDN
а там вообще не понятно, так же и с
Код:
GetAsyncKeyState

никак не могу разобраться, может кто поможет разложить всё по порядку и объяснить.
Не знаю может я дурак, но мне хочется в это вникнуть.
Спасибо.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
sasha-ld
тема слишком общая для раздела новичков. переношу в общение.
по поводу твоего вопроса
1. все функции очень хорошо документированы в самой библиотеке.
2. к библиотеке WinAPIEx.au3 прилагается обширнейшая справка. по ней и ориентируйся. как обычно, примеры, названия, параметры и прочее.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Zaramot,
Сравните Вашу функцию GetKeyState() с _WinAPI_GetKeyState() из WinAPIEx.au3.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
sasha-ld, любой графический элемент в Windows, будь то кнопка, список, слайдер и т.д., представляют из себя ни что иное, как окна с предустановленными свойствами, внешним видом и поведением. Поэтому Windows и называется Windows. Для того, чтобы можно было как-то управлять всеми этими окнами, придумали механизм сообщений. Таким образом, что бы заставить какое-нибудь окно сделать что-то полезное, ему нужно послать сообщение, которое заставит его (окно) сделать какое-нибудь действие. Для всего этого в Windows существует целый вагон разношерстных сообщений на все случаи жизни, а посылаются окнам эти сообщения в основном функцией SendMessage(). В AutoIt для нее есть обертка в виде функции _SendMessage().

В твоем примере окну (кнопке) посылается сообщение под названием BM_SETSTATE (BM - Button Message), которое заставляет кнопку менять свой внешний вид в зависимости от первого параметра в сообщении (True или False).

Код:
_SendMessage($hbut, $BM_SETSTATE, True)


GetAsyncKeyState() - это просто функция из API Windows. Это такая же функция, как и любые функции в AutoIt, только реализована она в самой Windows, а точнее в файле user32.dll. Почти все функции из WinAPI можно вызвать с помощью AutoIt посредством функции DllCall(). Или воспользоваться многочисленными сторонними библиотеками (UDF), в которых реализованы обертки для системных функций, например WinAPIEx.au3.

Касаемо непосредственно функции GetAsyncKeyState(), она позволяет определить нажата или отпущена интересующая клавиша в момент ее вызова. Т.е., если запихнуть эту функцию в цикл, то можно динамически определять, моменты нажатия и отпущения каких-либо клавиш. Ну а почему у этой функции такой запутанный вызов, тут нужно очень внимательно читать MSDN, и со временем все станет понятным.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Константа $BM_SETSTATE находится в библиотеке ButtonConstants.au3
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
sasha-ld [?]
Для меня больная тема WinApi, я ничего не понимаю
Я тоже очень мало в ней понимаю, так как не хватает базовых знаний. Тем не менее я достаточно часто использую функции API, не всегда понимая, как они работают.
В штатной справке есть раздел WinAPI, к замечательной библиотеке Yashied WinAPIEx тоже есть подробная справка. Если мне интересно как работает и что конкретно делает какая-либо функция, я смотрю код этой функции в соответствующей UDF и ищу ее описание на MSDN Library.
Правда мне это не всегда помогает ее понять, увы. :smile:
 
Автор
S

sasha-ld

Новичок
Сообщения
48
Репутация
0
Спасибо всем кто не прошёл мимо.
Буду читать справки документации, а лучше всего практиковать, так как без практики языки программирования выучить не реально. Щас пробую написать калькулятор. Впринципе ничего сложного, но когда дело доходит до мелочей, тогда начинаешь шевелить извилинами. Всем огромное спасибо, потом выложу что получилось.
:smile:
 
Верх