Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
1 / 0 / 0
Регистрация: 16.05.2010
Сообщений: 36
1

Вектора Указатели и RDP ActiveX

07.11.2017, 05:20. Просмотров 1372. Ответов 12
Метки нет (Все метки)


C++
1
2
3
4
5
1       std::vector<TMsRdpClient9NotSafeForScripting> *rdp = new std::vector<TMsRdpClient9NotSafeForScripting>();
2       for(int i = 0; i< 10; i++){
3                rdp[i]->Connect();
4                i++;
5       }
E2288 Pointer to structure required on left side of -> or ->*
вот такая гадость нехочет работать, что неправильно?
ругается на третюю строчку

Добавлено через 3 часа 20 минут
C++
1
2
3
4
5
        std::vector<TMsRdpClient9 *> *rdp = new std::vector<TMsRdpClient9*>(mgrsCount);
        for(int i = 0; i< mgrsCount; i++){
            (*rdp)[i]->Server=L"192.168.1.29";    
                    (*rdp)[i]->Connect();
                }
вот так уже компилится но вылетает аксес виолейшон при заполнении параметров класса
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2017, 05:20
Ответы с готовыми решениями:

Указатели, вектора
Добрый день! Помогите написать код, желательно на С Тема: указатели на функции Нужно написать...

Создание вектора wstring через указатели
Вот так правильно? Обратите особое внимание на цикл do-while. vector&lt;wstring&gt; MachinesList; ...

Указатели. Считая, что все элементы вектора X отличны от Nil, построить логическую функцию Same (X)
Дано описание: type RtrRe = ^Real; Vector = Array of RtrRe; Считая, что все элементы вектора X...

Нужно изменять размер шрифта в ActiveX в зависимости от размера самого ActiveX
Уважаемые, обратите пожалуйста внимание на вчерашний постинг под сабжем 'ActiveX - динамич....

12
Практикантроп
4670 / 2593 / 493
Регистрация: 23.09.2011
Сообщений: 5,567
07.11.2017, 15:11 2
Я подобные задачи решаю иначе...(может и неправильно, но без фиолетового...)__
C++
1
2
3
4
5
6
std::vector<TMsRdpClient9 *> rdp(mgrsCount);
 for(int i = 0; i< mgrsCount; i++) {
   rdp[i] = new TMsRdpClient9(this);
   rdp[i]->Parent = . . . (если нужно)
   rdp[i]->Server = L"192.168.1.29"; // и т.д.
 }
0
1 / 0 / 0
Регистрация: 16.05.2010
Сообщений: 36
08.11.2017, 02:46  [ТС] 3
как мне в этом событии узнать адрес сервера к которому я покдлючился а к какому нет?

C++
1
2
3
4
void __fastcall TTestThread::OnLoginComplete(TObject *Sender)
{
    MessageBox(NULL, L"Server:", L"OK", MB_OK);
}
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
30857 / 20180 / 7873
Регистрация: 22.10.2011
Сообщений: 35,039
Записей в блоге: 6
08.11.2017, 19:12 4
Получить указатель на объект, для которого сработало событие OnLoginComplete:

C++
1
2
3
4
5
6
7
void __fastcall TTestThread::OnLoginComplete(TObject *Sender)
{
    TMsRdpClient9 *obj = static_cast<TMsRdpClient9 *>(Sender);
    // и уже из него как-то получать нужную информацию. Например, obj->Server даст имя сервера...
 
    MessageBox(NULL, L"Server:", L"OK", MB_OK);
}
0
1 / 0 / 0
Регистрация: 16.05.2010
Сообщений: 36
09.11.2017, 00:06  [ТС] 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
Rdp->AdvancedSettings9->ClearTextPassword = L"1234";
Rdp->AdvancedSettings9->MinutesToIdleTimeout = 0.05;
Rdp->Server=L"192.168.1.29";
Rdp->OnLoginComplete = OnLoginComplete;
Rdp->OnAuthenticationWarningDismissed = Warn;
Rdp->OnAuthenticationWarningDisplayed = Warn;
Rdp->OnWarning = (TMsRdpClient9NotSafeForScriptingOnLogonError)&Warn;
Rdp->OnFatalError =(TMsRdpClient9NotSafeForScriptingOnFatalError)&Warn2;
Rdp->OnLogonError = (TMsRdpClient9NotSafeForScriptingOnLogonError)&Warn2;
Rdp->OnIdleTimeoutNotification = OnIdleTimeoutNotification;
Rdp->StartConnected = true;
Rdp->Connect();
 
