Автор Тема: Получение WM_NOTIFY  (Прочитано 732 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Cytrus [?]

  • Новичок
  • *
  • Сообщений: 53
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Получение WM_NOTIFY
« Создано: Март 07, 2018, 09:14:56 »
Не получается получение сообщений WM_NOTIFY.

Код: AutoIt [Выделить]
#include <WindowsConstants.au3>
Global $hw = GUICreate('', 400, 400)
Global $ic = GUICtrlCreateEdit('', 10, 10, 100, 50, BitOr(0x003010c0, 0x00000080))
Global $ia = GUICtrlCreateInput('', 10, 70, 100, 50)
Global $hi = GUICtrlGetHandle($ic)
Global $ha = GUICtrlGetHandle($ia)
GUISetState()
GUIRegisterMsg(0x004E, "WM_NOTIFY")
Do
Until GUIGetMsg() = -3
GUIDelete()



Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
#forceref $hWnd, $iMsg, $wParam
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR = DllStructCreate("struct;hwnd hWndFrom;uint_ptr IDFrom;INT Code;endstruct" & ";int Ind", $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
; MsgBox(0, '$i' & '  ' & $hi, $hWndFrom & @CR & $iCode & @CR & $iIDFrom & @CR & '1')
Switch $hWndFrom
; MsgBox(0, '$i' & '  ' & $hi, $hWndFrom & @CR & $iCode & @CR & $iIDFrom & @CR & '2')
Case $hi
MsgBox(0, '$i' & '  ' & $hi, $hWndFrom & @CR & $iCode & @CR & $iIDFrom & @CR & '3')
Switch $iCode
MsgBox(0, '$i' & '  ' & $hi, $hWndFrom & @CR & $iCode & @CR & $iIDFrom & @CR & '4')
Case $NM_DBLCLK
MsgBox(0, '$i' & '  ' & $hi, $hWndFrom & @CR & $iCode & @CR & $iIDFrom & @CR & '5')
Case $NM_CLICK
MsgBox(0, '$i' & '  ' & $hi, $hWndFrom & @CR & $iCode & @CR & $iIDFrom & @CR & '6')
Case $NM_RETURN
MsgBox(0, '$i' & '  ' & $hi, $hWndFrom & @CR & $iCode & @CR & $iIDFrom & @CR & '7')
EndSwitch
EndSwitch
; Return 'GUI_RUNDEFMSG'
Return
EndFunc
 

« Последнее редактирование: Март 07, 2018, 13:05:24 от Cytrus »

Русское сообщество AutoIt

Получение WM_NOTIFY
« Отправлен: Март 07, 2018, 09:14:56 »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2808
  • Репутация: 473
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Получение WM_NOTIFY
« Ответ #1, Отправлен: Март 07, 2018, 11:48:02 »
Cytrus, если вопрос решен, то полезно было бы оставить и вопрос и решение.
Были времена, когда солнце было ярче, трава зеленее, а водка сорокоградуснее

Оффлайн Cytrus [?]

  • Новичок
  • *
  • Сообщений: 53

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Получение WM_NOTIFY
« Ответ #2, Отправлен: Март 07, 2018, 13:05:51 »
Я поспешил. Вопрос не решён.

Оффлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 407
  • Репутация: 94
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Получение WM_NOTIFY
« Ответ #3, Отправлен: Март 07, 2018, 13:16:28 »
Cytrus, Edit/Input не отправляют WM_NOTIFY. Используйте WM_COMMAND или сабклассинг

Русское сообщество AutoIt

Re: Получение WM_NOTIFY
« Ответ #3 Отправлен: Март 07, 2018, 13:16:28 »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2808
  • Репутация: 473
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Получение WM_NOTIFY
« Ответ #4, Отправлен: Март 07, 2018, 21:00:57 »
Код: AutoIt [Выделить]
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
Global $hw = GUICreate('', 400, 400)
Global $ic = GUICtrlCreateEdit('', 10, 10, 100, 50, BitOr(0x003010c0, 0x00000080))
Global $ia = GUICtrlCreateInput('', 10, 70, 100, 50)
;~ Global $hi = GUICtrlGetHandle($ic)
;~ Global $ha = GUICtrlGetHandle($ia)
GUISetState()
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
Do
Until GUIGetMsg() = -3
GUIDelete()



Func WM_COMMAND($hWnd, $imsg, $iwParam, $ilParam)
    Local $nNotifyCode, $nID
    $nNotifyCode = BitShift($iwParam, 16)
    $nID = BitAND($iwParam, 0xFFFF)
    Switch $hWnd
        Case $hw
            Switch $nNotifyCode
                Case $EN_CHANGE
                    Switch $nID
                        Case $ic
                            ConsoleWrite(GUICtrlRead($ic) & @CRLF)
                        Case $ia
                            ConsoleWrite(GUICtrlRead($ia) & @CRLF)
                    EndSwitch
            EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_COMMAND


Оффлайн Cytrus [?]

  • Новичок
  • *
  • Сообщений: 53

  • Автор темы
  • Репутация: 0
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Получение WM_NOTIFY
« Ответ #5, Отправлен: Март 08, 2018, 11:27:45 »
joiner, а для чего пишется так?

Код: AutoIt [Выделить]
Return $GUI_RUNDEFMSG


Почему не просто так?

Код: AutoIt [Выделить]

Оффлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 407
  • Репутация: 94
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Получение WM_NOTIFY
« Ответ #6, Отправлен: Март 08, 2018, 12:02:10 »
Cytrus, справка примечания GUIRegisterMsg

Русское сообщество AutoIt

Re: Получение WM_NOTIFY
« Ответ #6 Отправлен: Март 08, 2018, 12:02:10 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
3 Ответов
8027 Просмотров
Последний ответ Октябрь 26, 2009, 20:07:53
от Yashied
6 Ответов
5091 Просмотров
Последний ответ Октябрь 09, 2010, 17:28:12
от saavaage
5 Ответов
4181 Просмотров
Последний ответ Сентябрь 27, 2011, 18:25:13
от Yashied
2 Ответов
2929 Просмотров
Последний ответ Январь 06, 2012, 09:30:19
от BaRsupillamy
9 Ответов
3675 Просмотров
Последний ответ Август 08, 2014, 07:46:17
от madmasles
3 Ответов
1022 Просмотров
Последний ответ Август 24, 2014, 13:50:12
от cracker24
5 Ответов
1677 Просмотров
Последний ответ Октябрь 07, 2014, 22:03:44
от saraconor
3 Ответов
1102 Просмотров
Последний ответ Март 17, 2015, 16:49:47
от forc1k
6 Ответов
1320 Просмотров
Последний ответ Сентябрь 13, 2016, 11:47:08
от qqww22
0 Ответов
578 Просмотров
Последний ответ Март 18, 2017, 01:15:16
от nikita1996spb