
PostMessage - virtuální stisknutí kláves
Ahoj,
řeším problém, jak "stistknout" např. Ctrl + X.
Umím poslat jednotlivé písmena, ale neumím posílat písmena se stisknutým modifikátorem (ctrl, shift).
Jak na to?
Písemka se dají snadno poslat takhle:
PostMessahe hWnd, WM_KEYDOWN, VK_X, 0
Díky!
msdn.microsoft.com
a najdi si WM_KEYDOWN
... prip. si najdi aj fciu SendInput, alebo keybd_event, ale vpodstate by mal stacit aj WM_KEYDOWN a WM_KEYUP (posles jeden keydown pre klavesu shift alebo alt, dalsi pre tu tvoju klavesu, a potom keyup pre obe).
V podstatě takto jsem to zkoušel. Tam je problém, že se nějakým způsobem musí nastavit i lParam (druhý parametr), ale já nevím jak. Zkopírováním z Spy++ to nefungovalo.
Ty nevies ani citat? Nie, nastavenie lparam ani wparam problem nie je. problem je ze nevies co robis, preto si o tom nieco najprv precitaj na msdn.microsoft.com.
Alebo si precitaj moju predoslu odpoved este raz a pomaly.
Ahoj,
tam je problém, že SendInput či SendKeys ty klávesy předávají jen aplikaci, která ma focus.
Já pomocí PostMessage posílám ty zprávy jiné aplikaci (ke které mám handle).
Našel jsem řešení v Delphi (http://www.delphitricks.com/source-code/windows/sim ulate_the_pressing_of_keyboard_keys.html), fce PostKeyExHWND, akorát bych to potřeboval dostat do VB. Potřebuji vlastně jen nějak přijít na to, jaké wParam a lParam mám poslat. Zkoušel jsem je "odkoukat" pomocí Spy++, ale nepodařilo se mi je zopakovat. Ještě budu laborovat.
Při nejhorším udělám delphi app, která jen provede požadované stisky kláves a ukončí se
tak od teba by som SW nechcel ani zadarmo.
Preco si najprv nepozres MSDN a neprecitas si trochu o keyboard input? Stav klaves alt atd sa neposiela cez wparam a lparam ale vo Win su viacere mechanizmy ktore to beru do uvahy (najprv na systemovej a potom na aplikacnej urovni) a preto to nie je tak easy ako by si si to predstavoval.
Ak su obe aplikacie tvoje, tak to nerob cez klavesy ptz to je nebezpecne, ale cez posielanie napr. WM_USER+neco, alebo posielanim priamo menu commandov (WM_COMMAND)
Alebo si pozri tu fciu SendInput
Nechtěj
ale i přesto Ti moc děkuju. Pomohl jsi mi, už to funguje
Este nieco kedze si pisal ze to posielas aplikacii ktora nema focus (som to predtym nejak prehliadol), tak SendInput nemozes pouzit (to by malo byt pre cely system), ale mohlo by ti este pomoct GetKeyboardState a SetKeyboardState, to je podla MSDN thread-specific, ak by ti to neslo urobit posielanim WM_KEYDOWN.