تخطي رسالة Unregistered skin has been loaded.
#1
بعد التحية والسلام
في الاونة الاخيرة اضافت مركبات AlphaControls ستايلات مدفوعة ويمكن تجربتها مجانا لاكن ستظهر رسالة  في بداية التشغيل محتواها
كود :
Unregistered skin has been loaded. If you have a key for this skin, please insert it in the KeyList.

.png   2017-05-15_193454.png (الحجم : 16.86 ك ب / التحميلات : 38)

فقمت بالبحث في قوقل ووجدت  هذا الحل المبدئ الذي يقوم بالغاء الرسالة المزعجة
PHP كود :
program Project1;
 
uses
  Windows
, Forms, Unit1;
 
var
  OrigAddr: Pointer = nil;
 
{$R *.res}
 
function InterceptedMessageBoxA(Wnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; stdcall;
type
  TOrigMessageBoxA 
= function(Wnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; stdcall;
begin
  
if lpCaption <> 'Unregistered skin' then
    Result 
:= TOrigMessageBoxA(OrigAddr)(Wnd, lpText, lpCaption, uType);
end;
 
function Intercept(const OldProc, NewProc: FARPROC): Boolean;
var
  ImportEntry: PImageImportDescriptor;
  Thunk: PImageThunkData;
  Protect: DWORD;
  ImageBase: Cardinal;
  DOSHeader: PImageDosHeader;
  NTHeader: PImageNtHeaders;
begin
  Result 
:= False;
  if OldProc = nil then Exit;
  if NewProc = nil then Exit;
  ImageBase := GetModuleHandle(nil);
  DOSHeader := PImageDosHeader(ImageBase);
  NTHeader := PImageNtHeaders(DWORD(DOSHeader) + DWORD(DOSHeader^._lfanew));
  ImportEntry := PImageImportDescriptor(
    DWORD(ImageBase)+
    DWORD(NTHeader^.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress)
  );
  while ImportEntry^.Name <> 0 do begin
    Thunk 
:= PImageThunkData(DWORD(ImageBase) + DWORD(ImportEntry^.FirstThunk));
    while Pointer(Thunk^._function) <> nil do begin
      
if Pointer(Thunk^._function) = OldProc then begin
        
if VirtualProtect(@Thunk^._function, SizeOf(DWORD), PAGE_EXECUTE_READWRITE, Protect) then
        
try
          InterlockedExchange(Integer(Thunk^._function), Integer(NewProc));
          Result := True;
        finally
          VirtualProtect(@Thunk^._function, SizeOf(DWORD), Protect, Protect);
          FlushInstructionCache(GetCurrentProcess, @Thunk^._function, SizeOf(DWORD));
        end;
      end else Inc(PAnsiChar(Thunk), SizeOf(TImageThunkData32));
    end;
    ImportEntry := Pointer(Integer(ImportEntry) + SizeOf(TImageImportDescriptor));
  end;
end;
 
begin
  OrigAddr
:=GetProcAddress(GetModuleHandle(user32), 'MessageBoxA');
  Intercept(OrigAddr, @InterceptedMessageBoxA);
 
  Application
.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end. 
[-] كل من 2 users say قال شكرا ل onexite على المشاركة المفيدة
  • محمد عبد العزيز, bassem_43
الرد
#2
جميل جدا ،
عند تنفيذ البرنامج للتوافق مع بيئة 64 بت ينشأ الخطأ التالي :




إقتباس :un objet constante ne peut etre passé comme parametre var


تحديدا في هذا السطر :
كود :
InterlockedExchange(Integer(Thunk^._function), Integer(NewProc));
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم