2010-10-06 60 views
1

我的问题是如何发送一些密钥的任何应用程序在后台运行的应用程序?假设我做了ALT + S的左箭头键的快捷键,并且比任何时候我在任何应用程序中时都要快,并且当我按ALT + S键后台应用程序响应该快捷键并发送到当前打开的程序的左箭头键时。 下面是我在英巴卡迪诺C++ 2010做模拟箭头代码当按下左Alt + S每200 milisecond的:如何发送密钥的任何应用程序,从当前正在运行的后台程序(C++)

void __fastcall TForm1::Timer1Timer(TObject *Sender) 
{ 
    bool bBothPressed = GetAsyncKeyState(VK_MENU) && GetAsyncKeyState(0x53); 
    if(bBothPressed){ 
     // ShowMessage("control!"); 
     keybd_event(VK_LEFT, 0, 0, 0); 
    } 
} 

...和我的应用程序这项工作很好,但我想知道是什么如何为全局作用域(任何应用程序)包含该代码,而不仅仅是针对此应用程序。

回答

1

我强烈建议您使用RegisterHotKey而不是GetAsyncKeyState。这样你就不需要一个循环或者一个定时器,从而使你的应用程序更加可靠和响应。

要模拟按键到另一个应用程序/窗口,您需要:

A)集中在特定的窗口:

BringWindowToTop(hwnd); 
SetForegroundWindow(hwnd); 
SetFocus(hwnd); 

B)发送的keydown + KEYUP事件:

keybd_event(keycode, 0, KEYEVENTF_KEYDOWN, 0); 
keybd_event(keycode, 0, KEYEVENTF_KEYUP, 0); 

这应该就够了。但是,请记住用户可能已经在按模拟的其中一个键,因此结果可能不是您所期望的。为了避免这种情况,你需要检查键是否已经被按下(在这里使用GetAsyncKeyState),然后在做B之前发送一个键盘。

UPDATE:

如果您想发送到任何应用目前的前景(被聚焦)的按键,你可以跳过一个

+0

重点是如何让服务在后台运行的应用程序在等待ALT + S按下时,以及何时按下执行某些命令,这种情况下只需箭头左键,主要的是快捷键alt +必须像任何应用程序中的箭头一样执行。我想要做的就是像alt + s被按下时激活的宏。我知道如何处理某些特定的应用程序,但我需要的是,必须为当前打开的每个进程处理alt + s快捷方式。 – raptor 2010-10-07 00:15:29

+0

@ user468506:据此更新。 – jweyrich 2010-10-07 00:32:42

+0

thnx男人你的回答是非常有帮助我是编程初学者,所以我的测试需要一点时间:),但理论上这就是它我在寻找... :) – raptor 2010-10-07 00:44:39

0

SendInput()看起来可能对您有用。

+0

在这种情况下,sendinput是发送快捷方式到另一个应用程序,我知道如何处理它到特定的应用程序(如处理记事本),但有没有一些可以处理所有应用程序的功能,而无需指定每个应用程序? – raptor 2010-10-07 00:36:05

相关问题