Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Узнать controlID по Handle

Ответить
Настройки темы
Узнать controlID по Handle

Новый участник


Сообщения: 6
Благодарности: 1

Профиль | Отправить PM | Цитировать


Сразу извиняюсь за ламерский вопрос.

Вот есть GUICtrlGetHandle(controlID), по которой можно узнать handle, зная controlID. А как сделать обратно?

Отправлено: 16:33, 13-05-2009

 

Аватара для SyDr

Старожил


Сообщения: 215
Благодарности: 62

Профиль | Отправить PM | Цитировать


А зачем?
При создании элемента возвращается его controlID

-------

"Что мы думаем, знаем или во что верим в конце концов не так уж и важно.
Важно лишь то, что мы делаем."
Джон Раскин


Отправлено: 18:52, 13-05-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 6
Благодарности: 1

Профиль | Отправить PM | Цитировать


Это если юзать GuiCtrlGreate... а _GuiCtrlGreate... (UDF) возвращают handle.

Вот в этом примере $slider2 не будет ловиться.

Код: Выделить весь код
#include <GuiConstantsEx.au3>
#include <GuiSlider.au3>
#include <WindowsConstants.au3>


Example()

Func Example()
	Local $slider1, $button, $msg
	
	$hGUI = GUICreate("(UDF Created) Slider Create", 350, 100)
	$slider1 = GUICtrlCreateSlider(2, 2, 300, 20)
	$slider2 = _GUICtrlSlider_Create($hGUI, 2, 50, 300, 20, BitOR($TBS_TOOLTIPS, $TBS_AUTOTICKS))
	GUISetState()

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $slider1
			MsgBox(0,"","slider1")
		Case $slider2
			MsgBox(0,"","(UDF Created) Slider")
	EndSwitch
WEnd
EndFunc   ;==>Example
Можно использовать GUIGetMsg(1) и $msg[2], но у меня много элементов с controlID, а переделывать не хочется. Легче конвертнуть сабж, еси возможно.

зы. использвал [code] а серавно без подцветки

Отправлено: 20:44, 13-05-2009 | #3


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата san45:
как сделать обратно? »
Код: Выделить весь код
Func _GUICtrlGetID($hWnd)
    Local $aRet = DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", $hWnd)
    Return $aRet[0]
EndFunc
Цитата san45:
использвал [code] а серавно без подцветки »
А кто сказал что оно должно быть с подсветкой? Для этого используется специальная утилита Au3ToPost.

Но с GUIGetMsg оно работать не будет, и не должно, там ControlID серийный, т.е начинается с 10000, и GUIGetMsg его не обрабатывает. Для _GUICtrlSlider_Create используется обработчик сообщении WM_NOTIFY:

Код: Выделить весь код
#include <GuiConstantsEx.au3>
#include <GuiSlider.au3>
#include <WindowsConstants.au3>
;

Global $iSlider_Event = 0

$hGUI = GUICreate("(UDF Created) Slider Create", 350, 100)

$slider1 = GUICtrlCreateSlider(2, 2, 300, 20)
$slider2 = _GUICtrlSlider_Create($hGUI, 2, 50, 300, 20, BitOR($TBS_TOOLTIPS, $TBS_AUTOTICKS))

GUISetState()

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

While 1
    $nMsg = GUIGetMsg()

    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $slider1
            MsgBox(0,"","slider1")
    EndSwitch

    If $iSlider_Event Then
        $iSlider_Event = 0
        MsgBox(0,"","(UDF Created) Slider")
    EndIf
WEnd

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndSlider
    $hWndSlider = $slider2
    If Not IsHWnd($slider2) Then $hWndSlider = GUICtrlGetHandle($slider2)

    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")

    Switch $hWndFrom
        Case $hWndSlider
            Switch $iCode
                Case $NM_RELEASEDCAPTURE ; The control is releasing mouse capture
                    $iSlider_Event = 1
            EndSwitch
    EndSwitch

    Return $GUI_RUNDEFMSG
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 13-05-2009 в 22:35.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:23, 13-05-2009 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Узнать controlID по Handle

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
controlID - когда параметр отсутствует!? semiono AutoIt 3 02-01-2010 22:00
Как узнать? Grub Хочу все знать 2 18-09-2007 14:29
ThreadId -> Handle Andreich Программирование и базы данных 4 06-08-2004 14:31
Как узнать? Mackill Защита компьютерных систем 11 05-05-2003 19:03
Хотелось бы узнать... MF CAP О сайте и форуме 37 16-06-2002 22:04




 
Переход