首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Findwindow和SendMessage

Findwindow和SendMessage
EN

Stack Overflow用户
提问于 2010-10-25 00:56:06
回答 3查看 13.8K关注 0票数 1

我在试着弄清楚为什么这不发送ALT+F到记事本,

代码语言:javascript
复制
Private Declare Function FindWindow1 Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const WM_KEYUP = &H101
Private Const WM_KEYDOWN = &H100
Private Const WM_SYSKEYDOWN = &H104

Private Sub Command_Click()
Dim parenthwnd As Long
Dim hwnd As Long

  parenthwnd = FindWindow1(vbNullString, "Untitled - Notepad")
  retvalue = SendMessage(parenthwnd, WM_SYSKEYDOWN, VK_MENU, 1&)
  retvalue = SendMessage(parenthwnd, WM_KEYDOWN, VK_F, 1&)
End Sub

我得到圆括号的值,而不是任何retvalue值(0)的值。

我遗漏了什么?

EN

回答 3

Stack Overflow用户

发布于 2010-11-16 12:59:25

您可以尝试发送/发布所有您想要的消息。不幸的是,它们不会影响GetAsyncKeyState的返回值--这是系统在处理VK_F消息时所使用的--以查看alt是否下降。

因此,您不能使用此机制对其他应用程序使用修饰符伪造击键。

为了解决这个问题,您需要使用SendInput --但这要求接收击键的应用程序是前台/焦点窗口。

票数 2
EN

Stack Overflow用户

发布于 2010-10-25 14:26:25

使用Postmessage代替Sendmessage

代码语言:javascript
复制
Public Const WM_SYSKEYDOWN = &H104

PostMessage hwnd, WM_SYSKEYDOWN, vbKeyF, 2 ^ 29 

'Simulates Alt + F (2^29 sets the 29 bit of lParam indicating Alt is being pressed.
票数 1
EN

Stack Overflow用户

发布于 2010-10-28 21:57:46

我认为这就是问题所在:您正在将消息发送到“记事本”窗口周围的框架中,并且需要将其发送到菜单窗口。使用FindWindowEx和32768类名(即菜单)来获取菜单窗口,该窗口是句柄的子窗口。这里有两页:http://msdn.microsoft.com/en-us/library/ms633500(v=VS.85).aspx名字,应该会有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4011252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档