[ 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 | 21
NapísalOffline : 22.06.2010 14:41 | [Delphi] Simulacia ctrl+v bez clipboardu

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 | 2

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 | 21
Napísal autor témyOffline : 22.06.2010 15:21 | [Delphi] Simulacia ctrl+v bez clipboardu

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 | 2

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 | 21
Napísal autor témyOffline : 22.06.2010 17:11 | [Delphi] Simulacia ctrl+v bez clipboardu

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 | 2

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 | 21
Napísal autor témyOffline : 25.06.2010 11:31 | [Delphi] Simulacia ctrl+v bez clipboardu

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 | 2

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 | 21
Napísal autor témyOffline : 25.06.2010 12:01 | [Delphi] Simulacia ctrl+v bez clipboardu

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 | 2

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 | 21
Napísal autor témyOffline : 25.06.2010 12:54 | [Delphi] Simulacia ctrl+v bez clipboardu

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 | 2

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 | 21
Napísal autor témyOffline : 25.06.2010 14:28 | [Delphi] Simulacia ctrl+v bez clipboardu

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 | 2

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ý: 26.10.26
Príspevky: 1401
Témy: 10 | 10
Bydlisko: Hrinova

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 | 21
Napísal autor témyOffline : 25.06.2010 15:11 | [Delphi] Simulacia ctrl+v bez clipboardu

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ý: 26.10.26
Príspevky: 1401
Témy: 10 | 10
Bydlisko: Hrinova

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 | 21
Napísal autor témyOffline : 25.06.2010 18:11 | [Delphi] Simulacia ctrl+v bez clipboardu

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 | 21
Napísal autor témyOffline : 26.06.2010 20:49 | [Delphi] Simulacia ctrl+v bez clipboardu

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ý: 26.10.26
Príspevky: 1401
Témy: 10 | 10
Bydlisko: Hrinova

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 | 21
Napísal autor témyOffline : 26.06.2010 21:18 | [Delphi] Simulacia ctrl+v bez clipboardu

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ý: 26.10.26
Príspevky: 1401
Témy: 10 | 10
Bydlisko: Hrinova

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 | 21
Napísal autor témyOffline : 27.06.2010 14:07 | [Delphi] Simulacia ctrl+v bez clipboardu

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


 [ Príspevkov: 23 ] 


[Delphi] Simulacia ctrl+v bez clipboardu



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 Ostatné

30

1745

14.02.2010 23:35

stopa27

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

delphi zapis cisla do editu v delphi

v Ostatné

3

1227

11.05.2008 12:02

p360t

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

simulacia webstranky v lokalnej sieti

v Ostatné

10

880

18.11.2009 20:08

Tominator

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

skratka ctrl+alt+v nefunguje

v Externé zariadenia

2

1152

20.04.2014 9:02

4ndY252

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

Program, ktory sa nespusti bez instalovaneho delphi

v Ostatné

10

1337

18.09.2007 19:36

audiotrack

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

odriadkovanie v ShowMessage v delphi + existencia suboru

v Ostatné

4

1135

13.01.2009 11:55

chiwo

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

pomoc v delphi

v Ostatné

4

1597

18.11.2006 13:30

p55p

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

farby v Delphi

v Ostatné

1

1111

31.01.2008 22:33

Flash99

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

obrazok v delphi

v Ostatné

8

1117

09.11.2012 16:08

F3RY

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

prikazy v Delphi

v Ostatné

15

5846

15.09.2009 14:48

Draco

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

polopriesvitnost v delphi

v Ostatné

8

1342

11.01.2009 16:04

stopa27

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

Zdroje v Delphi

v Ostatné

1

562

14.11.2010 18:25

coldak

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

Pic v delphi

v Ostatné

8

894

07.12.2008 15:43

shiro

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

webbrowser v delphi

v Ostatné

17

2397

19.05.2007 14:22

martin90

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

premenna v Delphi

v Ostatné

1

1187

21.04.2009 18:00

FITrepairs

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

clrscr v delphi

v Ostatné

3

1081

17.01.2009 17:25

stopa27



© 2005 - 2026 PCforum, edited by JanoF