Da li ima i kako se zove komanda u Delphiju za "simulaciju" pritiskanja tastera na tastaturi? kao SendKeys is VBa? Unapred hvala!
Sta je u Delphiju analogno komandi SendKeys iz VBa?
Zaključano
Zakačeno
keybd_event
nisam siguran da smo se razumeli, treba mi komanda koja oponasa pritiskanje tastera... a ne da se nesto desi (event) kada pritisnem taster
Ova procedura radi to sto ti treba.
Code:
procedure SendString(value:string);
var c:byte;
label kraj;
begin
if length(value)=0 then exit;
while length(value)<>0 do begin
c:=byte(value[1]);
if c>=33 then begin
if c<=41 then begin
c:=(c+16);
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
end;
if c>=48 then begin
if c<=57 then begin
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
end;
if c>=65 then begin
if c<=90 then begin
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
end;
if c>=97 then begin
if c<=122 then begin
c:=(c-32);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
end;
if c=58 then begin
c:=190;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=59 then begin
c:=188;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=95 then begin
c:=189;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=167 then begin
c:=51;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=61 then begin
c:=48;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=42 then begin
c:=187;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=43 then c:=187;
if c=44 then c:=188;
if c=46 then c:=190;
if c=45 then c:=189;
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
kraj:
delete(value,1,1);
application.ProcessMessages;
end;
end;
procedure SendString(value:string);
var c:byte;
label kraj;
begin
if length(value)=0 then exit;
while length(value)<>0 do begin
c:=byte(value[1]);
if c>=33 then begin
if c<=41 then begin
c:=(c+16);
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
end;
if c>=48 then begin
if c<=57 then begin
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
end;
if c>=65 then begin
if c<=90 then begin
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
end;
if c>=97 then begin
if c<=122 then begin
c:=(c-32);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
end;
if c=58 then begin
c:=190;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=59 then begin
c:=188;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=95 then begin
c:=189;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=167 then begin
c:=51;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=61 then begin
c:=48;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=42 then begin
c:=187;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=43 then c:=187;
if c=44 then c:=188;
if c=46 then c:=190;
if c=45 then c:=189;
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
kraj:
delete(value,1,1);
application.ProcessMessages;
end;
end;
probacu, hvala ;)
nego je tu rade i alt, ctrl, shift ??? i u kom obliku da ih prosledim f-iji?
nego je tu rade i alt, ctrl, shift ??? i u kom obliku da ih prosledim f-iji?
Šaljem ti izmenjenu proceduru, tako da podržava i Alt, Ctrl, Shift ...
Sve ostalo možeš da proslediš preko Virtual-Key kodova, spisak potraži u helpu.
Code:
procedure SendString(value:string; Shift:TShiftState; Other:byte);
var c:byte;
label kraj;
begin
If ssShift in Shift then keybd_event(VK_SHIFT, 0, 0,0);
If ssAlt in Shift then keybd_event(VK_MENU, 0, 0,0);
If ssCtrl in Shift then keybd_event(VK_CONTROL, 0, 0,0);
If ssLeft in Shift then keybd_event(VK_LBUTTON, 0, 0,0);
If ssMiddle in Shift then keybd_event(VK_MBUTTON, 0, 0,0);
If ssRight in Shift then keybd_event(VK_RBUTTON, 0, 0,0);
If Other<>0 then keybd_event(Other, 0, 0,0);
if length(value)=0 then exit;
while length(value)<>0 do begin
c:=byte(value[1]);
if c>=33 then begin
if c<=41 then begin
c:=(c+16);
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
end;
if c>=48 then begin
if c<=57 then begin
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
end;
if c>=65 then begin
if c<=90 then begin
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
end;
if c>=97 then begin
if c<=122 then begin
c:=(c-32);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
end;
if c=58 then begin
c:=190;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=59 then begin
c:=188;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=95 then begin
c:=189;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=167 then begin
c:=51;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=61 then begin
c:=48;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=42 then begin
c:=187;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=43 then c:=187;
if c=44 then c:=188;
if c=46 then c:=190;
if c=45 then c:=189;
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
kraj:
delete(value,1,1);
application.ProcessMessages;
end;
If ssShift in Shift then keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
If ssAlt in Shift then keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP,0);
If ssCtrl in Shift then keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP,0);
If ssLeft in Shift then keybd_event(VK_LBUTTON, 0, KEYEVENTF_KEYUP,0);
If ssMiddle in Shift then keybd_event(VK_MBUTTON, 0, KEYEVENTF_KEYUP,0);
If ssRight in Shift then keybd_event(VK_RBUTTON, 0, KEYEVENTF_KEYUP,0);
If Other<>0 then keybd_event(Other, 0, KEYEVENTF_KEYUP,0);
end;
procedure SendString(value:string; Shift:TShiftState; Other:byte);
var c:byte;
label kraj;
begin
If ssShift in Shift then keybd_event(VK_SHIFT, 0, 0,0);
If ssAlt in Shift then keybd_event(VK_MENU, 0, 0,0);
If ssCtrl in Shift then keybd_event(VK_CONTROL, 0, 0,0);
If ssLeft in Shift then keybd_event(VK_LBUTTON, 0, 0,0);
If ssMiddle in Shift then keybd_event(VK_MBUTTON, 0, 0,0);
If ssRight in Shift then keybd_event(VK_RBUTTON, 0, 0,0);
If Other<>0 then keybd_event(Other, 0, 0,0);
if length(value)=0 then exit;
while length(value)<>0 do begin
c:=byte(value[1]);
if c>=33 then begin
if c<=41 then begin
c:=(c+16);
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
end;
if c>=48 then begin
if c<=57 then begin
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
end;
if c>=65 then begin
if c<=90 then begin
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
end;
if c>=97 then begin
if c<=122 then begin
c:=(c-32);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
end;
if c=58 then begin
c:=190;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=59 then begin
c:=188;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=95 then begin
c:=189;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=167 then begin
c:=51;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=61 then begin
c:=48;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=42 then begin
c:=187;
keybd_event(VK_SHIFT, 0, 0,0);
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
goto kraj;
end;
if c=43 then c:=187;
if c=44 then c:=188;
if c=46 then c:=190;
if c=45 then c:=189;
keybd_event(c, 0, 0,0);
keybd_event(c, 0, KEYEVENTF_KEYUP,0);
kraj:
delete(value,1,1);
application.ProcessMessages;
end;
If ssShift in Shift then keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP,0);
If ssAlt in Shift then keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP,0);
If ssCtrl in Shift then keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP,0);
If ssLeft in Shift then keybd_event(VK_LBUTTON, 0, KEYEVENTF_KEYUP,0);
If ssMiddle in Shift then keybd_event(VK_MBUTTON, 0, KEYEVENTF_KEYUP,0);
If ssRight in Shift then keybd_event(VK_RBUTTON, 0, KEYEVENTF_KEYUP,0);
If Other<>0 then keybd_event(Other, 0, KEYEVENTF_KEYUP,0);
end;
Sve ostalo možeš da proslediš preko Virtual-Key kodova, spisak potraži u helpu.
Imam neki unit koji mislim da radi sve sta ti treba po tom pitanju.
postavicu ga na sledecu adresu: www.marettasoftware.com/files/sndKey32.pas
Pozdrav
postavicu ga na sledecu adresu: www.marettasoftware.com/files/sndKey32.pas
Pozdrav
@Jovan Prokopović: 10x probacu
@Vdjuric link ti nereadi :(
@Vdjuric link ti nereadi :(
probaj sa www.marettasoftware.com/files/code.txt
Tejk a luk et atačment