http://webfile.ru/986414 по этому адресу расположена справка от программы. Мне нужно использовать API функции этой программы. Но дело в том, что я не программист. Если можно, приведите пример использования какой либо функции, а я, по аналогии, попробую разобраться.
PS Почему именно так: Я попросил написать мне программу, которая бы принимала один параметр комстроки и вызывала одну функцию API. С меня попросили за это 500р. Для меня это очень дорого. Вот, думаю сам разобраться, если мне кто-нибудь добрый поможет. А WBS потому-что там компилировать ничего не надо — написал и запустил.
Здравствуйте, VelDmi, Вы писали:
VD>http://webfile.ru/986414 по этому адресу расположена справка от программы. Мне нужно использовать API функции этой программы. Но дело в том, что я не программист. Если можно, приведите пример использования какой либо функции, а я, по аналогии, попробую разобраться.
VD>PS Почему именно так: Я попросил написать мне программу, которая бы принимала один параметр комстроки и вызывала одну функцию API. С меня попросили за это 500р. Для меня это очень дорого. Вот, думаю сам разобраться, если мне кто-нибудь добрый поможет. А WBS потому-что там компилировать ничего не надо — написал и запустил.
VD>Спасибо заранее всем кто ответит.
Здравствуйте, VelDmi, Вы писали:
VD>http://webfile.ru/986414 по этому адресу расположена справка от программы. Мне нужно использовать API функции этой программы. Но дело в том, что я не программист. Если можно, приведите пример использования какой либо функции, а я, по аналогии, попробую разобраться.
Без библитеки типов (tlb — type library) не разобраться. Так, в общем, код может быть такой:
set o = CreateObject(<CLSID>)
s = o.GetShellState()
<CLSID> — строка, идентифицирующая объект. В хелпе не указана. Нужна библиотека типов.
Далее, не всякий COM-сервер можно вызывать из vbs, а только дуальные и диспатчевые. Какой у тебя — можно узнать по библиотеке типов.
Библиотеку типов я бы искал c помощью oleview и/или regedit. Сначала нужно найти исполняемый код (exe или dll), а потом в нем или рядом будет библиотека типов. Oleview делает это в один проход. Подробности см. в какой-нибудь статье про то, что регистрация COM-объекта кладет в реджистри.
Здравствуйте, George Seryakov, Вы писали:
GS>Библиотеку типов я бы искал c помощью oleview и/или regedit. Сначала нужно найти исполняемый код (exe или dll), а потом в нем или рядом будет библиотека типов. Oleview делает это в один проход. Подробности см. в какой-нибудь статье про то, что регистрация COM-объекта кладет в реджистри.
http://webfile.ru/986815 выложил еще и саму dll.
Пока читаю ссылки.
Там кстати в хелпе есть "Примеры использования для C, C++, Delphi" в самом начале. Может там описан этот CLSID?
Здравствуйте, George Seryakov, Вы писали:
GS>Библиотеку типов я бы искал c помощью oleview и/или regedit. Сначала нужно найти исполняемый код (exe или dll), а потом в нем или рядом будет библиотека типов. Oleview делает это в один проход. Подробности см. в какой-нибудь статье про то, что регистрация COM-объекта кладет в реджистри.
Здравствуйте, VelDmi, Вы писали:
GS>>Библиотеку типов я бы искал c помощью oleview и/или regedit. Сначала нужно найти исполняемый код (exe или dll), а потом в нем или рядом будет библиотека типов. Oleview делает это в один проход. Подробности см. в какой-нибудь статье про то, что регистрация COM-объекта кладет в реджистри.
VD>[HKEY_CLASSES_ROOT\CLSID\{D7346301-B73F-4A94-ABE6-234A0D49521D}] VD>@="RunpadShell Interface"
Ок. Классайди у нас есть.
У меня, кстати, ошибочка была, в скриптах нужно создавать объекты по прогайди, они для этого и придуманы.
VD>[HKEY_CLASSES_ROOT\CLSID\{D7346301-B73F-4A94-ABE6-234A0D49521D}\InprocServer32] VD>@="D:\\Admin\\RunpadShell\\rs_api.dll" VD>Это оно?
Очень может быть. Запусти OleView и попробуй открыть эту длл как если б это была библиотека типов, она скорее всего в лдд влинкована. OleView тебе покажет библиотеку типов, декомпилированную в IDL, вот ее и нужно постить. Ну, если сам не уяснишь что тебе нужно из ее разглядывания.
Здравствуйте, George Seryakov, Вы писали:
GS>Здравствуйте, VelDmi, Вы писали:
VD>>http://webfile.ru/986414 по этому адресу расположена справка от программы. Мне нужно использовать API функции этой программы. Но дело в том, что я не программист. Если можно, приведите пример использования какой либо функции, а я, по аналогии, попробую разобраться.
GS>Без библитеки типов (tlb — type library) не разобраться. Так, в общем, код может быть такой:
GS>
GS>set o = CreateObject(<CLSID>)
GS>s = o.GetShellState()
GS>
GS><CLSID> — строка, идентифицирующая объект. В хелпе не указана. Нужна библиотека типов.
CLSID -- это 128-битная (32-байтная) структура описывающая объект, которую ещё можно строкой вида "{########-####-####-####-############}" представить. А вот CreateObject принимает ProgId, можете убедиться в этом сами (цитата MSDN):
Creates a COM object.
object.CreateObject(strProgID[,strPrefix])
Arguments
object
WScript object.
strProgID
String value indicating the programmatic identifier (ProgID) of the object you want to create.
strPrefix
Optional. String value indicating the function prefix.
ProgId имеет вид "<имя TypeLib'а>.<имя CoClass'а>"
ProgId в реестре записан по адресу HKEY_CLASSES_ROOT\CLSID\{UUID (он же GUID) TypeLib'а вместе с фигурными скобками}\ProgID\(Default).
Кстати в хелпнике, который по ссылке в первой мессаге имееЦЦа, есть указание что интерфейс называется IRunpadShell. Можно в реестре поискать значение "IRunpadShell" (значение имеется ввиду искать только 'Data') и наткнуться на адрес типа HKEY_CLASSES_ROOT\Interface\{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}, а потом можна зайти на адрес <найденный адрес>\TypeLib скопировать оттуда значение (Default) и поискать ключ с таким названием; в ём , как я уже и сказал выше, отыщешь ProgID.
GS>Далее, не всякий COM-сервер можно вызывать из vbs, а только дуальные и диспатчевые. Какой у тебя — можно узнать по библиотеке типов.
А можно просто попробовать его создать, через CreateObject. А можно попробовать написать wsf (в форуме недавно пример появлялся... поищи). Без сарказма -- правда правда незнаю заработает-ли.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Здравствуйте, ZAMUNDA, Вы писали:
GS>><CLSID> — строка, идентифицирующая объект. В хелпе не указана. Нужна библиотека типов.
ZAM>CLSID -- это 128-битная (32-байтная) структура описывающая объект, которую ещё можно строкой вида "{########-####-####-####-############}" представить. А вот CreateObject принимает ProgId, можете убедиться в этом сами (цитата MSDN):
Да, признаю, ошибочка вышла, привык, что в CComPtr можно вперемежку ставить что прог, что классайди, вот что-то такое про CreateObject померещилось
ZAM>Кстати в хелпнике, который по ссылке в первой мессаге имееЦЦа, есть указание что интерфейс называется IRunpadShell. Можно в реестре поискать значение "IRunpadShell" (значение имеется ввиду искать только 'Data') и наткнуться на адрес типа HKEY_CLASSES_ROOT\Interface\{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}, а потом можна зайти на адрес <найденный адрес>\TypeLib скопировать оттуда значение (Default) и поискать ключ с таким названием; в ём , как я уже и сказал выше, отыщешь ProgID.
И это, пожалуй, правильно, поскольку в библиотеке типов прогайди не пишут, оно может быть в регистрационном скрипте в экзешнике (и длл-нике), влинкованном, но совершенно не обязательно.
GS>>Далее, не всякий COM-сервер можно вызывать из vbs, а только дуальные и диспатчевые. Какой у тебя — можно узнать по библиотеке типов. ZAM>А можно просто попробовать его создать, через CreateObject.
Вот только если не получится, не будешь знать — не то интерфейс не диспатчный, не то не дефолтный, а не то параметры не той системы. Кстати, все заметили в хелпе оговорочку насчет того, что функции не юникодные?
Там ProgId при регистрации не устанавливается. В принципе, ничего страшного, самому можно вписать (нужно только помнить, что в два места), проблема в том, что интерфейс не диспатчный, из скрипта вызываться не будет. Это не считая того, что параметры половина по типу не совместима c автоматизацией.
VD>Там кстати в хелпе есть "Примеры использования для C, C++, Delphi" в самом начале. Может там описан этот CLSID?
Здравствуйте, George Seryakov, Вы писали:
VD>>Там кстати в хелпе есть "Примеры использования для C, C++, Delphi" в самом начале. Может там описан этот CLSID?
GS>Учи С++.
Или Delphi :) ...или чёртподери напиши всё на VB6 -- это проще чем на WS.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Я пишу небольшие утилитки на AutoIt. Возможности их малы, работа с файлами, с реестром и пр. Один раз, когда мне понадобилось сменить имя компьютера я воспользовался vbs (AutoIt этого не может). Я прямо из своей утилитки создал .vbs файл, подставив необходимые мне переменные и запустил его. Все работает. Именно поэтому я написал сюда. Думал, что мне помогут только вызвать эту API, а остальное я доделаю на AutoIt. Оказывается все не так просто. Поэтому:
1. Есть ли смысл пытаться использовать VBS (получится ли?) или набраться наглости и попросить в форуме по С++ помощи по написанию нужного мне кода? Вызвать 1-2 функции и все. Плюс меня же нужно еще научить компилить в EXE.
2. Если можно использовать VBS, пожалуйста, дайте план действий сделай то-то, потом то-то. Вот что я нарыл в dll (http://webfile.ru/988056) начало, такое:
// Generated .IDL/C++ pseudo source equivalent of Win32 type library ..\<Unknown>
[
uuid({02988454-DBAC-48B9-A8A2-85AEE4E2486F}),
version(1.0),
helpstring("RS_API 1.0 Type Library")
]
library RS_APILib
{
// Forward references and typedefs
interface IRunpadShell;
Здравствуйте, ZAMUNDA, Вы писали:
GS>>Учи С++. ZAM>Или Delphi ...или чёртподери напиши всё на VB6 -- это проще чем на WS.
Можно попробовать и на Дельфи/ВБ. Проблема в том, что, если сразу не заработает (а шансы на это есть со всеми этими структурами), то придется все подгонять на бинарном уровне COM, что в ВБ можно, но куда затруднительнее.