Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 23 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21
Príspevok NapísalOffline : 22.06.2010 14:41

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.


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 22.06.2010 15:14

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 ... 85%29.aspx


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21
Príspevok Napísal autor témyOffline : 22.06.2010 15:21

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


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 22.06.2010 15:25

no ved to je jedno comu to posles, len musis vediet zistit handle(hwnd) toho objektu


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21
Príspevok Napísal autor témyOffline : 22.06.2010 17:11

takze zistit handle focus okna a potom focus komponenty? oh :)


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 22.06.2010 21:45

bingo, skus getForegroundwindow alebo getActivewindow alebo GetFocus aj komponenta je vacsinou odvodena od window cize na HWND aby mohla preberat messages


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21
Príspevok Napísal autor témyOffline : 25.06.2010 11:31

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)


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 25.06.2010 11:57

preco to riesis takto ? chces sa vyhnut zistovaniu handle okna ktoremu to mas poslat ?


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21
Príspevok Napísal autor témyOffline : 25.06.2010 12:01

moc mi to neslo tak som to spravil tak


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 25.06.2010 12:30

hm, overil si si ci si spravne nasiel handle okna programom SPY++ ?


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21
Príspevok Napísal autor témyOffline : 25.06.2010 12:54

problem nieje v tom ci si najdem handle focus okna ale vtom ze nemam sajnu co dalej :) guglim ale nic podobne som nenasiel


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 25.06.2010 13:11

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);


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21
Príspevok Napísal autor témyOffline : 25.06.2010 14:28

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


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 25.06.2010 14:36

skus getFocus

http://msdn.microsoft.com/en-us/library ... 85%29.aspx


Offline

Skúsený užívateľ
Skúsený užívateľ
[Delphi] Simulacia ctrl+v bez clipboardu

Registrovaný: 11.01.09
Prihlásený: 19.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 25.06.2010 14:40

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ť.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21
Príspevok Napísal autor témyOffline : 25.06.2010 15:11

Vdaka Fico. Ten cyklus "for i:= 0 to length(buf) do" sa mi zda ok, ale pastuje mi to iba prvy znak. A co som skusal bezne programy, vsade to ide len do xchat nie :|

edit: no neviem neviem ci to je dobra cesta, ked si to dam na klav. skratku a dam sa napr. do mozily tak to namiesto vlozenia textu otvori novy tab :) pricom do notpadu to pekne vklada (s timerom to slo dobre)


Offline

Skúsený užívateľ
Skúsený užívateľ
[Delphi] Simulacia ctrl+v bez clipboardu

Registrovaný: 11.01.09
Prihlásený: 19.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 25.06.2010 16:59

ha2 píše:
ked si to dam na klav. skratku a dam sa napr. do mozily tak to namiesto vlozenia textu otvori novy tab

Mozilla má takisto svoje prednastavené hot keys, takže je možné, že tam vznikla akási kolízia. Preto je lepšie použiť nejakú skratku, ktorú nepoužíva. Skús program upraviť takto:
Kód:
procedure TForm1.AddText(var Msg: TMessage);
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 fokus 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.FormCreate(Sender: TObject);
begin

  RegisterHotKey( Handle, 85, MOD_CONTROL OR MOD_ALT , 85 );
  RegisterHotKey( Handle, 117, MOD_CONTROL OR MOD_ALT, 117 );

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin

  UnregisterHotKey( Handle, 85 );
  UnregisterHotKey( Handle, 117 );

end;


Pričom do hlavnej triedy TForm1 pridaj riadok:
Kód:
    procedure AddText(var Msg: TMessage);
      message WM_HOTKEY;


