一个程序怎么接受窗口外的操作信息,比如在一个程序窗口按下某个键,

一个程序怎么接受窗口外的操作信息,比如在一个程序窗口按下某个键,然后会触发另一个程序放音乐

第1个回答  2017-04-27
VC怎样向另一个程序窗口发送组合键消息,比如“ALT+F"
线程menuvc组合键
我在网上搜了老半天了,

PostThreadMessage(tID, WM_KEYDOWN, VK_F9, 0);这个方法只能发给线程,窗口收不到消息。

下面这个在网上说可以输出”ALT+F"的组合键,但我那个窗口只收到“F" 的键。
HWND hWnd = pWnd->m_hWnd;
::PostMessage(hWnd, WM_SYSKEYDOWN, 0x46, 1 << 29);

还有下面这个也不行:(只能收到”F"信息)
pWnd->PostMessage(WM_SYSKEYDOWN, VK_MENU);//按下ALT
pWnd->PostMessage(WM_SYSKEYDOWN, 'F');
pWnd->PostMessage(WM_SYSKEYUP, 'F');
pWnd->PostMessage(WM_SYSKEYUP, VK_MENU);//放开ALT
-------------------------------------------
哪位大神帮帮我,非常感谢。

keybd_event和”MakeKeyLparam“ 都能打开 ”另存为“对话框 ,但接下来对 ”另存为“ 的操作都一点反应也没有。不知什么回事,有什么办法对”另存为“的对话框操作也有反应?
谢谢 !
这两种方法都要用到” pWnd->ActivateTopParent(); “,,,,否则没反应。
为什么没反应,原因找到了,就是在显示对话框后 要加个”sleep(1000)",接下来的模拟就有反应了。

那么问题又来了,怎样才能在“文件名”后的编辑框里输入内容呢?“类名”是Edit,,,,,,,,虽然模拟“Alt+N"可以,但不知道句柄之类的办法输入内容。

keybd_event 挺好用的

C/C++ code?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

#define doKeyEvent(key, bUp, bExt) \
do{ \
BYTE vsc = MapVirtualKey(key, MAPVK_VK_TO_VSC); \
DWORD flag = ((bExt)? KEYEVENTF_EXTENDEDKEY:0)|((bUp)? KEYEVENTF_KEYUP:0); \
keybd_event(key, vsc, flag, 0); \
Sleep(10); \
}while(0);
#define doKeyClick(key, bExt) \
do \
{ \
doKeyEvent(key, 0, bExt); \
doKeyEvent(key, 1, bExt); \
}while(0);

DWORD __stdcall SimKeyboSave(LPVOID lParam)
{
HWND hWnd = (HWND)lParam;
SetForegroundWindow(hWnd);

//Ctrl+S save
doKeyEvent(VK_CONTROL, 0, 1);
doKeyClick('S', 0);
doKeyEvent(VK_CONTROL, 1, 1);

//wait for dialog init
Sleep(5000);

//Ctrl+A select All
doKeyEvent(VK_CONTROL, 0, 1);
doKeyClick('A', 0);
doKeyEvent(VK_CONTROL, 1, 1);

//delete select string
doKeyClick(VK_DELETE, 0);

//enter new string abc.txt
doKeyClick('A', 0);
doKeyClick('B', 0);
doKeyClick('C', 0);
doKeyClick(VK_OEM_PERIOD, 0);
doKeyClick('T', 0);
doKeyClick('X', 0);
doKeyClick('T', 0);

//enter return
doKeyClick(VK_RETURN, 0);

return 0;
}

void CMainFrame::OnTest()
{
// TODO: 在此添加命令处理程序代码

CWnd *pWnd = AfxGetMainWnd();
HANDLE hThread = CreateThread(NULL, 0, SimKeyboSave, m_hWnd, 0, NULL);
CloseHandle(hThread);
}

非常感谢,你的最完美了,反正也没别的办法后台发送消息到窗口。

一个程序怎么接受窗口外的操作信息,比如在一个程序窗口按下某个键,
下面这个在网上说可以输出”ALT+F"的组合键,但我那个窗口只收到“F" 的键。HWND hWnd = pWnd->m_hWnd;::PostMessage(hWnd, WM_SYSKEYDOWN, 0x46, 1 << 29);还有下面这个也不行:(只能收到”F"信息)pWnd->PostMessage(WM_SYSKEYDOWN, VK_MENU);\/\/按下ALT pWnd->PostMessage(WM_SYS...

java中怎么用程序触发按下一个键呢?
void keyPressed(KeyEvent e)按下某个键时调用此方法。void keyReleased(KeyEvent e)释放某个键时调用此方法。void keyTyped(KeyEvent e)键入某个键时调用此方法。具体哪个键...用参数KeyEvent可以判断是按的哪个键

如何实现外接一个开关或者按钮,点击开关或按钮时,实现相当于按F4键
使用Fn组合功能键,只需按住Fn键,然后按下某个功能键即可。注释:Fn键锁定功能就相当于保持按住Fn键,再去按某个功能键。在ThinkPadConfiguration程序中,点击AccessibilityOption按钮,将Fn键锁定功能设置为Enable。或者在命令行模式下通过PS2FNSE命令也可启用这个功能。如果Fn键没有被锁定,在使用时必须按...

...按住某键就一直运行某个程序,放开马上停止要怎么写?
用APIhook;或者用“按下某件”以及“放开某件”联合使用就可以了。你说的这个功能的原理类似于DNF连发程序。如果需要请楼主说清楚点,比如举个例子。我可以帮你写出来。

...按下某键 ... 这些都要在程序窗口才能触发 怎样才能在程序窗口外面...
使用“注册热键”命令 如果没有这个命令,那是你没有加载完所有的支持库 注册热键 (, , 0, )参数<1>的名称为“窗口句柄”,类型为“整数型(int)”。窗口句柄。参数<2>的名称为“标签句柄”,类型为“整数型(int)”。使用标签的反馈事件来接受热键,反馈事件中的第一个参数为热键标识,第二...

怎么实现 当运行中的一个程序按下的某一个按键时,执行我自己编的另...
程序是思维 给你个思路:程序不停的循环运行,其中包括你的按键扫描,当你扫描到某个按键按下了以后,置一个标志位,然后其他程序根据是否存在这个标志位来决定是否执行,也就是有标志就执行你自己编的程序,没有的话就不执行。

易语言如何识别在某个窗口组件上按下多个某键
给你说个思路吧,弄个时钟,判断A键和J键的状态,如果A键和J键的键状态都为按下,且窗口为激活状态,则执行你的操作。取键状态用API函数GetAsyncKeyState 至于判断窗口状态是否为激活状态,有没有简单的办法我不知道,但我可以给你说一个我自己想到的办法。弄一个逻辑型变量,在窗口被激活的时候值改...

...比如说你按下一个键S1 在串口接收区能收到1
用键盘检测程序检测按键按下,检测到按下就用串口向上位机发送字符“1”的ASCII码值,这样在串口调试助手里就可以看到字符“1”了

按键盘上的什么键,可获取当前活动窗口的显示信息
ALT+PRINT SCREEN 将当前活动程序窗口以图象方式拷贝到剪贴板 CTRL+F4 关闭当前应用程序中的当前文本(如word中) CTRL+F6 切换到当前应用程序中的下一个文本(加shift 可以跳到前一个窗口) 在IE中: ALT+RIGHT ARROW 显示前一页(前进键) ALT+LEFT ARROW 显示后一页(后退键) CTRL+TAB 在页面上的各框架中切换...

我用MFC构建了一个窗口程序,现在想通过按下键盘上的Q键就能关闭窗口,退 ...
1、当框架CFrameWnd关闭时,会接收到WM_CLOSE消息,通过消息映射会执行OnClose方法;2、在OnClose方法中,由于框架是应用程序的主窗口,因此会调用应用程序的CloseAllDocuments方法;3、应用程序的CloseAllDocuments调用了文档管理器的CloseAllDocuments方法;4、文档管理器的CloseAllDocuments方法调用了文档模板的...

相似回答