IT NEWS PC REVUE PC FORUMInternet time: @604
Obsah fóra
Pravidlá  •  Kontakt  •  Prihlásenie  •  Registrácia

Kúpele za najlepšie ceny roka

Jedinečná ponuka - objednajte si pobyt za najnižšiu cenu - január až marec 2012 www.kupele-teplice.sk

PSS: Úvery na bývanie od 1,69%

Využite výnimočnú ponuku teraz! Platí len do 31. marca 2012. www.pss.sk

Zdravé sedenie

Bolí Vás hlava, chrbát, celý človek ? Vyskúšali ste už stoličky THERAPIA ? bmnabytok.sk

Potrebujete si privyrobiť?

stačí vyplniť dotazník či anketu. Navyše môžete vyhrať iPad2! www.marketagent.com

Našiel som spôsob bieliť zuby.

Podarilo sa mi vybieliť si zuby bez drahých procedúr u zubára. www.zuzaninblog.com

[Delphi] Simulacia ctrl+v bez clipboardu

Zaslať odpoveď
AutorSpráva
ha2
Užívateľ
Užívateľ

Založený: 21.12.2008
Príspevky: 112

PríspevokZaslal: Ut 22.06.10 13:41Odpovedať s citátomNávrat hore

Potrebujem simulovat ctrl+v teda pastnutie textu ale bez clipboardu.

priklad mam text1:='a'; text2:='b'; text3:='c';

zaregistrujem si 3 klavesove skratky v systeme napr ctrl+a, ctrl+b ctrl+c
a teraz potrebujem aby po stlaceni druhej mi napr do otvoreneho notpadu vlozilo text2. Ale nie cez clipboard a simulaciu ctrl+v.
Zobraziť informácie o autoroviOdoslať súkromnú správu
coldak
Skúsený užívateľ
Skúsený užívateľ

Založený: 29.10.2008
Príspevky: 927

PríspevokZaslal: Ut 22.06.10 14:14Odpovedať s citátomNávrat hore

no to bude zlozitejsie kedze notepad ma vlastny pamatovy priestor. ale mozes miesto copy paste pouzit simulovanie stlacania klaves cize ak das ctrl+b tak notepadu zasles sequenciu messages wm_char s kodmy stringu v text2 . myslim ze wparam bude obsahovat kod znaku http://msdn.microsoft.com/en-us/library/ms646276%28VS.85%29.aspx
Zobraziť informácie o autoroviOdoslať súkromnú správu
ha2
Užívateľ
Užívateľ

Založený: 21.12.2008
Príspevky: 112

PríspevokZaslal: Ut 22.06.10 14:21Odpovedať s citátomNávrat hore

no lenze ja to potrebujem vseobecne, notpad bol priklad, proste hocico co ma focus tak tam vopcham svoj text. notpad, browser, word hocico, proste simulacia ctrl+v len sa chcem vyhnut clipboardu. Neviem nic take naguglit
Zobraziť informácie o autoroviOdoslať súkromnú správu
coldak
Skúsený užívateľ
Skúsený užívateľ

Založený: 29.10.2008
Príspevky: 927

PríspevokZaslal: Ut 22.06.10 14:25Odpovedať s citátomNávrat hore

no ved to je jedno comu to posles, len musis vediet zistit handle(hwnd) toho objektu
Zobraziť informácie o autoroviOdoslať súkromnú správu
ha2
Užívateľ
Užívateľ

Založený: 21.12.2008
Príspevky: 112

PríspevokZaslal: Ut 22.06.10 16:11Odpovedať s citátomNávrat hore

takze zistit handle focus okna a potom focus komponenty? oh
Zobraziť informácie o autoroviOdoslať súkromnú správu
coldak
Skúsený užívateľ
Skúsený užívateľ

Založený: 29.10.2008
Príspevky: 927

PríspevokZaslal: Ut 22.06.10 20:45Odpovedať s citátomNávrat hore

bingo, skus getForegroundwindow alebo getActivewindow alebo GetFocus aj komponenta je vacsinou odvodena od window cize na HWND aby mohla preberat messages
Zobraziť informácie o autoroviOdoslať súkromnú správu
ha2
Užívateľ
Užívateľ

Založený: 21.12.2008
Príspevky: 112

PríspevokZaslal: Pi 25.06.10 10:31Odpovedať s citátomNávrat hore

tak mam to zatial cez clipboard ale ...

ked pastujem cez simulovane ctrl+v tak mi to nechce pastovat cez hotkey kde je ALT, napr ctrl+alt+x

pastujem tymto
kód:

keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0);
keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), 0, 0);
keybd_event(Ord('V'), MapVirtualKey(Ord('V'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0)
Zobraziť informácie o autoroviOdoslať súkromnú správu
coldak
Skúsený užívateľ
Skúsený užívateľ

Založený: 29.10.2008
Príspevky: 927

PríspevokZaslal: Pi 25.06.10 10:57Odpovedať s citátomNávrat hore

preco to riesis takto ? chces sa vyhnut zistovaniu handle okna ktoremu to mas poslat ?
Zobraziť informácie o autoroviOdoslať súkromnú správu
ha2
Užívateľ
Užívateľ

Založený: 21.12.2008
Príspevky: 112

PríspevokZaslal: Pi 25.06.10 11:01Odpovedať s citátomNávrat hore

moc mi to neslo tak som to spravil tak
Zobraziť informácie o autoroviOdoslať súkromnú správu
coldak
Skúsený užívateľ
Skúsený užívateľ

Založený: 29.10.2008
Príspevky: 927

PríspevokZaslal: Pi 25.06.10 11:30Odpovedať s citátomNávrat hore

hm, overil si si ci si spravne nasiel handle okna programom SPY++ ?
Zobraziť informácie o autoroviOdoslať súkromnú správu
ha2
Užívateľ
Užívateľ

Založený: 21.12.2008
Príspevky: 112

PríspevokZaslal: Pi 25.06.10 11:54Odpovedať s citátomNávrat hore

problem nieje v tom ci si najdem handle focus okna ale vtom ze nemam sajnu co dalej guglim ale nic podobne som nenasiel
Zobraziť informácie o autoroviOdoslať súkromnú správu
coldak
Skúsený užívateľ
Skúsený užívateľ

Založený: 29.10.2008
Príspevky: 927

PríspevokZaslal: Pi 25.06.10 12:11Odpovedať s citátomNávrat hore

clipboard si asi naplnas cez triedu TClipboard no a ked uz vies handle okna ktore ma urobit paste pomocou SendMessage(handleokna, WM_PASTE, 0, 0); popripade PostMessage(handleokna, WM_PASTE, 0, 0);
Zobraziť informácie o autoroviOdoslať súkromnú správu
ha2
Užívateľ
Užívateľ

Založený: 21.12.2008
Príspevky: 112

PríspevokZaslal: Pi 25.06.10 13:28Odpovedať s citátomNávrat hore

kód:
procedure paste;
var Handle: THandle;
begin
   Handle := GetForegroundWindow;
   SendMessage(handle, WM_PASTE, 0, 0)
end;


len neviem ako zistit handle focus komponenty, nerobil som s tym este

a inak to uz rovno mozem namiesto paste z clipboardu pastnut vlastny text, to by som tiez rad vedel ako
Zobraziť informácie o autoroviOdoslať súkromnú správu
coldak
Skúsený užívateľ
Skúsený užívateľ

Založený: 29.10.2008
Príspevky: 927

PríspevokZaslal: Pi 25.06.10 13:36Odpovedať s citátomNávrat hore

skus getFocus

http://msdn.microsoft.com/en-us/library/ms646294%28VS.85%29.aspx
Zobraziť informácie o autoroviOdoslať súkromnú správu
Fico
Skúsený užívateľ
Skúsený užívateľ

Založený: 11.01.2009
Príspevky: 909

PríspevokZaslal: Pi 25.06.10 13:40Odpovedať s citátomNávrat hore

Možno ti pomôže nejaký príklad:
kód:
var
  hForWindow, hForControl: HWND;
  buf: array[0..1023] of byte;
  procID: integer;

// .....

procedure AddText;
var
  i: integer;

begin

  FillChar(buf, 1024, 0);
  strcopy(@buf, 'toto sa prida do textu');
  hForWindow:= GetForegroundWindow();                       // zisti handle aktivneho okna
  procID:= GetWindowThreadProcessID(hForWindow, nil);
  AttachThreadInput(procID, GetCurrentThreadId(), true);    // attachne sa do procesu tohto okna
  hForControl:= GetFocus();                                 // zisti handle aktivneho komponentu v tomto okne
  AttachThreadInput(procID, GetCurrentThreadId(), false);   // spät do nasho procesu

  for i:= 0 to length(buf) do                               // posielaj spravy WM_CHAR
      if ( buf[i] <> 0 ) then SendMessage( hForControl, WM_CHAR, buf[i], 0 )
                         else break;

end;


procedure TForm1.Timer1Timer(Sender: TObject);
begin

  AddText;
  Timer1.Enabled:= false;

end;


Timer si nastav aspoň na päť sekúnd a po štarte nech je zapnutý. Ak spustíš aplikáciu, presuň sa napr do notepadu a skús, či to robí to čo chceš. Ak áno, tak si to už len patrične uprav na tvoje skratky, ak nie, napíš, ako to treba upraviť.
Zobraziť informácie o autoroviOdoslať súkromnú správuICQ
Zobraziť príspevky z predchádzajúcich:    
Zaslať odpoveď
Nemôžete pridávať nové témy do tohto fóra.
Nemôžete odpovedať na témy v tomto fóre.
Nemôžete upravovať svoje príspevky v tomto fóre.
Nemôžete mazať svoje príspevky v tomto fóre.
Nemôžete hlasovať v tomto fóre.

Powered by phpBB 2.x.x © 2005 - 2012 PCforum, webhosting by WebSupport, edited by JanoF