keybd_event 可以類比輸入一行字串嗎? Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiAPI/html/delphi_20061206175530118.html
倒如VB用
WshShell.SendKeys "123456789"
這樣就完成了
總不能每一個字元都用
keybd_event($75, MapVirtualKey($75, 0 ), 0 , 0 );
keybd_event(VK_F6, MapVirtualKey(VK_F6,0), KEYEVENTF_KEYUP,0);
這樣吧.....
把字串放入剪貼簿,然後keybd_event一個CTRL+C不就行了嗎?
說錯了,CTRL+V
procedure TypeKeyString(s: string);
var
c: Char;
i: integer;
off: integer;
vkw: Word;
begin
for i := 1 to Length(s) do
begin
c := s[i];
if (c < #128) then
begin
vkw := VkKeyScan(c);
off := 0;
if vkw and $100 = $100 then
keybd_event(VK_SHIFT, 0, off, 0);
if vkw and $200 = $200 then
keybd_event(VK_CONTROL, 0, off, 0);
if vkw and $400 = $400 then
keybd_event(VK_MENU, 0, off, 0);
off := 0;
keybd_event(Byte(vkw), 0, off, 0);
//sleep(20);
off := off or KEYEVENTF_KEYUP;
keybd_event(Byte(vkw), 0, off, 0);
off := off or KEYEVENTF_KEYUP;
if vkw and $100 = $100 then
keybd_event(VK_SHIFT, 0, off, 0);
if vkw and $200 = $200 then
keybd_event(VK_CONTROL, 0, off, 0);
if vkw and $400 = $400 then
keybd_event(VK_MENU, 0, off, 0);
end;
end;
end;
CSDN真討厭。為什麼要把對齊用的空格刪除?
謝謝強哥
但還有一個問題就是。
setForegroundWindow(FindWindow(nil,'無標題 - 記事本'));
這不能對最少化或是隱藏表單起作用。。。。
如果這樣的表單應該怎麼鍵入字串呢?
SendMessage(FindWindow(nil,'無標題 - 記事本'),wm_syscommand,sc_RESTORE,0);
先後這個問題解決了。。。。。
樓上正解
記事本?
var
vHandle: THandle;
begin
vHandle := FindWindow('Notepad', nil);
if vHandle = 0 then Exit;
vHandle := FindWindowEx(vHandle, 0, 'Edit', nil);
if vHandle = 0 then Exit;
SendMessage(vHandle, EM_REPLACESEL, 0, Longint(PChar('Zswang路過...')));
end;