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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.86
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
#1

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

29.03.2012, 19:51. Просмотров 2768. Ответов 25
Метки нет (Все метки)

есть консольный исходник 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

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

Закрывается окно консоли - C++
Здравствуйте! Я новичок в программирование. И желаю научиться C++ есть книга Джесс Либерти &quot;Освой самостоятельно c++ за 21 день&quot; ...

Окно консоли исчезает - C++
пишу программу сервер. состоит програма из 2 приложений, один главный подключает клиентов и отправляет их во второе приложение(при этом...

Изменение окно в консоли - C++
Можно как-то убрать полосу прокрутки в консоли (MS Visual C++)? Чтоб нельзя было ее прокрутить и ограничиться окном 80х25. Скрин ниже.

Исчезает окно консоли - C++
Запускаю программу, ввожу первое число, второе число, жму Enter и окно MS DOS исчезает, не выводя сумму. Что нужно добавить? Именуйте...

Как убрать окно консоли - C++
Всем привет! Посмотрите как можно убрать черное окно чтобы осталась только окно диалога....

Как расширить окно консоли - C++
какой командой можно расширить окно консоли?а то у меня прога много выводит,и начало ,не с начала начинается,а где-то с центра самой...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,665
Записей в блоге: 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;
}
1
Изображения
 
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
30.03.2012, 18:15  [ТС] #17
Спасибо, тебе! Добрый Одессит! )

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

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

Цитата Сообщение от Avazart Посмотреть сообщение
Ну по идее копировать можно клавишами Ctrl+C ( По крайней мере в проекте на Builder-e)
После того как собрал в вижуале скопировать не выходит (... Выделить текст не получается... Остальное все поправил в принципе...
0
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,665
Записей в блоге: 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);
они не нужны.
1
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
30.03.2012, 21:06  [ТС] #21
Спасибо большое! Все поехало! "Edit" правда не совсем то, возможность редактировать не нужна, но так зато есть возможность скопировать в буфер.

Как-нибудь потом, когда разберусь, просто сделаю кнопку копирования в буфер. Спасибо!
0
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,665
Записей в блоге: 17
30.03.2012, 21:23 #22
Там по идее в стиле надо добавить ES_READONLY или что-то вроде того, что бы редактировать нельзя было.

Но реализация на RAD конечно намного проще, буквально в несколько кликов
1
Битл
0 / 0 / 0
Регистрация: 08.03.2012
Сообщений: 65
30.03.2012, 21:28  [ТС] #23
А не подскажешь, можно фон наложить и сделать ListBox прозрачным (50проц) или полностью прозрачным, но чтобы текст выводился 100 видимости.


Цитата Сообщение от Avazart Посмотреть сообщение
Но реализация на RAD конечно намного проще, буквально в несколько кликов
Буду смотреть значит в сторону пары кликов. Пасиб!
0
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,665
Записей в блоге: 17
30.03.2012, 22:02 #24
Фон в смысле картинку или цвет?
В RAD можно убрать бордюры и выставить цвет фона так что элемент сравняется с формой будет только виден текст, если вы про это.

Добавлено через 9 минут
C++
1
hEdit=CreateWindowA("Edit",text.c_str(),WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_BORDER|ES_MULTILINE|ES_READONLY, lx,ly,lw,lh,hWnd,(HMENU)ID_EDIT,hInst,0);
1
Avazart
Эксперт С++
7188 / 5362 / 280
Регистрация: 10.12.2010
Сообщений: 23,665
Записей в блоге: 17
30.03.2012, 22:18 #25
C++
1
2
3
4
5
6
7
8
9
10
11
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
 
        RECT R;
        GetClientRect(hWnd,&R);
        HBRUSH hBrush; 
        hBrush= CreateSolidBrush(0x0F0F0F0);
        FillRect(hdc,&R,hBrush);
 
        EndPaint(hWnd, &ps);
        break;
1
Taras_Z
100 / 84 / 2
Регистрация: 27.10.2010
Сообщений: 534
Записей в блоге: 2
31.03.2012, 11:31 #26
вот хороший сайт http://shatalov.su/ru/articles/cpp_primer/window_0.php
там есть первая и вторая часть
прочтите иначе кода не поймете
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2012, 11:31
Привет! Вот еще темы с ответами:

Убрать/скрыть окно консоли - C++
Всем привет!Я пишу на notepad++,компилирую через командную строку.Как мне убрать консольное окно?Заранее благодарен!

Как очистить окно консоли? - C++
Здравствуйте! Есть к примеру программа - калькулятор а консоли! Она работает так, ввели число, выбрали что сделать, выбрали 2 число......

Как задержать окно консоли от закрытия? - C++
в общем ребята в чем суть дела, я решил пройти книгу Б. Страуструп &quot;Программирование. Принципы и практика использования С++&quot;, и нелепая...

Visual C++ 2013 закрывает окно консоли - C++
Сразу после ввода данных, выводит подсчет и закрывает мгновенно окно консоли.... #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
31.03.2012, 11:31
Ответ Создать тему
Опции темы

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