To zaistí, že táto funkcia sa spustí vždy po stlačení skratky CTR+ALT+U (to si zmeň ako treba vo funkcii RegisterHotKey. Vyhneš sa tak použitiu clipboardu, no tú skratku, ako vravím, musíš použiť tak, aby ju nemala zaregistrovaná žiadna aplikácia, v ktorej to chceš aplikovať.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21
Príspevok Napísal autor témyOffline : 25.06.2010 18:11

Zatial vdaka, no skusim az zajtra pretoze nemam cas ... skratky si preregistrujem nie? ved som si skusal aj napr. ctrl+c a prebil som si to na vlastnu udalost alebo alt+f4.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21
Príspevok Napísal autor témyOffline : 26.06.2010 20:49

Mas pravdu, treba mat inu skratku, a co mam dat do "Msg" ?


Offline

Skúsený užívateľ
Skúsený užívateľ
[Delphi] Simulacia ctrl+v bez clipboardu

Registrovaný: 11.01.09
Prihlásený: 19.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 26.06.2010 21:00

Nepochopil som otázke. Ale Msg je štruktúra, ktorú vyplňuje systém, ty nič nevyplňuješ. Sú v nej informácie o prijatej správe (window message správe). Funkcia AddText sa vykoná vždy, ak hlavnému oknu dorazí správa WM_HOTKEY (ak bude detekované stlačenie zaregistrovanej klávesovej skratky), tzn že ty ju v programe nikde volať nemusíš.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21
Príspevok Napísal autor témyOffline : 26.06.2010 21:18

Presne takto som to mal len v inej procedure (asi som prepracovany). No len to pastuje iba prvy znak neviem preco.


Offline

Skúsený užívateľ
Skúsený užívateľ
[Delphi] Simulacia ctrl+v bez clipboardu

Registrovaný: 11.01.09
Prihlásený: 19.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 26.06.2010 21:26

Skúšal si to na viacerých aplikáciach? Lebo mne to zatiaľ na každej funguje. Ak ti to robí všade, skús nastaviť breakpoint niekde v tele funkcie AddText a sleduj, kde sa preruší alebo proste kde sa niečo nevykoná a potom sem napíš čo sa deje.


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 21.12.08
Prihlásený: 14.07.16
Príspevky: 114
Témy: 21
Príspevok Napísal autor témyOffline : 27.06.2010 14:07

tak prve co ma napadlo sa potvrdilo. V D7 to funguje dobre v 2010 nie...A tu 2010 potrebujem,pekne :)


Odpovedať na tému [ Príspevkov: 23 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. [Delphi] Simulacia "klik na link"

[ Choď na stránku:Choď na stránku: 1, 2 ]

v Delphi, Visual Basic

30

1577

14.02.2010 23:35

stopa27 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. delphi zapis cisla do editu v delphi

v Delphi, Visual Basic

3

1105

11.05.2008 12:02

p360t Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. simulacia webstranky v lokalnej sieti

v Ostatné

10

752

18.11.2009 20:08

Tominator Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. skratka ctrl+alt+v nefunguje

v Externé zariadenia

2

928

20.04.2014 9:02

4ndY252 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Program, ktory sa nespusti bez instalovaneho delphi

v Delphi, Visual Basic

10

1229

18.09.2007 19:36

audiotrack Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. odriadkovanie v ShowMessage v delphi + existencia suboru

v Delphi, Visual Basic

4

1044

13.01.2009 11:55

chiwo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. webbrowser v delphi

v Delphi, Visual Basic

17

2274

19.05.2007 14:22

martin90 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. farby v Delphi

v Delphi, Visual Basic

1

1046

31.01.2008 22:33

Flash99 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. obrazok v delphi

v Delphi, Visual Basic

8

1036

09.11.2012 16:08

F3RY Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. polopriesvitnost v delphi

v Delphi, Visual Basic

8

1276

11.01.2009 16:04

stopa27 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. prikazy v Delphi

v Delphi, Visual Basic

15

5721

15.09.2009 14:48

Draco Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zdroje v Delphi

v Delphi, Visual Basic

1

487

14.11.2010 18:25

coldak Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. pomoc v delphi

v Delphi, Visual Basic

4

1510

18.11.2006 13:30

p55p Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Pic v delphi

v Delphi, Visual Basic

8

763

07.12.2008 15:43

shiro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. premenna v Delphi

v Delphi, Visual Basic

1

1104

21.04.2009 18:00

Fico Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. clrscr v delphi

v Delphi, Visual Basic

3

1012

17.01.2009 17:25

stopa27 Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
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

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra