| | |
| Stránka: 1 z 1
| [ Príspevkov: 23 ] | |
Autor | Správa |
---|
Registrovaný: 21.12.08 Prihlásený: 14.07.16 Príspevky: 114 Témy: 21 | Napísal ha2: 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.
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | Napísal coldak: 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
|
|
Registrovaný: 21.12.08 Prihlásený: 14.07.16 Príspevky: 114 Témy: 21 | Napísal autor témy ha2: 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
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | Napísal coldak: 22.06.2010 15:25 | |
|
no ved to je jedno comu to posles, len musis vediet zistit handle(hwnd) toho objektu
|
|
Registrovaný: 21.12.08 Prihlásený: 14.07.16 Príspevky: 114 Témy: 21 | Napísal autor témy ha2: 22.06.2010 17:11 | |
|
takze zistit handle focus okna a potom focus komponenty? oh
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | Napísal coldak: 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
|
|
Registrovaný: 21.12.08 Prihlásený: 14.07.16 Príspevky: 114 Témy: 21 | Napísal autor témy ha2: 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)
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | Napísal coldak: 25.06.2010 11:57 | |
|
preco to riesis takto ? chces sa vyhnut zistovaniu handle okna ktoremu to mas poslat ?
|
|
Registrovaný: 21.12.08 Prihlásený: 14.07.16 Príspevky: 114 Témy: 21 | Napísal autor témy ha2: 25.06.2010 12:01 | |
|
moc mi to neslo tak som to spravil tak
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | Napísal coldak: 25.06.2010 12:30 | |
|
hm, overil si si ci si spravne nasiel handle okna programom SPY++ ?
|
|
Registrovaný: 21.12.08 Prihlásený: 14.07.16 Príspevky: 114 Témy: 21 | Napísal autor témy ha2: 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
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | Napísal coldak: 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);
|
|
Registrovaný: 21.12.08 Prihlásený: 14.07.16 Príspevky: 114 Témy: 21 | Napísal autor témy ha2: 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
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | Napísal coldak: 25.06.2010 14:36 | |
|
|
|
Registrovaný: 11.01.09 Prihlásený: 19.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 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ť.
|
|
Registrovaný: 21.12.08 Prihlásený: 14.07.16 Príspevky: 114 Témy: 21 | Napísal autor témy ha2: 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)
|
|
Registrovaný: 11.01.09 Prihlásený: 19.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 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ť.
|
|
Registrovaný: 21.12.08 Prihlásený: 14.07.16 Príspevky: 114 Témy: 21 | Napísal autor témy ha2: 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.
|
|
Registrovaný: 21.12.08 Prihlásený: 14.07.16 Príspevky: 114 Témy: 21 | Napísal autor témy ha2: 26.06.2010 20:49 | |
|
Mas pravdu, treba mat inu skratku, a co mam dat do "Msg" ?
|
|
Registrovaný: 11.01.09 Prihlásený: 19.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 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íš.
|
|
Registrovaný: 21.12.08 Prihlásený: 14.07.16 Príspevky: 114 Témy: 21 | Napísal autor témy ha2: 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.
|
|
Registrovaný: 11.01.09 Prihlásený: 19.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 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.
|
|
Registrovaný: 21.12.08 Prihlásený: 14.07.16 Príspevky: 114 Témy: 21 | Napísal autor témy ha2: 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
|
|
| Stránka: 1 z 1
| [ Príspevkov: 23 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| [Delphi] Simulacia "klik na link" [ Choď na stránku: 1, 2 ] v Delphi, Visual Basic | 30 | 1577 | 14.02.2010 23:35 stopa27 | | delphi zapis cisla do editu v delphi v Delphi, Visual Basic | 3 | 1105 | 11.05.2008 12:02 p360t | | simulacia webstranky v lokalnej sieti v Ostatné | 10 | 752 | 18.11.2009 20:08 Tominator | | skratka ctrl+alt+v nefunguje v Externé zariadenia | 2 | 928 | 20.04.2014 9:02 4ndY252 | | Program, ktory sa nespusti bez instalovaneho delphi v Delphi, Visual Basic | 10 | 1229 | 18.09.2007 19:36 audiotrack | | odriadkovanie v ShowMessage v delphi + existencia suboru v Delphi, Visual Basic | 4 | 1044 | 13.01.2009 11:55 chiwo | | webbrowser v delphi v Delphi, Visual Basic | 17 | 2274 | 19.05.2007 14:22 martin90 | | farby v Delphi v Delphi, Visual Basic | 1 | 1046 | 31.01.2008 22:33 Flash99 | | obrazok v delphi v Delphi, Visual Basic | 8 | 1036 | 09.11.2012 16:08 F3RY | | polopriesvitnost v delphi v Delphi, Visual Basic | 8 | 1276 | 11.01.2009 16:04 stopa27 | | prikazy v Delphi v Delphi, Visual Basic | 15 | 5721 | 15.09.2009 14:48 Draco | | Zdroje v Delphi v Delphi, Visual Basic | 1 | 487 | 14.11.2010 18:25 coldak | | pomoc v delphi v Delphi, Visual Basic | 4 | 1510 | 18.11.2006 13:30 p55p | | Pic v delphi v Delphi, Visual Basic | 8 | 763 | 07.12.2008 15:43 shiro | | premenna v Delphi v Delphi, Visual Basic | 1 | 1104 | 21.04.2009 18:00 Fico | | clrscr v delphi v Delphi, Visual Basic | 3 | 1012 | 17.01.2009 17:25 stopa27 |
| 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
|
|