Change resource strings at runtime.

Post date: Mar 9, 2010 11:42:17 AM

This snippet shows you how to modify resource strings at runtime of an application:

uses
    Consts;
procedure TForm1.Button1Click(Sender: TObject);
begin
    InputBox('Test', 'Enter something', 'Test');
end;
procedure HookResourceString(rs: PResStringRec; newStr: PChar);
var
    oldprotect: DWORD;
begin
    VirtualProtect(rs, SizeOf(rs^), PAGE_EXECUTE_READWRITE, @oldProtect);
    rs^.Identifier := Integer(newStr);
    VirtualProtect(rs, SizeOf(rs^), oldProtect, @oldProtect);
end;
const
    NewOK: PChar = 'New Ok';
    NewCancel: PChar = 'New Cancel';
initialization
    HookResourceString(@SMsgDlgOK, NewOK);
    HookResourceString(@SMsgDlgCancel, NewCancel);
end.