Форум программистов, компьютерный форум CyberForum.ru

Перевод консоли в окно - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
29.03.2012, 19:51     Перевод консоли в окно #1
есть консольный исходник VMProtect для получения HWID. Хочу перевести его в оконное приложение... Может у кого есть шаблон окошка для таких целей? Желательно чтоб с кнопкой копирования в буфер.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
}
#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <winnt.h>
#include "VMProtectSDK.h"
 
 
int main(int argc, char **argv)
{
 int nSize = VMProtectGetCurrentHWID(NULL, 0);
 char *buf = new char[nSize];
 VMProtectGetCurrentHWID(buf, nSize);
 printf("HWID: %s\n", buf);
 delete [] buf;
 system("pause");
 return 0;
}
VMProtectSDK.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
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
#pragma once
 
#ifdef _WIN64
    #pragma comment(lib, "VMProtectSDK64.lib")
#else
    #pragma comment(lib, "VMProtectSDK32.lib")
#endif
 
#ifdef __cplusplus
extern "C" {
#endif
 
// protection
__declspec(dllimport) void __stdcall VMProtectBegin(const char *);
__declspec(dllimport) void __stdcall VMProtectBeginVirtualization(const char *);
__declspec(dllimport) void __stdcall VMProtectBeginMutation(const char *);
__declspec(dllimport) void __stdcall VMProtectBeginUltra(const char *);
__declspec(dllimport) void __stdcall VMProtectBeginVirtualizationLockByKey(const char *);
__declspec(dllimport) void __stdcall VMProtectBeginUltraLockByKey(const char *);
__declspec(dllimport) void __stdcall VMProtectEnd(void);
__declspec(dllimport) BOOL __stdcall VMProtectIsDebuggerPresent(BOOL);
__declspec(dllimport) BOOL __stdcall VMProtectIsVirtualMachinePresent(void);
__declspec(dllimport) BOOL __stdcall VMProtectIsValidImageCRC(void);
__declspec(dllimport) char * __stdcall VMProtectDecryptStringA(const char *value);
__declspec(dllimport) wchar_t * __stdcall VMProtectDecryptStringW(const wchar_t *value);
 
// licensing
enum VMProtectSerialStateFlags
{
    SERIAL_STATE_FLAG_CORRUPTED         = 0x00000001,
    SERIAL_STATE_FLAG_INVALID           = 0x00000002,
    SERIAL_STATE_FLAG_BLACKLISTED       = 0x00000004,
    SERIAL_STATE_FLAG_DATE_EXPIRED      = 0x00000008,
    SERIAL_STATE_FLAG_RUNNING_TIME_OVER = 0x00000010,
    SERIAL_STATE_FLAG_BAD_HWID          = 0x00000020,
    SERIAL_STATE_FLAG_MAX_BUILD_EXPIRED = 0x00000040,
};
#pragma pack(push, 1)
typedef struct
{
    WORD            wYear;
    BYTE            bMonth;
    BYTE            bDay;
} VMProtectDate;
typedef struct
{
    INT             nState;             // VMProtectSerialStateFlags
    wchar_t         wUserName[256];     // user name
    wchar_t         wEMail[256];        // email
    VMProtectDate   dtExpire;           // date of serial number expiration
    VMProtectDate   dtMaxBuild;         // max date of build, that will accept this key
    INT             bRunningTime;       // running time in minutes
    BYTE            nUserDataLength;    // length of user data in bUserData
    BYTE            bUserData[255];     // up to 255 bytes of user data
} VMProtectSerialNumberData;
 
#pragma pack(pop)
__declspec(dllimport) INT  __stdcall VMProtectSetSerialNumber(const char * SerialNumber);
__declspec(dllimport) INT  __stdcall VMProtectGetSerialNumberState();
__declspec(dllimport) BOOL __stdcall VMProtectGetSerialNumberData(VMProtectSerialNumberData *pData, UINT nSize);
__declspec(dllimport) INT  __stdcall VMProtectGetCurrentHWID(char * HWID, UINT nSize);
 
#ifdef __cplusplus
}
#endif

С оконными только начал разбираться...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2012, 19:51     Перевод консоли в окно
Посмотрите здесь:

Как убрать окно консоли C++
Закрывается окно консоли C++
C++ Исчезает окно консоли
Изменение окно в консоли C++
Как очистить окно консоли? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Taras_Z
 Аватар для Taras_Z
100 / 84 / 2
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
29.03.2012, 20:34     Перевод консоли в окно #2
надо учить WinAPI или Qt
опредилитесь с чем будете работать и тогда уже можно и шаблончик..
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
29.03.2012, 20:58  [ТС]     Перевод консоли в окно #3
Точно, забыл... пытался строить в MSVS 2010. WinAPI нужен...
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
29.03.2012, 21:05     Перевод консоли в окно #4
А что собственно такое
C++
1
2
3
int nSize = VMProtectGetCurrentHWID(NULL, 0);
//... 
VMProtectGetCurrentHWID(buf, nSize);
?

Что содержится в VMProtectSDK.h ?
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
29.03.2012, 21:33  [ТС]     Перевод консоли в окно #5
Цитата Сообщение от Avazart Посмотреть сообщение
Что содержится в VMProtectSDK.h ?
Ну я же его приложил в первом посте....

Чтоб стартануть приложение нужны еще библиотеки которые в аттаче..

Но мне интересен готовый шаблон\форма, чтоб можно было внедрить туда этот код...
Вложения
Тип файла: rar sdk.rar (30.0 Кб, 48 просмотров)
NinGAZ
13 / 13 / 1
Регистрация: 27.07.2011
Сообщений: 162
29.03.2012, 21:36     Перевод консоли в окно #6
можно еще gtk+
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
29.03.2012, 22:06     Перевод консоли в окно #7
Пробывал на RAD2009
Выдает
[ILINK32 Error] Error: 'C:\USERS\FUJITSU\DOCUMENTS\RAD STUDIO\PROJECTS\15\VMPROTECTSDK32.LIB' contains invalid OMF record, type 0x21 (possibly COFF)
Возможно неправильно подключил либы, а возможно они не подходят под Builder
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
29.03.2012, 22:18  [ТС]     Перевод консоли в окно #8
Цитата Сообщение от Avazart Посмотреть сообщение
Возможно неправильно подключил либы, а возможно они не подходят под Builder
А с этими?
Вложения
Тип файла: rar Borland C++ Builder.rar (29.5 Кб, 25 просмотров)
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
29.03.2012, 22:42     Перевод консоли в окно #9
Запускается работает.
Думаю без проблем будет работать в оконном приложении. Только не особо понимаю что оно должно делать и что должно вводися.
Миниатюры
Перевод консоли в окно  
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
29.03.2012, 22:58  [ТС]     Перевод консоли в окно #10
Вот то что вывелось и должно... У меня щас вопрос перекинуть это в оконное приложение.. Если кто может помочь, буду благодарен!
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
29.03.2012, 23:10     Перевод консоли в окно #11
Так подходит?
Миниатюры
Перевод консоли в окно  
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
29.03.2012, 23:54  [ТС]     Перевод консоли в окно #12
Цитата Сообщение от Avazart Посмотреть сообщение
Так подходит?
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
30.03.2012, 00:00     Перевод консоли в окно #13
Ну тогда как вариант WinApi
1. Писать на RАD (исходники могу выложить)
2. В Visual можно использовать приложение типа Windows Form ( но не уверен что приложение будет переносимо на другой комп)
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
30.03.2012, 09:26  [ТС]     Перевод консоли в окно #14
Я думал код можно и в студии собрать? Не? За исходники буду благодарен, как и за экзешник!
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
30.03.2012, 15:09     Перевод консоли в окно #15
Выкладываю. На WinApi влом было доводить до ума.В проект на WinApi придется добавлять либы так как пришлось их удалить что бы место не занимали - проект превышал макс размер.
Вложения
Тип файла: rar Builder2009.rar (4.98 Мб, 12 просмотров)
Тип файла: rar Visual 2010.rar (9.56 Мб, 33 просмотров)
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
30.03.2012, 16:00     Перевод консоли в окно #16
Вот немного переделал WinApi-вариант
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
// ProjectWinApi.cpp: определяет точку входа для приложения.
//
 
#include "stdafx.h"
#include "ProjectWinApi.h"
#include <string>
 
#include "VMProtectSDK.h"
 
#define MAX_LOADSTRING 100
 
#define ID_LISTBOX 3000
#define ID_BUTTON  3001
 
// Глобальные переменные:
HINSTANCE hInst;                                // текущий экземпляр
TCHAR szTitle[MAX_LOADSTRING];                  // Текст строки заголовка
TCHAR szWindowClass[MAX_LOADSTRING];            // имя класса главного окна
 
HWND hListBox,hButton,hStatic;
char *buf;      
std::string text;
 
// Отправить объявления функций, включенных в этот модуль кода:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
 
int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);
 
    // TODO: разместите код здесь.
    MSG msg;
    HACCEL hAccelTable;
 
    // Инициализация глобальных строк
    LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
    LoadString(hInstance, IDC_PROJECTWINAPI, szWindowClass, MAX_LOADSTRING);
    MyRegisterClass(hInstance);
 
    // Выполнить инициализацию приложения:
    if (!InitInstance (hInstance, nCmdShow))
    {
        return FALSE;
    }
 
    hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_PROJECTWINAPI));
 
    // Цикл основного сообщения:
    while (GetMessage(&msg, NULL, 0, 0))
    {
        if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
 
    return (int) msg.wParam;
}
 
 
 
//
//  ФУНКЦИЯ: MyRegisterClass()
//
//  НАЗНАЧЕНИЕ: регистрирует класс окна.
//
//  КОММЕНТАРИИ:
//
//    Эта функция и ее использование необходимы только в случае, если нужно, чтобы данный код
//    был совместим с системами Win32, не имеющими функции RegisterClassEx'
//    которая была добавлена в Windows 95. Вызов этой функции важен для того,
//    чтобы приложение получило "качественные" мелкие значки и установило связь
//    с ними.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
    WNDCLASSEX wcex;
 
    wcex.cbSize = sizeof(WNDCLASSEX);
 
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_PROJECTWINAPI));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = NULL;  //MAKEINTRESOURCE(IDC_PROJECTWINAPI);
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
 
    return RegisterClassEx(&wcex);
}
 
//
//   ФУНКЦИЯ: InitInstance(HINSTANCE, int)
//
//   НАЗНАЧЕНИЕ: сохраняет обработку экземпляра и создает главное окно.
//
//   КОММЕНТАРИИ:
//
//        В данной функции дескриптор экземпляра сохраняется в глобальной переменной, а также
//        создается и выводится на экран главное окно программы.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
   HWND hWnd;
 
   hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной
 
   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
      500, 250, 100, 100, NULL, NULL, hInstance, NULL);
 
   if (!hWnd)
   {
      return FALSE;
   }
 
   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);
 
   return TRUE;
}
 
//
//  ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  НАЗНАЧЕНИЕ:  обрабатывает сообщения в главном окне.
//
//  WM_COMMAND  - обработка меню приложения
//  WM_PAINT    -Закрасить главное окно
//  WM_DESTROY   - ввести сообщение о выходе и вернуться.
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
 
    switch (message)
    {
 
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // Разобрать выбор в меню:
        switch (wmId)
        {
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
 
        case ID_BUTTON:
             if(wmEvent==BN_CLICKED)
             {
             int nSize;
             nSize=VMProtectGetCurrentHWID(NULL, 0);
             buf = new char[nSize];
             VMProtectGetCurrentHWID(buf, nSize);
             text = buf;
             delete[] buf; 
             //SendMessageA(hListBox,LB_DELETESTRING,0,NULL);
             SendMessageA(hListBox,LB_ADDSTRING,255,(LPARAM)text.c_str()); 
             }
            break;
 
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        
        break;
 
    case WM_CREATE: // !!!
        {
        SetWindowPos(hWnd,HWND_TOP,500, 250, 240, 280,SWP_SHOWWINDOW);
        int nSize;
        nSize=VMProtectGetCurrentHWID(NULL, 0);
        buf = new char[nSize];
        VMProtectGetCurrentHWID(buf, nSize);
        text = buf;
        delete[] buf;
 
 
        int sx = 10, sy = 10, sw = 200, sh = 20;
 
        hStatic= CreateWindowA("Static","HWID: ", WS_CHILD|WS_VISIBLE,
                                sx,sy,sw,sh,hWnd,(HMENU)0,hInst,0);
 
        int lx = 10, ly = 35, lw = 200, lh = 160;
 
        hListBox= CreateWindowA("ListBox",text.c_str(), LBS_NOTIFY|WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_BORDER,
                                lx,ly,lw,lh,hWnd,(HMENU)ID_LISTBOX,hInst,0);
 
        int bx = 10, by = 195, bw = 200, bh = 35;
 
        hButton= CreateWindowA("Button","Refresh",WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON,
                                bx,by,bw,bh,hWnd,(HMENU)ID_BUTTON,hInst,0);
 
 
        SendMessageA(hListBox,LB_ADDSTRING,255,(LPARAM)text.c_str()); 
 
        break;
        }
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
        // TODO: добавьте любой код отрисовки...
        RECT R;
        GetClientRect(hWnd,&R);
        
        DrawTextA(hdc,text.c_str(),-1,&R,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
 
// Обработчик сообщений для окна "О программе".
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    UNREFERENCED_PARAMETER(lParam);
    switch (message)
    {
    case WM_INITDIALOG:
        return (INT_PTR)TRUE;
 
    case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
            EndDialog(hDlg, LOWORD(wParam));
            return (INT_PTR)TRUE;
        }
        break;
    }
    return (INT_PTR)FALSE;
}
Изображения
 
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
30.03.2012, 18:15  [ТС]     Перевод консоли в окно #17
Спасибо, тебе! Добрый Одессит! )

