Научите через WBScript управлять API
От: VelDmi  
Дата: 11.06.06 16:57
Оценка:
http://webfile.ru/986414 по этому адресу расположена справка от программы. Мне нужно использовать API функции этой программы. Но дело в том, что я не программист. Если можно, приведите пример использования какой либо функции, а я, по аналогии, попробую разобраться.

PS Почему именно так: Я попросил написать мне программу, которая бы принимала один параметр комстроки и вызывала одну функцию API. С меня попросили за это 500р. Для меня это очень дорого. Вот, думаю сам разобраться, если мне кто-нибудь добрый поможет. А WBS потому-что там компилировать ничего не надо — написал и запустил.

Спасибо заранее всем кто ответит.
Re: Научите через WBScript управлять API
От: DarkSid Россия  
Дата: 11.06.06 18:50
Оценка:
Здравствуйте, VelDmi, Вы писали:

VD>http://webfile.ru/986414 по этому адресу расположена справка от программы. Мне нужно использовать API функции этой программы. Но дело в том, что я не программист. Если можно, приведите пример использования какой либо функции, а я, по аналогии, попробую разобраться.


VD>PS Почему именно так: Я попросил написать мне программу, которая бы принимала один параметр комстроки и вызывала одну функцию API. С меня попросили за это 500р. Для меня это очень дорого. Вот, думаю сам разобраться, если мне кто-нибудь добрый поможет. А WBS потому-что там компилировать ничего не надо — написал и запустил.


VD>Спасибо заранее всем кто ответит.


Посмотри по ссылке http://msdn.microsoft.com/library/default.asp?url=/library/en-us/modcore/html/decondisplayinghelpbyusinghtmlhelpapi.asp
Re: Научите через WBScript управлять API
От: George Seryakov Россия  
Дата: 11.06.06 20:53
Оценка:
Здравствуйте, 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-объекта кладет в реджистри.
GS
Re[2]: Научите через WBScript управлять API
От: VelDmi  
Дата: 12.06.06 03:35
Оценка:
Здравствуйте, George Seryakov, Вы писали:

GS>Библиотеку типов я бы искал c помощью oleview и/или regedit. Сначала нужно найти исполняемый код (exe или dll), а потом в нем или рядом будет библиотека типов. Oleview делает это в один проход. Подробности см. в какой-нибудь статье про то, что регистрация COM-объекта кладет в реджистри.


http://webfile.ru/986815 выложил еще и саму dll.
Пока читаю ссылки.
Там кстати в хелпе есть "Примеры использования для C, C++, Delphi" в самом начале. Может там описан этот CLSID?
Re[2]: Научите через WBScript управлять API
От: VelDmi  
Дата: 12.06.06 04:57
Оценка:
Здравствуйте, George Seryakov, Вы писали:

GS>Библиотеку типов я бы искал c помощью oleview и/или regedit. Сначала нужно найти исполняемый код (exe или dll), а потом в нем или рядом будет библиотека типов. Oleview делает это в один проход. Подробности см. в какой-нибудь статье про то, что регистрация COM-объекта кладет в реджистри.


Нарыл в реестре:

[HKEY_CLASSES_ROOT\CLSID\{D7346301-B73F-4A94-ABE6-234A0D49521D}]
@="RunpadShell Interface"

[HKEY_CLASSES_ROOT\CLSID\{D7346301-B73F-4A94-ABE6-234A0D49521D}\InprocServer32]
@="D:\\Admin\\RunpadShell\\rs_api.dll"
"ThreadingModel"="Apartment"

Это оно?
Re[3]: Научите через WBScript управлять API
От: George Seryakov Россия  
Дата: 12.06.06 13:05
Оценка:
Здравствуйте, 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, вот ее и нужно постить. Ну, если сам не уяснишь что тебе нужно из ее разглядывания.
GS
Re[2]: Научите через WBScript управлять API
От: ZAMUNDA Земля для жалоб и предложений
Дата: 12.06.06 18:24
Оценка:
Здравствуйте, 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) Козьма Прутков
Re[3]: Научите через WBScript управлять API
От: George Seryakov Россия  
Дата: 12.06.06 18:41
Оценка:
Здравствуйте, 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.

Вот только если не получится, не будешь знать — не то интерфейс не диспатчный, не то не дефолтный, а не то параметры не той системы. Кстати, все заметили в хелпе оговорочку насчет того, что функции не юникодные?
GS
Re[3]: Научите через WBScript управлять API
От: George Seryakov Россия  
Дата: 13.06.06 01:31
Оценка:
Здравствуйте, VelDmi, Вы писали:

VD>http://webfile.ru/986815 выложил еще и саму dll.


Там ProgId при регистрации не устанавливается. В принципе, ничего страшного, самому можно вписать (нужно только помнить, что в два места), проблема в том, что интерфейс не диспатчный, из скрипта вызываться не будет. Это не считая того, что параметры половина по типу не совместима c автоматизацией.

VD>Там кстати в хелпе есть "Примеры использования для C, C++, Delphi" в самом начале. Может там описан этот CLSID?


Учи С++.
GS
Re[4]: Научите через WBScript управлять API
От: ZAMUNDA Земля для жалоб и предложений
Дата: 13.06.06 02:29
Оценка:
Здравствуйте, George Seryakov, Вы писали:

VD>>Там кстати в хелпе есть "Примеры использования для C, C++, Delphi" в самом начале. Может там описан этот CLSID?


GS>Учи С++.

Или Delphi :) ...или чёртподери напиши всё на VB6 -- это проще чем на WS.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Re[4]: Научите через WBScript управлять API
От: VelDmi  
Дата: 13.06.06 03:58
Оценка:
Я пишу небольшие утилитки на 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;

[
uuid({D7346301-B73F-4A94-ABE6-234A0D49521D}),
helpstring("RunpadShell Class")
]
coclass RunpadShell
{
[default] interface IRunpadShell;
};

[
odl,
uuid({0CBC0D60-02DB-434D-99C0-003702C65934}),
helpstring("IRunpadShell Interface")
]
interface IRunpadShell : IUnknown
{

В реестре покопаюсь чуть позже.
Re[5]: Научите через WBScript управлять API
От: George Seryakov Россия  
Дата: 13.06.06 12:55
Оценка:
Здравствуйте, ZAMUNDA, Вы писали:

GS>>Учи С++.

ZAM>Или Delphi ...или чёртподери напиши всё на VB6 -- это проще чем на WS.

Можно попробовать и на Дельфи/ВБ. Проблема в том, что, если сразу не заработает (а шансы на это есть со всеми этими структурами), то придется все подгонять на бинарном уровне COM, что в ВБ можно, но куда затруднительнее.
GS
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.