
12.05.2013, 15:10
|
Прохожий
|
|
Регистрация: 29.05.2012
Сообщения: 3
Репутация: 10
|
|
Нужна помощь в переноске кода с C++
Собственно код отправляет эмуляцию нажатия клавиши. Код на "C" рабочий, проверял, в моей же переделки полностью бездействует.
Исходный код
Код:
#include <windows.h>
DWORD SendScanCode(WORD scan, BOOL up)
{
INPUT inp = {0};
inp.type = INPUT_KEYBOARD;
inp.ki.wScan = scan;
inp.ki.dwFlags = KEYEVENTF_SCANCODE | (up ? KEYEVENTF_KEYUP : 0);
return SendInput(1, &inp, sizeof(inp)) ? NO_ERROR : GetLastError();
}
DWORD SendVirtualKey(UINT vk, BOOL up)
{
UINT scan = MapVirtualKey(vk, MAPVK_VK_TO_VSC);
return scan ? SendScanCode(scan, up) : ERROR_NO_UNICODE_TRANSLATION;
}
void main()
{
bool dowork = TRUE;
while(dowork == TRUE)
{
if(GetAsyncKeyState(49))
{
SendVirtualKey(VK_TAB, FALSE);
SendVirtualKey(VK_TAB, TRUE);
}
Sleep(100);
}
}
Моя попытка перевести
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
MAPVK_VK_TO_VSC = 0;
{$EXTERNALSYM MAPVK_VK_TO_VSC}
MAPVK_VSC_TO_VK = 1;
{$EXTERNALSYM MAPVK_VSC_TO_VK}
var
Form1: TForm1;
TP: TPoint;
implementation
{$R *.dfm}
function SendScanCode(scan: WORD; up: BOOL):DWORD;
var
inp: TINPUT;
g: ShortInt;
begin
inp.Itype := INPUT_KEYBOARD;
inp.ki.wScan := scan;
if up then g := KEYEVENTF_KEYUP else g := 0;
inp.ki.dwFlags := $8 or g;
result := SendInput(1, inp, sizeof(inp));
end;
function SendVirtualKey(vk: UINT; up: BOOL):DWORD;
var
scan: UINT;
begin
scan := MapVirtualKey(vk, MAPVK_VK_TO_VSC);
result := SendScanCode(scan, up);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if getasynckeystate(ord('1'))<>0 then
begin
SendVirtualKey(VK_TAB, FALSE);
SendVirtualKey(VK_TAB, TRUE);
sleep(100);
end;
end;
end.
|