Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.04.17;
Скачать: [xml.tar.bz2];

Вниз

Разработка и модификация компонентов   Найти похожие ветки 

 
Pcrepair ©   (2011-01-15 17:56) [0]

Исходные данные:
1. Есть mstscax.dll (от WINXPSP3), из ДЛЛ делается модуль MSTSCLib_TLB.pas (содержит  классы нескольких РДП-клиентов), из модуля делается упаковщик ms_rdp.bpl
2. На основе полученного АктивХ компонента очень просто сделать собственый РДП-клиент, код:
procedure TForm1.Button1Click(Sender: TObject);
begin
 MsRdpClient61.Connect;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 MsRdpClient61.Disconnect;
end;

при необходимости можно управлять параметрами подключения через свойства компонента TMsRdpClient6, компонент обеспечивает вывод видео и ввод данных с мыши и клавиатуры

Есть несколько вопросов для тех кто знает
1. Является ли полученный при компиляции файл.ехе полностью самостоятельным, или он использует в процессе подключения к удаленному компьютеру mstscax.dll
2. В листинге кода модуля MSTSCLib_TLB.pas можно найти свойства, процедуры и функции. Но совершенно неясно каким образом происходит подключение, установка параметров подключения. Неясно как модифицировать код модуля и соответственно компонент чтобы придать ему дополнительные возможности


 
Игорь Шевченко ©   (2011-01-15 18:23) [1]


> 1. Является ли полученный при компиляции файл.ехе полностью
> самостоятельным, или он использует в процессе подключения
> к удаленному компьютеру mstscax.dll


использует


> 2. В листинге кода модуля MSTSCLib_TLB.pas можно найти свойства,
>  процедуры и функции. Но совершенно неясно каким образом
> происходит подключение, установка параметров подключения.
>  Неясно как модифицировать код модуля и соответственно компонент
> чтобы придать ему дополнительные возможности


подключение происходит через COM, модифицировать TLB никак, потому что этот модуль служит только для описания связи с COM-сервером, в данном случае mstscax.dll.


 
Pcrepair ©   (2011-01-15 18:39) [2]

и все таки в TLB есть какие то способы вывода видеопотока в форму и ввода данных с мыши и клавы
мне вообще нужно управление именно этим


 
DiamondShark ©   (2011-01-16 10:48) [3]


> и все таки в TLB есть какие то способы вывода видеопотока
> в форму и ввода данных с мыши и клавы

Ничего подобного в TLB нет, в TLB есть только декларации свойств и методов ActiveX-компонента.


 
Pcrepair ©   (2011-01-16 10:58) [4]

Есть ms_rdp.bpl а в нем есть компонент ТMsRdpClient6, все это результат компиляции MSTSCLib_TLB.pas, в свою очередь ТMsRdpClient6 имеет окно в которое выводиться видеопоток и через которое вводятся данные (клавиатура и мышь)
мне нужно понять как запретить разрешить ввод-вывод, где то в ТMsRdpClient6 это должно же быть, некий код который это все делает?


 
DiamondShark ©   (2011-01-16 18:56) [5]


> где то в ТMsRdpClient6 это должно же быть

В ТMsRdpClient6 ничего этого нет. ТMsRdpClient6 -- это только оболочка для АктивХ объекта, тонкая прослойка для стыковки среды Дельфи с библиотекой АктивХ объекта.

Окно, видеопоток, реакция на мышь и клавиатуру -- вообще весь сколь-нибудь содержательный код находится в библиотеке АктивХ объекта -- в mstscax.dll.

Что-либо сделать с этим объектом можно только через интерфейсы, которые он предоставляет. Смотри документацию:

http://msdn.microsoft.com/en-us/library/aa383022(v=VS.85).aspx


 
Pcrepair ©   (2011-01-16 19:26) [6]

(5)
В ТMsRdpClient6 ничего этого нет. ТMsRdpClient6 -- это только оболочка для АктивХ объекта, тонкая прослойка для стыковки среды Дельфи с библиотекой АктивХ объекта.
но всетаки, компонент имеет КОД, входящий в состав файл.ехе, и этот код заведует отображением видеопотока от ДЛЛ в ФОРМУ. неужели там нельзя вставить код, блокирующий к примеру вывод видео?


 
DiamondShark ©   (2011-01-16 20:07) [7]


> Pcrepair ©   (16.01.11 19:26) [6]

Русский язык не родной?

