Запретить использование программного обеспечения DeDe для декомпиляции программ Delphi.
Вот статья о том, как предотвратить использование программного обеспечения DeDe для декомпиляции программ Delphi ~
Те, что в "" - мои аннотации, а остальные - оригинальные творения~
ПРОГРАММА Проект1;
Использование
Формы,
окна,
сисутилс,
Unit1 В «Unit1.pas» {Form1}
Unit2 В «Unit2.pas» {Form2};
Функция RegisterServiceProcess (dwProcessId, dwType: dWord): Integer;
Внешний «kernel32.dll»
{$R *.RES}
Вар
HMUTEX: HWND;
RET: ЦЕЛОЕ ЧИСЛО;
hCurrentWindow: HWnd //Требуется декомпиляция;
szText: Array[0..254] Of char //требуется для декомпиляции;
Начинать
приложение.Инициализировать;
APPLICATION.TITLE := 'Дизайн коллекции подсолнечника Delphi: Чжан Гуопэн';
RegisterServiceProcess(GetCurrentProcessID, 1); //Пусть программа исчезнет в Ctl+Alt+Del.
«Мы видим, что автор использовал RegisterServiceProcess для регистрации программы в качестве сервисной программы WINDOWS~»
«Но все знают, что эта функция включена в ядро32 и работает только в 98/ME~»
«Так что не воспринимайте это как ключ к декомпиляции, можно сказать, что это необязательно~»
//Запретить запуск декомпиляции
hCurrentWindow := GetWindow(APPLICATION.Handle, GW_HWNDFIRST);
«Из вышесказанного я знаю, что автор хочет знать, является ли окно его программы окном верхнего уровня».
Пока hCurrentWindow <> 0
Начинать
Если GetWindowText(hCurrentWindow, @szText, 255) > 0 Тогда
Если pos('DeDe', StrPas(@szText)) <> 0 Тогда
«Если нет, получите заголовок текущей формы рабочего стола и определите, является ли это «DeDe»»
Начинать
APPLICATION.MESSAGEBOX('Хотите меня декомпилировать? Это не так просто!',
«Ха-ха... ты парень! ', мб_ок);
//закрыть окно(hCurrentWindow);//Свернуть окно программы
EnableWindow (hCurrentWindow, ложь);
//Делаем окно программы неактивным. Если вы можете получить идентификационный номер потока программы, вы можете сделать программу непригодной для использования и не закрывающейся. Круто, не так ли?
«Два вышеприведенных предложения — это лечение DEDE~»
"закрыть окно: свернуть указанное окно, но оно не будет удалено из памяти~"
«Enablewindow: разрешить/запретить ввод с помощью мыши и клавиатуры в указанном окне, значение false определенно не будет работать~»
остановка;
Конец;
hCurrentWindow: = GetWindow(hCurrentWindow, GW_HWNDNEXT);
Конец;
//Предотвращаем завершение декомпиляции
//Предотвращаем запуск программы дважды
HMUTEX := CREATEMUTEX(Nil, FALSE, 'Дизайн коллекции подсолнечника delphi: Чжан Гуопэн');
RET := GETLASTERROR;
Если RET <> ERROR_ALREADY_EXISTS Тогда
Начинать
Приложение.CreateForm(TForm1, Form1);
// Application.CreateForm(TForm2, Form2);
Приложение.Выполнить;
Конец
Еще
APPLICATION.MESSAGEBOX('Программа запущена!', 'Подсказка', mb_ok);
релизмьютекс (хмьютекс);
Конец.