怎么样向另一个应用程序发送消息,执行右击事件和Ctrl+R事件,向下箭关事件(100分)

  • 主题发起人 主题发起人 Crazyz
  • 开始时间 开始时间
C

Crazyz

Unregistered / Unconfirmed
GUEST, unregistred user!
事情是这样的,在使用windows优化大师-系统医生时,扫描到了很多错误信息,由于没有注册,只能一个一个修复,过程是这样的Ctrl+R,回车,向下箭头,接着下一次Ctrl+R ,回车,向下箭............
我想要是用Delphi写一个小程序向windows系统医生发送消息可以省点力,便有了上面的问题,

谢谢各位大吓
 
用,sendmessage keydown事件,或者
keyboard even 指令
 
去弄个注册码不就得了
 
to leezero
想实现此功能,也提高提高水平
 
把该窗口设置为活动窗口,然后用:
keybd_event
procedure TForm1.Button6Click(Sender: TObject);
begin //移到头上
RichEdit1.SetFocus ;
keybd_event(vk_Control,0,0,0);
keybd_event(VK_HOME,0,0,0);
keybd_event(VK_HOME,0,KEYEVENTF_KEYUP,0);
keybd_event(vk_control,0,KEYEVENTF_KEYUP,0);
end;

 
procedure SendCtrlR;
var
i: Integer;
begin
Sleep(2000); // 暂停 2 秒,趁这个时间将焦点移到目标窗口上,然后等:
for i := 1 to 20 do
begin
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);
keybd_event(ord('R'), MapVirtualKey(ord('R'), 0), 0, 0);
keybd_event(ord('R'), MapVirtualKey(ord('R'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0);
Sleep(100);
Application.ProcessMessages;
end;
end;
 
to beta

keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);
keybd_event(ord('R'), MapVirtualKey(ord('R'), 0), 0, 0);
keybd_event(ord('R'), MapVirtualKey(ord('R'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0);
能不能给讲讲这几句的意思,
不好意思多谢了
 
模拟键盘事件,让 Windows 以为你按下或弹起了某个键。
你要是模拟“按”了某个键,当然要先“按下”,然后“弹起”:

// 模拟按下 Ctrl 键
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);
// 模拟按下 R 键
keybd_event(ord('R'), MapVirtualKey(ord('R'), 0), 0, 0);
// 模拟弹起 R 键
keybd_event(ord('R'), MapVirtualKey(ord('R'), 0), KEYEVENTF_KEYUP, 0);
// 模拟弹起 Ctrl 键
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0);

想一想你手工“按”的时候,是不是也是这个顺序?:)
 
to
beta

keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);
keybd_event(ord('R'), MapVirtualKey(ord('R'), 0), 0, 0);
keybd_event(ord('R'), MapVirtualKey(ord('R'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0);
确实能发出消息,并且弹出是否修复的提示,接下来应确认,点左键或回车工怎么写
 
回车:
keybd_event(VK_Return, MapVirtualKey(VK_Return, 0), 0, 0);
keybd_event(VK_Return, MapVirtualKey(VK_Return, 0), KEYEVENTF_KEYUP, 0);

你 Ctrl + R 都能“按”了,还“按”不了一个回车?:)
 
to beta
哈哈,太感谢了
我写成了
keybd_event(VK_Return, MapVirtualKey(VK_Return, 0), 0, 0);
keybd_event(VK_Return, MapVirtualKey(VK_Return, 0), KEYEVENTF_KEYUP, 0);

不过现在行了
所有分全给你,记住你了beta,你太可爱了,谢谢
 
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), 0, 0);
keybd_event(ord('R'), MapVirtualKey(ord('R'), 0), 0, 0);
keybd_event(ord('R'), MapVirtualKey(ord('R'), 0), KEYEVENTF_KEYUP, 0);
keybd_event(VK_Control, MapVirtualKey(VK_Control, 0), KEYEVENTF_KEYUP, 0);

keybd_event(VK_Return, MapVirtualKey(13, 0), 0, 0);
keybd_event(VK_Return, MapVirtualKey(13, 0), KEYEVENTF_KEYUP, 0);

keybd_event(VK_Return, MapVirtualKey(VK_DOWN, 0), 0, 0);
keybd_event(VK_Return, MapVirtualKey(VK_DOWN, 0), KEYEVENTF_KEYUP, 0);
这样好像不能向下移一条,

 
我知道了,是我的错, 散分了
 
接受答案了.
 
后退
顶部