Оценка 162 Оценить ![]() ![]() ![]() ![]() ![]() ![]()
|
Q: Юзаю из hta объект winsock, никак не получается перехватить события, может этого вообще нельзя сделать? Один из вариантов на VBA:
set ws=createobject("MSWinsock.Winsock.1")
Sub ws_ConnectionRequest (requestID)
If ws.State <> sckClosed Then ws.Close
ws.Accept requestID
msgbox requestID
EndSub
ws.Protocol=0
ws.LocalPort=8080
ws.Listen
|
Объект создается и на порт цепляется, а вот к событиям прицепиться никак :(
A: Ключевое слово WithEvents при определении ws:
Dim
WithEvents ws As MSWinsock.Winsock
Sub ws_ConnectionRequest ( requestID )
'...EndSub |
Имя метода для перехвата события составляется как ИмяОбъекта_Имя События (ws_ConnectionRequest).
Q: Спасибо, а в JScript это возможно сделать?
A: Вместо функции ActiveXObject() COM объект надо создавать при помощи метода CreateObject() объекта WScript:
var ws = WScript.CreateObject("MSWinsock.Winsock","WS_");
function WS_ConnectionRequest( requestID )
{
// ...
}
|
При возникновении события из JScript будет вызвана функция с названием, составленым из префикса, переданного в CreateObject() (WS_) и имени события (ConnectionRequest).
Аналогично в VBScript, где не поддерживается WithEvents:
Set ws = WScript.CreateObject("MSWinsock.Winsock","WS_")
Sub WS_ConnectionRequest( requestID )
' ...EndSub |
Q: А в JavaScript? Я делаю так:
<object classid="CLSID:xxxxxx" id=TestControl>
</object>
|
в этом ActiveX TestControl есть событие OnExecute. Вот на него надо повесить обработчик.
A: Вот пример htm:
<HTML> <HEAD> <TITLE>ATL 7.0 test page for object CTestEvent</TITLE> <script for="CTestEvent"event="OnSendNotification();"language="JavaScript"> alert("From HTML event handler"); </script> <script language="JavaScript"> function TestMe() { CTestEvent.TestMe(); } </script> </HEAD> <BODY> <button onclick="TestMe();">Connect</button> <br> <OBJECT ID="CTestEvent"CLASSID="CLSID:C60EFBCA-7B1F-4452-A753-3782FA320404"VIEWASTEXT> </OBJECT> </BODY> </HTML> |
и проект тестового ActiveX генерирующего событие OnSendNotification() при вызове его метода TestMe():
STDMETHODIMP CCTestEvent::TestMe(void) { Fire_OnSendNotification(CComBSTR("TestMethod"), CComBSTR("TestParams")); return S_OK; } |
Оценка 162 Оценить ![]() ![]() ![]() ![]() ![]() ![]()
|