[ markone @ 17.09.2006. 16:40 ] @
Da li ima i kako se zove komanda u Delphiju za "simulaciju" pritiskanja tastera na tastaturi? kao SendKeys is VBa? Unapred hvala!
[ _deran_ @ 17.09.2006. 18:09 ] @
keybd_event
[ markone @ 21.09.2006. 17:42 ] @
nisam siguran da smo se razumeli, treba mi komanda koja oponasa pritiskanje tastera... a ne da se nesto desi (event) kada pritisnem taster
[ Jovan Prokopović @ 22.09.2006. 00:22 ] @
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;
[ markone @ 24.09.2006. 10:08 ] @
probacu, hvala ;)

nego je tu rade i alt, ctrl, shift ??? i u kom obliku da ih prosledim f-iji?
[ Jovan Prokopović @ 24.09.2006. 21:33 ] @
Šaljem ti izmenjenu proceduru, tako da podržava i Alt, Ctrl, Shift ...

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;


Sve ostalo možeš da proslediš preko Virtual-Key kodova, spisak potraži u helpu.
[ Vdjuric @ 25.09.2006. 10:43 ] @
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
[ markone @ 25.09.2006. 23:24 ] @
@Jovan Prokopović: 10x probacu
@Vdjuric link ti nereadi :(
[ Vdjuric @ 26.09.2006. 08:59 ] @
probaj sa www.marettasoftware.com/files/code.txt
[ Nemanja Avramović @ 26.09.2006. 12:15 ] @
Tejk a luk et atačment