Вызов функций Windows API из AutoLISP - Страница 3
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Вызов функций Windows API из AutoLISP

Вызов функций Windows API из AutoLISP

Ответ
Поиск в этой теме
Непрочитано 28.11.2008, 21:39
Вызов функций Windows API из AutoLISP
Supermax
 
Руководитель фирмы
 
Москва
Регистрация: 28.03.2007
Сообщений: 1,831

Оказывается, что функции Windows API, экспортируемые библиотеками DLL можно вызывать и из AutoLISP-a.

Для начала надо установить СОМ объект DynamicWrapperX

http://forum.script-coding.info/viewtopic.php?id=2214

Все хелпы там.


Список API-функций DLL можно посмотреть так:

http://forum.script-coding.info/viewtopic.php?id=2457

Надо? Могу на AutoLISP перегнать.
Просмотров: 9657
 
Автор темы   Непрочитано 13.12.2008, 10:47
#41
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Да не нужем мне список окон, мне конкретное окно нужно,в редакторе Автолиспа. Не рамочное (дайте повыпендриваться), а дочернее, где лисп редактируется. Хочу туда из DLL тексты функций вставлять.
Вот сижу и перебираю все Windows API в поисках нужных функций. Стал через EnumWindows указатели смотреть, заодно глюки в лиспе из #37 решил подправить и призадумался на часок, который до сих пор продолжается.
И какая разница из какого языка этими WinAPI пользоваться? Они же трансязыковые. Все равно, чтобы найти нужное окно, активировать его (если оно не активно) и т.д. и т.п. голыми пальцами это не сделать.
Это проще всего, "сидеть на заборе" и кричать человеку, который что-то пытается сделать, но не получается - "Да брось ты!"; "Да оно тебе надо?"; "Вот нашел себе гиморрой!" и т.п. вместо того, чтобы взять и просто помочь.
Supermax вне форума  
 
Непрочитано 13.12.2008, 11:20
#42
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Это проще всего, "сидеть на заборе" и кричать человеку, который что-то пытается сделать, но не получается - "Да брось ты!"; "Да оно тебе надо?"; "Вот нашел себе гиморрой!" и т.п. вместо того, чтобы взять и просто помочь.
Сидят на заборе и видят, как человек бьется об него головой, пытаясь пройти. Хотя рядом распахнутые настежь ворота, через которые все спокойно и идут. Естественно, советуют - "Да брось ты! Заходи в ворота!" Но человек предпочитает действовать по принципу мухи, бьющейся башкой об стекло. Ей кажется, что вот он, выход.
ShaggyDoc вне форума  
 
Автор темы   Непрочитано 13.12.2008, 14:33
#43
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


А где доказательства? Где ваши ворота? Где повествования, как и что надо сделать, чтобы добиться того-то и того-то?
Да, предположим я слеп. Вместо того, чтобы сказать мне "правее на столько-то" или левее вы констатируете все время факт - "ага!, опять не попал".
Интересный однако факт. Вы ShaggyDoc, разделяете то убеждение, что VBA в Автокаде - "бородавка" на его теле. Я читал ваши посты на эту тему. Но в VBA есть доступ к использованию функций Windows API. А когда кто-то (не я придумал DynamicWrapperX, да и YMP, на сколько мне известно только свой вариант сделал, уже ранее придуманного) пытается уравнять возможности языка, вы это квалифицируете, как слепоту и ударение лбом в забор.

Я давно хотел вас спросить, а не могли бы вы сами написать такой СОМ объект и его подарить всем желающим? Ведь вам, как мне это известно, такое по зубам.

Может вы подскажете, как к дочернему окну через WinAPI добраться?
Не через WinAPI, так через что? Этот же вопрос интересует не только меня, и не только для Автокада.

Такие посты, как #39, #40, #42 и т.п. писать легко. Я тоже могу и очень хорошо умею "наводить тень на плетень".

Последний раз редактировалось Supermax, 13.12.2008 в 18:47.
Supermax вне форума  
 
Непрочитано 13.12.2008, 18:54
#44
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Для того, чтобы открыть такие "секреты" ("повествования, как и что надо сделать") я специально написал книгу "САПР на базе AutoCAD - как это делается". Там достаточно примеров. В том числе вызов WinAPI и через ObjectARX, и через COM.

Доказывать что существуют "ворота" и излагать основы программирования в индивидуальном порядке, такому чрезвычайно самоуверенному "руководителю фирмы" у меня нет никакого желания. Садись за азбуку самостоятельно.
ShaggyDoc вне форума  
 
Непрочитано 13.12.2008, 21:12
#45
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Supermax, а вот я (хотя и пьян прилично) выскажусь. Список окон в реальной жизни нужен как зайцу стоп-сигнал. Окно редактора может быть элементарно не запущено - ты об этом не думал?
Если тебе так уж невтерпеж работать с WinAPI - делай собственную dll, требуй ее регистрации в системе и работай дальше как с обычным СОМ-объектом. Примеров такой работы через VisualLISP - как у дурака фантиков - достаточно задать поиск по слову "get-or-create-object" (префикс не помню, а AutoCAD запускать лениво).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 17.12.2008, 12:33
#46
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


ShaggyDoc,
Цитата:
Для того, чтобы открыть такие "секреты" ("повествования, как и что надо сделать") я специально написал книгу "САПР на базе AutoCAD - как это делается". Там достаточно примеров. В том числе вызов WinAPI и через ObjectARX, и через COM.
Через ObjectARX это не через AutoLISP, а через СОМ - какая страница?