Нету там такого кода. В обёртках АктивХ объектов абсолютно тупой, шаблонный код, сгенерированный роботом импорта ТЛБ.
Сколько раз надо повторить, чтобы дошло?


 
Pcrepair ©   (2011-01-16 20:21) [8]

(7) а что такое визуальный компонент что размещается на форме? и который отображает видео. в РАД оно называется ТMsRdpClient6(раздел АктивХ) и после компиляции входит в состав файл.ехе. возможно, если заблокировать участок кода в  MSTSCLib_TLB.pas, то можно будет управлять разрешением-запретом вывода видео в форму?


 
DiamondShark ©   (2011-01-16 20:29) [9]


> а что такое визуальный компонент что размещается на форме?
>  и который отображает видео. в РАД оно называется ТMsRdpClient6

Ну, мне не трудно скопипастить:

> DiamondShark ©   (16.01.11 18:56) [5]
> это только оболочка для АктивХ объекта, тонкая прослойка
> для стыковки среды Дельфи с библиотекой АктивХ объекта.

А вот насколько трудно это прочитать?


> сли заблокировать участок кода в  MSTSCLib_TLB.pas,

Да нет там никакого кода, кроме служебного, вроде создания эеземпляра кокласса, навешивания диспинтерфейсов событий и тому подобной рутинной и одинаковой для всех активиксов фигни.


 
Pcrepair ©   (2011-01-16 20:40) [10]

кода там вообщето порядка 5000 строк, в том числе прописано сотни функций и процедур, в том числе в компоненте ТMsRdpClient6, вот кусочек
TMsRdpClient6 = class(TOleControl)
 private
   FOnConnecting: TNotifyEvent;
   FOnConnected: TNotifyEvent;
   вырезано
   function  GetControlInterface: IMsRdpClient6;
 protected
   procedure CreateControl;
   procedure InitControlData; override;
  вырезано
 public
   procedure Connect;
   procedure Disconnect;
   
  вырезано;
   property AdvancedSettings: IMsTscAdvancedSettings read Get_AdvancedSettings;
   property Debugger: IMsTscDebug read Get_Debugger;
   property AdvancedSettings2: IMsRdpClientAdvancedSettings read
 published
   property Anchors;
   property  TabStop;
   вырезано
   property OnMouseInputModeChanged: TMsRdpClient6OnMouseInputModeChanged read FOnMouseInputModeChanged write FOnMouseInputModeChanged;
 end;

procedure Register;

resourcestring
 dtlServerPage = "ActiveX";

 dtlOcxPage = "ActiveX";

implementation

uses ComObj;


и далее сами процедуры, точнее несколько
procedure TMsRdpClient6.InitControlData;
const
 CEventDispIDs: array [0..24] of DWORD = (
   $00000001, $00000002, $00000003, $00000004, $00000005, $00000006,
   $00000007, $00000008, $00000009, $0000000A, $0000000B, $0000000C,
   $0000000D, $0000000E, $0000000F, $00000010, $00000011, $00000012,
   $00000013, $00000014, $00000015, $00000016, $00000017, $00000018,
   $0000001A);
 CControlData: TControlData2 = (
   ClassID: "{7390F3D8-0439-4C05-91E3-CF5CB290C3D0}";
   EventIID: "{336D5562-EFA8-482E-8CB3-C5C0FC7A7DB6}";
   EventCount: 25;
   EventDispIDs: @CEventDispIDs;
   LicenseKey: nil (*HR:$80040111*);
   Flags: $00000000;
   Version: 401);
begin
 ControlData := @CControlData;
 TControlData2(CControlData).FirstEventOfs := Cardinal(@@FOnConnecting) - Cardinal(Self);
end;

procedure TMsRdpClient6.CreateControl;

 procedure DoCreate;
 begin
   FIntf := IUnknown(OleObject) as IMsRdpClient6;
 end;

begin
 if FIntf = nil then DoCreate;
end;

function TMsRdpClient6.GetControlInterface: IMsRdpClient6;
begin
 CreateControl;
 Result := FIntf;
end;

function TMsRdpClient6.Get_SecuredSettings: IMsTscSecuredSettings;
begin
   Result := DefaultInterface.SecuredSettings;
end;

function TMsRdpClient6.Get_AdvancedSettings: IMsTscAdvancedSettings;
begin
   Result := DefaultInterface.AdvancedSettings;
end;


 
izja   (2011-01-16 20:46) [11]

Удалено модератором
Примечание: mailto:adm@delphimaster.ru


 
DiamondShark ©   (2011-01-16 20:56) [12]


> кода там вообщето порядка 5000 строк,

И что с того? Он чуть менее, чем полностью состоит из заглушек, вида

function TMsRdpClient6.Get_AdvancedSettings: IMsTscAdvancedSettings;
begin
   Result := DefaultInterface.AdvancedSettings;
end;


Забудь вообще про модуль импорта АктивХ компонента.

Ты вообще чего хочешь добиться?


 
Pcrepair ©   (2011-01-16 21:09) [13]

насчет заглушек - это интересно, код заглушек можно удалить? без потери функциональности

Цель простая - разобраться с вопросом что такое программирование на основе конкретных дел. в частности есть сетевая программа - клиент удаленного рабочего стола, много всяких функций
На текущий момент реализованы:
- форма с РДП компонентом - все работает
- + все настройки параметров подключения РДП-соединения (порядка 40 параметров) - все работает

осталось разобраться как происходит отображение видеопотока на форме, и как происходит передача данных от клавы и мыши. но не просто разобраться (теоретически все понятно), а строго конкретно - внести изменения в код программы, которые позволят управлять этими процессами


 
DiamondShark ©   (2011-01-16 21:23) [14]


>  код заглушек можно удалить?

Нет, конечно!
Наверное, не совсем корректно было назвать это заглушками. Правильнее -- адаптером: они транслируют удобные вызовы дельфи-компонента в вызовы интерфейсов COM-компонента.


> Цель простая - разобраться с вопросом что такое программирование
> на основе конкретных дел

Тогда выбран не самый удачный подопытный материал. Возьми чисто дельфийский проект, без активиксов.


> осталось разобраться как происходит отображение видеопотока
> на форме, и как происходит передача данных от клавы и мыши.

Этим занимается код в библиотеке АктивХ компонента -- mstscax.dll


> а строго конкретно - внести изменения в код программы, которые
> позволят управлять этими процессами

Для этого надо сначала разобраться с интерфейсом АктивХ компонента.


 
Pcrepair ©   (2011-01-16 21:33) [15]

простые задачи уже пройдены
и всетаки не все понятно с СОМ-объектом mstscax.dll
по теории, это динамически подключаемый код к основной программе, через набор имеющихся интерфейсов, которые нельзя изменить, поскольку нет исходного кода mstscax.dll (или есть?). но можно ведь заблокировать интерфейс который заведует передачей видеопотока на форму? или даже это невозможно и надо писать свой собственный ДЛЛ?


 
DiamondShark ©   (2011-01-16 21:47) [16]


> по теории, это динамически подключаемый код к основной программе,
>  через набор имеющихся интерфейсов, которые нельзя изменить,
>  поскольку нет исходного кода mstscax.dll (или есть?).

В общих чертах, да.


> но можно ведь заблокировать интерфейс который заведует передачей
> видеопотока на форму?

Нельзя заблокировать интерфейс. Интерфейс можно использовать или не использовать.
В каком смысле заведует? Интерфейс -- это органы управления и наблюдения объекта, ну, вот как у телевизора лампочки, кнопочки и ручечки -- это его, телевизора, интерфейс. Возможно, что некие ручечки и кнопочки влияют на передачу видеопотока. Чтобы это выяснить, надо читать документацию по интерфейсу.


 
Pcrepair ©   (2011-01-16 21:51) [17]

итак: документация по интерфейсу mstscax.dll
где же это искать? МСДН?


 
DiamondShark ©   (2011-01-16 21:56) [18]

http://msdn.microsoft.com/en-us/library/aa383022(v=VS.85).aspx


 
Pcrepair ©   (2011-01-16 22:43) [19]

спасибо, будем копать интерфейсы



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.04.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.006 c
2-1295060421
mfender
2011-01-15 06:00
2011.04.17
Не получается создать объект указанного класса


15-1294148572
alexdn_
2011-01-04 16:42
2011.04.17
c++


1-1249673444
Sasha_234
2009-08-07 23:30
2011.04.17
Часть длины отрезка


1-1251790955
Fr0sT
2009-09-01 11:42
2011.04.17
FastCode и D2009


15-1293447297
GanibalLector
2010-12-27 13:54
2011.04.17
Распознавания рукописных символов (FlexiCapture + Delphi)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский