Что нового

APIScript ActiveX Dll окна на WinAPI

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Пишу компонент для создания окон контролов и прочих функций, зачем?! ну например для использования GUI в VBS, JS и т.д., если кому интересно и не трудно, протестируйте то что уже есть в Win 7/Vista, в XP работает, по крайней мере у меня, заранее благодарен, ну конечно и обсудить можно.

Действия:

1. Извлекаем всё из архива в какую нибудь папку
2. Запускаем DllReg.bat
3. Запускаем ActiveX.au3
 

Police

Новичок
Сообщения
27
Репутация
3
При выходе из программы вылетает такое окно:

Windows 7 (x86)

(Независимо, запущен ли скрипт на выполнение, или скомпилирован)
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Да, такая ошибка возможна, не углублялся ещё сильно, главное что компонент регистрируется в системе и можно пользоваться его методами, самое сложное будет сделать обработку событий окна и его элементов, хотя бы чуть - чуть похожую на AutoIt'овскую, ещё раз большое спасибо.

P.S. Вероятно ошибка из-за PostQuitMessage в скрипте.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
$hForm = $oApi.GUIForm('ActiveX GUI', 400, 300)
$hForm = $oApi^ ERROR
а так у меня.
то есть вообще нет запуска
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
А Dll нормально зарегистрировалась? без ошибок? :scratch:

P.S. Забыл сказать что в Dll нет ни какого кода который может причинить вред, если нужно и исходник могу кинуть, пишу на VB 6.0
 

SECTOR

Продвинутый
Сообщения
399
Репутация
59
У меня работает как надо, без ошибок и вылетов :smile:
Вылетает при нажатии на крестик
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Вообщем похоже выяснил в чём проблема, скорее всего в UAC

Источник: Win 7 и ActiveX
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Viktor1703
может у тебя в библиотеке нет поддержки х64 систем? а то у меня такая. да и контроль учетных записей отключен напрочь )))
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
У меня работает как надо, без ошибок и вылетов
Вылетает при нажатии на крестик

Да эту тему можно пока не затрагивать, делал всё на быструю руку чтоб только компонент протестировать, думаю буду дальше его писать, но уверен на 100% что застопарюсь на функции обработки сообщений окна :smile:

может у тебя в библиотеке нет поддержки х64 систем?

VB 6.0 вроде всё нормально... один и тот же код уже протестировали, и он у кого запускается а у кого нет, в исходнике я уверен, там ни что не может вылететь, хотя что там говорить, с VB 6.0 знаком только 2й день ;D

Наконец-то, вот так регистрировать Dll в системе с правами админа

Код:
#RequireAdmin

If IsObj(ObjCreate('WinAPI.Script')) Then
    Run('regsvr32 /u APIScript.dll')
Else
    Run('regsvr32 APIScript.dll')
EndIf
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Теперь интересует схема создания функции для обработки сообщений окна на подобии

Код:
GUIGetMsg()


по моему это самое сложное, с контролами разберусь, есть у кого нибудь идеи, предложения как такую функцию реализовать?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Viktor1703
Ты уверен что оно того стоит?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Обработчик сообщений мониторит WM_COMMAND, WM_NOTIFY и ряд других сообщений от окна. Далее заносит инфу в удобном формате во внутреннюю очередь сообщений. GUIGetMsg() последовательно извлекает эти сообщения (одно за вызов) из очереди и возвращает соответствующую инфу. Сложность будет в написании именно обработчика сообщений. Собственно, это и есть основа GUI в AutoIt.
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Ты уверен что оно того стоит?

Думаю что да, стоит, для VBS, JS есть уже один Wrapper написанный на C++, но он даёт возможность пользоватся только API функциями, то есть строить GUI придётся самому в самом скрипте, не очень удобно, да и мне это будет в плюс, хочу полностью разобрать работу GUI на WinAPI.

Далее заносит инфу в удобном формате во внутреннюю очередь сообщений.

То есть для этого можно использовать массив?

Сложность будет в написании именно обработчика сообщений

Без сомнений.. , но, в Dll функция окна создаёт форму с системным классом у системного диалога есть свой обработчик WndProc, но можно прикрутить к ниму свой обработчик с помощью _WinAPI_SetWindowLong, не понятно.. при вызове нескольких GUIForm они будут обращатся к одному и тому же WndProc или каждый раз получается новый экземпляр и функция WndProc обрабатывает сообщения только своего окна? :scratch:
 
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Medic84, благодарю, но работа с VB6 пока приостановилась в связи с проблемами получения указателя на функцию :-X
 
Верх