void __fastcall TTestThread::Warn2(DWORD lError)
{
    if (lError == 0x0){
        Rdp->Disconnect();
        Form2->listResults->Items->Add("LOGON_FAILED_BAD_PASSWORD");
        MessageBox(NULL, L"LOGON_FAILED_BAD_PASSWORD", L"(0x0)", MB_OK);
    }else if(lError == 0xFFFFFFFF){
        Rdp->Disconnect();
        Form2->listResults->Items->Add("ERROR_CODE_ACCESS_DENIED");
        MessageBox(NULL, L"ERROR_CODE_ACCESS_DENIED", L"(0xFFFFFFFF)", MB_OK);
    }else if(lError == 0xFFFFFFFE){
        Rdp->Disconnect();
        Form2->listResults->Items->Add("ARBITRATION_CODE_CONTINUE_LOGON");
        MessageBox(NULL, L"ARBITRATION_CODE_CONTINUE_LOGON", L"(0xFFFFFFFE)", MB_OK);
    }else if(lError == 0xFFFFFFFD){
        Rdp->Disconnect();
        Form2->listResults->Items->Add("ARBITRATION_CODE_CONTINUE_TERMINATE");
        MessageBox(NULL, L"ARBITRATION_CODE_CONTINUE_TERMINATE", L"(0xFFFFFFFD)", MB_OK);
    }else if(lError == 0xFFFFFFFC){
        Rdp->Disconnect();
        Form2->listResults->Items->Add("ARBITRATION_CODE_RECONN_OPTIONS");
        MessageBox(NULL, L"ARBITRATION_CODE_RECONN_OPTIONS", L"(0xFFFFFFFC)", MB_OK);
    }else if(lError == 0xFFFFFFFB){
        Rdp->Disconnect();
        Form2->listResults->Items->Add("ARBITRATION_CODE_BUMP_OPTIONS");
        MessageBox(NULL, L"ARBITRATION_CODE_BUMP_OPTIONS", L"(-1 (0xFFFFFFFB))", MB_OK);
    }else if(lError == 0xFFFFFFFA){
        Rdp->Disconnect();
        Form2->listResults->Items->Add("ARBITRATION_CODE_NOPERM_DIALOG");
        MessageBox(NULL, L"ARBITRATION_CODE_NOPERM_DIALOG", L"(0xFFFFFFFA)", MB_OK);
    }else if(lError == 0xFFFFFFF9){
        Rdp->Disconnect();
        Form2->listResults->Items->Add("ARBITRATION_CODE_REFUSED_DIALOG");
        MessageBox(NULL, L"ARBITRATION_CODE_REFUSED_DIALOG", L"(0xFFFFFFF9)", MB_OK);
    }else if(lError == 0x1){
        Rdp->Disconnect();
        Form2->listResults->Items->Add("LOGON_FAILED_UPDATE_PASSWORD");
        MessageBox(NULL, L"LOGON_FAILED_UPDATE_PASSWORD", L"(0x1)", MB_OK);
    }else if(lError == 0x2){
        Rdp->Disconnect();
        Form2->listResults->Items->Add("LOGON_FAILED_OTHER");
        MessageBox(NULL, L"LOGON_FAILED_OTHER", L"(0x2)", MB_OK);
    }else if(lError == 0x3){
        Rdp->Disconnect();
        Form2->listResults->Items->Add("LOGON_WARNING");
        MessageBox(NULL, L"LOGON_WARNING", L"(0x3)", MB_OK);
    }else if(lError == 0xC000006E){
        Rdp->Disconnect();
        Form2->listResults->Items->Add("STATUS_ACCOUNT_RESTRICTION");
        MessageBox(NULL, L"STATUS_ACCOUNT_RESTRICTION", L"(0xC000006E)", MB_OK);
    }else if(lError == 0xC000006D){
        Rdp->Disconnect();
        Form2->listResults->Items->Add("STATUS_LOGON_FAILURE");
        MessageBox(NULL, L"STATUS_LOGON_FAILURE", L"(0xC000006D)", MB_OK);
    }else if(lError == 0xC0000224){
        Rdp->Disconnect();
        Form2->listResults->Items->Add("STATUS_PASSWORD_MUST_CHANGE");
        MessageBox(NULL, L"STATUS_PASSWORD_MUST_CHANGE", L"(0xC0000224)", MB_OK);
    }else {
        Rdp->Disconnect();
        Form2->listResults->Items->Add(IntToStr((int)lError));
        MessageBox(NULL, L"ERROR", L"(X)", MB_OK);
    }
}
https://msdn.microsoft.com/en-... s.85).aspx
не срабатывает обработчик, кто знает чем помочь?
0
1 / 0 / 0
Регистрация: 16.05.2010
Сообщений: 36
12.11.2017, 01:25  [ТС] 6
Кто нить знает как сделать подтверждение входа всистему по рдп?
кпримеруесли я захожу програмно то может быть написано что юзер уже зашел, но я админ и мне нужо зайти и выполнить скрипт, к примеру ограничивающий в фаерволе какието правила, как мне сделать такое?
0
8 / 8 / 1
Регистрация: 06.09.2014
Сообщений: 52
12.11.2017, 15:39 7
Именно не срабатывает или работает это:
C++
1
2
3
4
5
    }else {
        Rdp->Disconnect();
        Form2->listResults->Items->Add(IntToStr((int)lError));
        MessageBox(NULL, L"ERROR", L"(X)", MB_OK);
    }
?

Добавлено через 7 минут
При таком присваивании
C++
1
2
3
4
5
Rdp->OnAuthenticationWarningDismissed = Warn;
Rdp->OnAuthenticationWarningDisplayed = Warn;
Rdp->OnWarning = (TMsRdpClient9NotSafeForScriptingOnLogonError)&Warn;
Rdp->OnFatalError =(TMsRdpClient9NotSafeForScriptingOnFatalError)&Warn2;
Rdp->OnLogonError = (TMsRdpClient9NotSafeForScriptingOnLogonError)&Warn2;
всех событий одному обработчику да ещё и в потоке Вы как-то синхронизируете вызовы?
0
1 / 0 / 0
Регистрация: 16.05.2010
Сообщений: 36
13.11.2017, 03:19  [ТС] 8
OnLoginComplete срабатывает без проблем, и OnDisconnected тоже , а вот ошибку неотлавливает вообще никак, функции несрабатывают

C++
1
2
3
4
5
6
7
8
9
10
11
12
Rdp->AdvancedSettings9->ClearTextPassword = L"1234";
Rdp->AdvancedSettings9->MinutesToIdleTimeout = 0.05;
Rdp->Server=L"192.168.1.29";
Rdp->OnLoginComplete = OnLoginComplete;
Rdp->OnAuthenticationWarningDismissed = Warn;
Rdp->OnAuthenticationWarningDisplayed = Warn;
Rdp->OnWarning = (TMsRdpClient9NotSafeForScriptingOnLogonError)&Warn;
Rdp->OnFatalError =(TMsRdpClient9NotSafeForScriptingOnFatalError)&Warn2;
Rdp->OnLogonError = (TMsRdpClient9NotSafeForScriptingOnLogonError)&Warn2;
Rdp->OnIdleTimeoutNotification = OnIdleTimeoutNotification;
Rdp->StartConnected = true;
Rdp->Connect();
этот код находится в функции которая синхронизируется в потоке с помощью Synchronize(), и опять же, остальные обработчики срабатывают такие как OnLoginCompleted и OnDisconnected
0
8 / 8 / 1
Регистрация: 06.09.2014
Сообщений: 52
13.11.2017, 10:44 9
Предлогаю проверить это вне TThread-а. Проблема может быть и в том, что все события к нам приходят из MsTscAx.dll, Вы их обрабатываете Synchronize(&), что вешает оба потока (GUI и ваш TThread), думаете DLL будет ждать пока отработает Synchronize()? Скорее она постит сообщения, а не сендит. Т.е. накладка происходит тогда, когда новые события приходят, а в это время ещё крутиться Synchronize() от старого сообщения...

Добавлено через 14 минут
С сообщениями походу я перегнул, там же просто стоят указатели на функции... Получается, что DLL всё-таки должна дожидаться окончания работы твоих обработчиков. Попробуй тогда разнести обработчики по разным "Warn_n" функциям...
0
1 / 0 / 0
Регистрация: 16.05.2010
Сообщений: 36
13.11.2017, 22:48  [ТС] 10
пробовал по разных пробовал по одной как угодно пробовал, даже на vbscript пробовал использовать этот компонент, результат один
0
8 / 8 / 1
Регистрация: 06.09.2014
Сообщений: 52
17.11.2017, 16:19 11
ixtor, Вы пробовали импортировать объекты напрямую через CoCreateInstance(CLID), а не пользоваться каким-то компонентом (TMsRdpClient9NotSafeForScripting, TMsRdpClient9)?

Добавлено через 2 часа 20 минут
Спрашиваю, т.к. нашел только "rdpcomapi 1.0 Type Library" для импорта в зарегистрированных ActiveX в IDE, в котором нет этих классов.

Добавлено через 11 минут
Нашёл "Microsoft Terminal Services Active Client v1.0 Type Library". Попробую сам тогда...

Добавлено через 1 час 17 минут
У меня нет версий TMsRdpClient9/TMsRdpClient9NotSafeForScripting, но в остальных версиях (TMsRdpClient - TMsRdpClient7) типы warning-ов/errer-ов объявлены как
C++
1
2
typedef void __fastcall (__closure * TMsRdpClient6OnWarning)(System::TObject * Sender,
                                       long warningCode/*[in]*/);
для TMsRdpClient6->OnWarning например. Вы же подставляете функцию с сигнатурой
C++
1
void __fastcall TTestThread::Warn2(DWORD lError)
Пробовали так:
C++
1
TTestThread::Warn2(System::TObject * Sender, long warningCode)
?
Это то, что лежит на поверхности, под рукой 2-ой машины нет проверить остальное.
0
1 / 0 / 0
Регистрация: 16.05.2010
Сообщений: 36
21.11.2017, 17:55  [ТС] 12
Unit1.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "MSTSCLib_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
            Rdps->UserName="admin";
            Rdps->AdvancedSettings2->ClearTextPassword = L"";
            Rdps->Server="192.168.1.18";
            Rdps->OnLoginComplete = OnLoginComplete;
            Rdps->OnWarning = OnWarning;
            Rdps->StartConnected = true;
            Rdps->Connect();
}
void __fastcall TForm1::OnLoginComplete(TObject* Sender)
{
    MessageBox(0, L"OnLogin", L"OnLogin", MB_OK);
}
void __fastcall TForm1::OnWarning(System::TObject * Sender, long warningCode)
{
    MessageBox(0, L"OnWarning", L"OnWarning", MB_OK);
}
//---------------------------------------------------------------------------
Unit1.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//---------------------------------------------------------------------------
 
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.OleCtrls.hpp>
#include "MSTSCLib_OCX.h"
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TMsRdpClient7 *Rdps;
    TButton *Button1;
    void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
    void __fastcall TForm1::OnLoginComplete(TObject* Sender);
    void __fastcall TForm1::OnWarning(System::TObject * Sender, long warningCode);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
кароче попробуйте поколупай сам, вынес код в отдельную программу

Добавлено через 8 минут
как вариант вот еще поколупаться
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "MSTSCLib_OCX"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
            Rdps->UserName="admin";
            Rdps->AdvancedSettings2->ClearTextPassword = L"32";
            Rdps->Server="192.168.1.18";
            Rdps->OnLoginComplete = OnLoginComplete;
            Rdps->OnWarning = OnWarning;
            Rdps->OnLogonError = Warn2;
            Rdps->StartConnected = true;
            Rdps->Connect();
}
void __fastcall TForm1::OnLoginComplete(TObject* Sender)
{
    MessageBox(0, L"OnLogin", L"OnLogin", MB_OK);
}
void __fastcall TForm1::OnWarning(System::TObject * Sender, long warningCode)
{
    MessageBox(0, L"OnWarning", L"OnWarning", MB_OK);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Warn2(System::TObject* Sender, long lErr)
{
    DWORD lError = (DWORD)lErr;
    if (lError == 0x0){
        MessageBox(NULL, L"LOGON_FAILED_BAD_PASSWORD", L"(0x0)", MB_OK);
    }else if(lError == 0xFFFFFFFF){
        MessageBox(NULL, L"ERROR_CODE_ACCESS_DENIED", L"(0xFFFFFFFF)", MB_OK);
    }else if(lError == 0xFFFFFFFE){
        MessageBox(NULL, L"ARBITRATION_CODE_CONTINUE_LOGON", L"(0xFFFFFFFE)", MB_OK);
    }else if(lError == 0xFFFFFFFD){
        MessageBox(NULL, L"ARBITRATION_CODE_CONTINUE_TERMINATE", L"(0xFFFFFFFD)", MB_OK);
    }else if(lError == 0xFFFFFFFC){
        MessageBox(NULL, L"ARBITRATION_CODE_RECONN_OPTIONS", L"(0xFFFFFFFC)", MB_OK);
    }else if(lError == 0xFFFFFFFB){
        MessageBox(NULL, L"ARBITRATION_CODE_BUMP_OPTIONS", L"(-1 (0xFFFFFFFB))", MB_OK);
    }else if(lError == 0xFFFFFFFA){
        MessageBox(NULL, L"ARBITRATION_CODE_NOPERM_DIALOG", L"(0xFFFFFFFA)", MB_OK);
    }else if(lError == 0xFFFFFFF9){
        MessageBox(NULL, L"ARBITRATION_CODE_REFUSED_DIALOG", L"(0xFFFFFFF9)", MB_OK);
    }else if(lError == 0x1){
        MessageBox(NULL, L"LOGON_FAILED_UPDATE_PASSWORD", L"(0x1)", MB_OK);
    }else if(lError == 0x2){
        MessageBox(NULL, L"LOGON_FAILED_OTHER", L"(0x2)", MB_OK);
    }else if(lError == 0x3){
        MessageBox(NULL, L"LOGON_WARNING", L"(0x3)", MB_OK);
    }else if(lError == 0xC000006E){
        MessageBox(NULL, L"STATUS_ACCOUNT_RESTRICTION", L"(0xC000006E)", MB_OK);
    }else if(lError == 0xC000006D){
        MessageBox(NULL, L"STATUS_LOGON_FAILURE", L"(0xC000006D)", MB_OK);
    }else if(lError == 0xC0000224){
        MessageBox(NULL, L"STATUS_PASSWORD_MUST_CHANGE", L"(0xC0000224)", MB_OK);
    }else {
        MessageBox(NULL, L"ERROR", L"(X)", MB_OK);
    }
}
0
8 / 8 / 1
Регистрация: 06.09.2014
Сообщений: 52
23.11.2017, 16:59 13
Ок, протестирую и отпишу тут.
Всё равно пригодиться в будущем когда-то...
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2017, 16:59

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

ActiveX Bridje или как превращать ActiveX Control в JavaBean.
Насколько я понял из документации, эта штука позволяет превращать JavaBean в ActiveX Control с...

Remoteapp и RDP на одном из клиентов - нет панели задач, и нет кнопки закрепления RDP
Добрый день уважаемые форумчане !!! Прошу помощи у гуру. Есть сервер 2008. Юзеры заходят через...

Найти выражение для: вектора скорости; вектора ускорения; модуля радиус-вектора
Товарищи, помогите пожалуйста решить. Радиус-вектор материальной точки задается выражением:...

Указатели и указатели на указатели, а также типы данных
Недавно начал изучать Си, перешел с Delphi. Много непонятного и пока процесс идет медленно....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.