Не подскажешь, как сделать чтоб с окна можно было текст выделить и в буфер скопировать? И чтоб выводимый текст не вылазил за пределы поля, а переносился на новую строчку.
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
30.03.2012, 18:45     Перевод консоли в окно #18
Ну по идее копировать можно клавишами Ctrl+C ( По крайней мере в проекте на Builder-e)
А чтоб текст не вылазил проше
1. Убрать/Добавить полосы прокрутки
2. Сделать изменяемыми размеры окна ( А в месте с ним и текстового поля);

А собственно на каком варианте вы остановились? (RAD или Visual)
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
30.03.2012, 19:02  [ТС]     Перевод консоли в окно #19
Цитата Сообщение от Avazart Посмотреть сообщение
А собственно на каком варианте вы остановились? (RAD или Visual)
на Visual...

Цитата Сообщение от Avazart Посмотреть сообщение
Ну по идее копировать можно клавишами Ctrl+C ( По крайней мере в проекте на Builder-e)
После того как собрал в вижуале скопировать не выходит (... Выделить текст не получается... Остальное все поправил в принципе...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2012, 20:01     Перевод консоли в окно
Еще ссылки по теме:

C++ Массивы структур - зависает окно консоли
Окно консоли исчезает C++
Убрать/скрыть окно консоли C++

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

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
30.03.2012, 20:01     Перевод консоли в окно #20
В таком случае надо менять "ListBox" на "RichEdit" , "RichEdit_Class" или просто "Edit" со стилем ES_MULTILINE
C++
1
2
hListBox= CreateWindowA("ListBox",text.c_str(), LBS_NOTIFY|WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_BORDER, // Менять стили
                                lx,ly,lw,lh,hWnd,(HMENU)ID_LISTBOX,hInst,0);
Но там надо разбираться с подключением элемента RichEdit

Добавлено через 36 минут
Указанную строку заменить на
C++
1
hEdit=CreateWindowA("Edit",text.c_str(),WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_BORDER|ES_MULTILINE,lx,ly,lw,lh,hWnd,(HMENU)ID_EDIT,hInst,0);
И изменить в обработтке сообшения от кнопки
C++
1
2
SendMessageA(hEdit,WM_SETTEXT,255,(LPARAM)text.c_str()); // Изменить текст
//SendMessageA(hEdit,EM_REPLACESEL,255,(LPARAM)text.c_str()); // Добавить строку
Добавлено через 2 минуты
Да и я забыл в коде удалить строчки
C++
1
2
3
RECT R;
GetClientRect(hWnd,&R);
DrawTextA(hdc,text.c_str(),-1,&R,DT_SINGLELINE|DT_CENTER|DT_VCENTER);
они не нужны.
Yandex
Объявления
30.03.2012, 20:01     Перевод консоли в окно
Ответ Создать тему
Опции темы

Текущее время: 06:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru