delphi - Does anyone know how to programatically press a key exactly the same as if it were pressed on a keyboard? -



delphi - Does anyone know how to programatically press a key exactly the same as if it were pressed on a keyboard? -

does know how programatically press key same if pressed on keyboard? postmessage fails, sendinput fails, keybd_event fails, sendmessage fails , tried unusual way of mimicing key press using vcl.touch.keyboard. wrote quick vb script file calling sendkeys failed. have been have having problem trying doing on programme called sellerdeck http://www.sellerdeck.com/

i have tried of following, work notepad fail on program. window brought forground by

procedure bringtoforegroung; var findhandle1 : cardinal; begin findhandle1 := findwindow(nil, 'business plus - test site: online catalogue'); showwindow(findhandle1,sw_show); setforegroundwindow(findhandle1); end; 1. procedure sendf10; var findhandle1 : cardinal; begin findhandle1 := findwindow(nil, 'business plus - test site: online catalogue'); showwindow(findhandle1,sw_show); setforegroundwindow(findhandle1); postmessage(findhandle1, wm_keydown, vk_f10, 0); postmessage(findhandle1, wm_keyup, vk_f10, 0); end; 2. procedure sendaltf; var keyinputs: array of tinput; //-------------------------------------------- procedure keybdinput(vkey: byte; flags: dword); begin setlength(keyinputs, length(keyinputs)+1); keyinputs[high(keyinputs)].itype := input_keyboard; keyinputs[high(keyinputs)].ki begin wvk := vkey; wscan := mapvirtualkey(wvk, 0); dwflags := flags; end; end; begin keybdinput(vk_menu, 0); // alt keybdinput(ord('f'), 0); keybdinput(ord('f'), keyeventf_keyup); keybdinput(vk_menu, keyeventf_keyup); // alt sendinput(length(keyinputs), keyinputs[0], sizeof(keyinputs[0])); end; 3. procedure sendkey2(wnd,vk : cardinal; ctrl,alt,shift : boolean); var mc,ma,ms : boolean; begin // seek bring target window foreground showwindow(wnd,sw_show); setforegroundwindow(wnd); // current state of modifier keys mc:=hi(getasynckeystate(vk_control))>127; ma:=hi(getasynckeystate(vk_menu))>127; ms:=hi(getasynckeystate(vk_shift))>127; // press modifier keys if necessary (unless pressed real user) if ctrl<>mc keybd_event(vk_control,0,byte(mc)*keyeventf_keyup,0); if alt<>ma keybd_event(vk_menu,0,byte(ma)*keyeventf_keyup,0); if shift<>ms keybd_event(vk_shift,0,byte(ms)*keyeventf_keyup,0); // press key keybd_event(vk,0,0,0); keybd_event(vk,0,keyeventf_keyup,0); // release modifier keys if necessary if ctrl<>mc keybd_event(vk_control,0,byte(ctrl)*keyeventf_keyup,0); if alt<>ma keybd_event(vk_menu,0,byte(alt)*keyeventf_keyup,0); if shift<>ms keybd_event(vk_shift,0,byte(shift)*keyeventf_keyup,0); end; 4. procedure sendf10v2; var findhandle1 : cardinal; begin findhandle1 := findwindow(nil, 'business plus - test site: online catalogue'); showwindow(findhandle1,sw_show); setforegroundwindow(findhandle1); sendmessage(findhandle1, wm_keydown, vk_f10, 0); sendmessage(findhandle1, wm_keyup, vk_f10, 0); end; 5. uses vcl.touch.keyboard, vcl.touch.keyboardtypes; type procedure formcreate(sender: tobject); protected {i.e. dont create form active} procedure createparams(var params: tcreateparams); override; {i.e. dont create keyboard form active} procedure tform1.createparams(var params: tcreateparams); begin inherited createparams(params); params begin exstyle := exstyle or ws_ex_noactivate; wndparent := getdesktopwindow; end; end; procedure tform1.speedbutton1click(sender: tobject); var keydata: tkeydata; begin keydata := vkey(vk_f10, -1); sendkey(keydata, ksdown); sendkey(keydata, ksup); end; 6. (vbs) option explicit dim objshell set objshell = createobject("wscript.shell") objshell.run """c:\program files (x86)\sellerdeck 2013\catalog.exe"" /s ""test site"" /n administrator /w administrator", 0, true wscript.sleep 10000 objshell.sendkeys "%f" wscript.sleep 1000 objshell.sendkeys "%f" wscript.sleep 1000 objshell.sendkeys "%f" wscript.sleep 1000 objshell.sendkeys "%f" wscript.sleep 1000 objshell.sendkeys "%f" wscript.sleep 1000 objshell.sendkeys "%f" wscript.quit

as said all, of these work in notepad, otherwise think pc problem. trying automate basic tasks on sellerdeck program. there anyway mimic key press? hope missing basic. please help me someone.

the next code works fine me:

procedure tform1.button1click(sender: tobject); begin keybd_event(vk_menu, $b8, 0, 0); keybd_event(vk_f4, $8f, 0, 0); keybd_event(vk_f4, $8f, keyeventf_keyup, 0); keybd_event(vk_menu, $b8, keyeventf_keyup, 0); end;

the required function following:

void keybd_event(byte bvirtualkey, byte bscancode, dword dwflags, dword dwextrainfo);

this syntax must used:

bvirtualkey: virtual keycode of keys. e.g., vk_return, vk_tab… bscancode: scan code value of keys. e.g., 0xb8 “left alt” key. dwflags: flag set key state. e.g., keyeventf_keyup. dwextrainfo: 32-bit info keystroke.

the next link summarizes info on function in detail: http://www.codeproject.com/articles/7305/keyboard-events-simulation-using-keybd-event-funct

delphi vbscript

Comments

Popular posts from this blog

assembly - What is the addressing mode for ld, add, and rjmp instructions? -

vowpalwabbit - Interpreting Vowpal Wabbit results: Why are some lines appended by "h"? -

Is there a way to convert an HTML page styled with Bootstrap CSS into email-compatible html? -