Что нового

[Элементы GUI] RDP события

hiho

Новичок
Сообщения
16
Репутация
2
Здравствуйте. Никак не могу отловить ни одно события от ActiveX объекта MsTscAx. Пробую так - глухо как в танке.

Код:
Global $Rdp = ObjCreate("MsTscAx.MsTscAx")
$GUIActiveX = GUICtrlCreateObj($Rdp, 0, 0, $width, $height)
ObjEvent($Rdp, "Event_OnConnected")
...

Func Event_OnConnected()
   ...
EndFunc


Никто не сталкивался с подобным?

PS: http://msdn.microsoft.com/en-us/library/aa381829(v=vs.85)#methods
 
Автор
H

hiho

Новичок
Сообщения
16
Репутация
2
Дело в том, что я как раз прочитал и подумал, что предназначена она как раз для этого.
А можно ли тогда как-то отловить событие от RDP клиента?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,487
Скорее всего тебе нужен
Код:
ObjCreateInterface
(в последней версии), посмотри ещё тут.

А если так:

Код:
Global $Rdp = ObjCreate("MsTscAx.MsTscAx")
$oEvent = ObjEvent($Rdp, "Event_", 'IMsTscAxEvents')

...

Func Event_OnConnected()
   ...
EndFunc


?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,487
hiho [?]
с английским я не в ладах
Без этого в программировании будет сложно.

Хотя я английский и понимаю немного, но понять как работать с этой функцией мне тоже не удалось.
 
Автор
H

hiho

Новичок
Сообщения
16
Репутация
2
понять как работать с этой функцией мне тоже не удалось.

Ну тогда будем ждать. Быть может кто-нибудь поможет. Пока придумал проверку на установку соединения, лишь сверяя цвет пикселя из окна RDP
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
Поднимаю тему, мне тоже нужно получать события... :stars:


Добавлено:
Сообщение автоматически объединено:

hiho [?]
лишь сверяя цвет пикселя из окна RDP
Спсасибо за идею, хотяб что -то чем ничего :smile:


Добавлено:
Сообщение автоматически объединено:

Все -же хочется узнать как можно получать события?..
Т.к через пиксели это трудоёмко процессору и требует постоянного вк. окна...
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
UP


Добавлено:
Сообщение автоматически объединено:

OffTopic:

Буду Апать до тех пор, пока не разберусь или кто -нибудь не поможет...
 

Renz

Осваивающий
Сообщения
63
Репутация
37
Функция ObjCreateInterface - создает указатель на объект(интерфейс).
В одном интерфейсе может быть несколько методов, событий.
В Com- объекте может быть несколько интерфейсов.
Например:
Код:
//Shockwave Flash
//Version: 1.0
ShockwaveFlashObjects;
GUID = {D27CDB6B-AE6D-11CF-96B8-444553540000};
........................
Interface ICanHandleException;
GUID = {C5598E60-B307-11D1-B27D-006008C3FBFB};
  function CanHandleException(pExcepInfo: ^EXCEPINFO; pvar: ^Variant): HResult; stdcall;

//***************************
// ВОТ ЗДЕСЬ ИНТЕРФЕЙС СОБЫТИЙ 
//***************************
//Event interface for Shockwave Flash
Dispatch _IShockwaveFlashEvents;
GUID = {D27CDB6D-AE6D-11CF-96B8-444553540000};
  function OnReadyStateChange(out newState: I4); stdcall;
  function OnProgress(out percentDone: I4); stdcall;
  function FSCommand(command: BSTR; args: BSTR); stdcall;
  function FlashCall(request: BSTR); stdcall;

//Shockwave Flash
CoClass ShockwaveFlash;
GUID = {D27CDB6E-AE6D-11CF-96B8-444553540000};

//IFlashFactory Interface
Interface IFlashFactory;
GUID = {D27CDB70-AE6D-11CF-96B8-444553540000};
.......

А вот функция ObjEvent служит как раз для получения события от объекта.

ПОдробнее об устройстве Com- объектов тут: http://www.rsdn.ru/article/com/COMvs.xml#E2C
 

Renz

Осваивающий
Сообщения
63
Репутация
37
Проверял всяко разно . И так и сяк и ж... об косяк. :scratch:
Код:
#include "GUIConstants.au3"

Func Event_OnConnecting()
   MsgBox(0,"","Connect ON")
EndFunc

Global $Rdp = ObjCreate("MsTscAx.MsTscAx")
;~ Global $Rdp = ObjCreate("MsRDP.MsRDP.3")
GUICreate ( "Embedded Web control Test", 640, 580,(@DesktopWidth-640)/2, (@DesktopHeight-580)/2 )
$GUIActiveX = GUICtrlCreateObj($Rdp, 10, 40 , 600 , 360)
GUISetState ()


	
;ren
$Rdp.server = "nameserver"
$Rdp.UserName = "admin"
;~ $Rdp.FullScreen = TRUE
$Rdp.DesktopWidth = "600"
$Rdp.DesktopHeight = "360"
$Rdp.Domain = "OFFICE"
$Rdp.ConnectingText = "Connecting!!!"
$Rdp.AdvancedSettings2.RedirectDrives     = FALSE
$Rdp.AdvancedSettings2.RedirectPrinters   = FALSE
$Rdp.AdvancedSettings2.RedirectPorts      = FALSE
$Rdp.AdvancedSettings2.RedirectSmartCards = FALSE

$SinkObject=ObjEvent($Rdp, "Event_","IMsTscAxEvents")
If @error = 1 Then
	MsgBox(0,"","Don`t set event")
	Exit
Else
	MsgBox(0,"",$SinkObject)
EndIf
$Rdp.Connect

 
;~ Sleep(3000)

While 1
    $msg = GUIGetMsg()
	Select
        Case $msg = $GUI_EVENT_CLOSE
            ExitLoop
    EndSelect
    
Wend

GUIDelete ()
$SinkObject = 0
$Rdp = 0

Exit
AutoIt не отлавливает у этого объекта события, а вот на vbscript ловит, с чем это связано я не разобрался.

Пример взят отсюда: http://www.microsoft.com/en-us/download/details.aspx?id=14531
Работу можно посмотреть здесь:http://renmy.narod2.ru/, открывать через InternetExplorer.
 
Верх