Цитата:
Доказывать что существуют "ворота" и излагать основы программирования в индивидуальном порядке, такому чрезвычайно самоуверенному "руководителю фирмы" у меня нет никакого желания. Садись за азбуку самостоятельно.
Ну, для себя лично, я ликбез и тем более по основам не просил. Уверенность в себе мне всегда нужна, но только для продвижения к конкретной цели. Я специально написал в информации о себе, что я руководитель фирмы, чтобы не приставали ко мне с частными заказами. Windows API - не азбука. С и С++ штудирую с утра до вечера и пока книжек мне достаточно.

Кулик Алексей aka kpblc, список окон мне (хоть я и трезв всегда) "ни за деньги не надь, ни даром не надь". Окно редактора не может быть не запущено, поскольку я уже в нем и из него пытаюсь определить его указатель.
Про dll - ты предлагаешь мне написать свой СОМ для вызова функций Windows API? А то, что это уже сделал YMP с Серого форума не подойдет?

Вернусь к проблеме, которая меня сейчас волнует. Не желающих мне помочь (хотя бы советом), просьба не беспокоить.

Как известно, я не сторонник чистого лиспа. Очень часто применяю смешенный вариант написания программ, в частности VBScript+AutoLISP.
Только такой сцепкой мне удалось реализовать работу с HTМL файлами и с созданием реактора объекта, который сам себя редактирует.
Сейчас вот Windows API зацепил, и вообще, все функции из DLL-файлов. То, что у меня нет пока инструмента для создания структур, массивов, классов, объединений и пр. низкоуровневой лабуды, для полноценной работы с функциями из DLL - не беда. Скоро будет. Но есть одна проблема не языкового уровня.
Как пример, я взял функцию EnumWindows. Только как пример! Пост #38.

Мне надо в середине процесса выполнения лисп-программы выходить из нее, освобождая доступ к командной строке и возвращаться обратно, в то место,из которого я программу покинул.

YMP, если ты читаешь эту тему. Все, абсолютно все экспортированные функции из DLL должны иметь один необязательный аргумент - указатель на функцию. В случае с такими функциями, как EnumWindows, получится два указателя на функцию. Один для EnumWindows, а второй - если он есть, то по окончании выполнения функции, экспортированной из DLL, выполняется эта функция. Только так я могу узнать, что работа низкоуровневой функции закончилась и можно продолжать выполнение высокоуровневой задачи.

Понимаешь, мне, получается, надо останавливать работу автолиспа и ждать окончания работы низкоуровневой функции. А она,зараза, долго может работать. По многу раз она свои лисп-выражения запускает и только когда все окна перелопатит - дает знать, что работа окончена, вот тут и надо запустить вторую функцию, которая даст мне возможность продолжить прерванный процесс. Ей, никакие аргументы передавать не надо. Просто запускать, по окончании работы низкоуровневой функции (той, которая экспортирована).
По поводу признака продолжения работы (см. пост #38) - тоже надо.
Supermax вне форума  
 
Непрочитано 17.12.2008, 23:17
#47
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,404


Supermax, ты зря обижаешься - я днюху праздновал. Свою днюху.
Теперь
Цитата:
ты предлагаешь мне написать свой СОМ для вызова функций Windows API?
Да
Цитата:
А то, что это уже сделал YMP с Серого форума не подойдет?
Лично мне - нет. Я просто поостерегся бы использовать достаточно опасный инструмент, написанный не мной. Думаешь, почему я стал лиспом заниматься?
Ладно, это лирика была. Теперь по делу.
Я сильно подозреваю (подозреваю, т.к. ни один из примеров не запускал; в коде "обертки" не копался и не собираюсь - даже если он открыт), что "остановить" выполнение API-шной функции "где-то посередке" невозможно. Ну или самостоятельно полностью перерабатывать API.
Засим откланиваюсь - все равно нить рассуждений для меня в состоянии "и не находил".
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.12.2008, 12:13
#48
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


А я и не обижаюсь, с чего это ты взял?
Да кто бы ни написал "обертку" и открыл код, копаться в чужом - полный мрак. Правда если с пояснениями, да еще в теме, с обсуждениями и спорами - другой базар. Даже интересно и познавательно.
Я не Windows API намерен останавливать, а процесс лиспа. Читай внимательнее.
Да что мы все время цепляемся к Windows API? "Обертка" дает возможность пользоваться экспортируемыми функциями DLL. Любых DLL, даже тех, которые ты написал сам. А что можно написать, зная, что это будет использовано в Автолиспе? Думаю очень много всего.
Делать "обертку" на каждую, нужную функцию, да еще в СОМ ее интегрировать не так, как это в DynamicWrapperX реализовано, а скажем намертво вбивая обращение к ней специальным методом - фигня.

Но меня по прежнему волнует глобальный вопрос - это хорошо или плохо, когда высокоуровневый язык получает доступ к низкоуровневым операциям, с помощью низкоуровневых функций и СОМ объектов?

Вся эта тема создана только для того, чтобы выяснить отношение публики к вышеупомянутому вопросу.
Supermax вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Вызов функций Windows API из AutoLISP



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка нажатия CTRL в LISP в фоновом режиме(не grread) BH LISP 10 22.08.2006 22:23
Программеры, где моя ошибочка? {Smirnoff} Программирование 11 01.03.2004 11:08