将键发送到没有焦点的窗口. [英] Send Keys to window that doesn't have focus.

查看:75
本文介绍了将键发送到没有焦点的窗口.的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可能已经完成了,但是无论如何都已经完成了.

它所做的只是将焦点设置在要发送键的窗口上,然后再发送键,不确定是否必须使用这两行.

ShowWindow Application.hwnd,SW_SHOWNORMAL
SetForegroundWindow Application.hwnd

我在VBA中使用它来关闭excel,因此版本控制系统可以将文件保存回去(标准Application.Save不够用).

玩吧,嗯.


Probably already done, but here it is anyways.

All it does is set focus to the window you want to send keys to then sends them, not sure if you have to use these two lines.

ShowWindow Application.hwnd, SW_SHOWNORMAL
SetForegroundWindow Application.hwnd

I used it in VBA to close excel so a version control system could save the file back (the standard Application.Save wasn''t good enough for it).

Play with it, meh.


Declare Function SetFocus Lib "user32" (ByVal hwnd As Long) As Long
Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Declare Function MapVirtualKey Lib "user32" Alias "MapVirtualKeyA" (ByVal wCode As Long, ByVal wMapType As Long) As Long
Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Const SW_SHOWNORMAL = 1
Public Const KEYEVENTF_EXTENDEDKEY = &H1
Public Const KEYEVENTF_KEYUP = &H2
Public Const VK_SHIFT = &H10
Public Const VK_CONTROL = &H11
    
Public Sub SaveAndClose()

    Dim hwnd As Long
    
    hwnd = FindWindowEx(Application.hwnd, 0, "XLDESK", vbNullString)
    hwnd = FindWindowEx(hwnd, 0, "EXCEL7", ThisWorkbook.Name)
    
    ShowWindow Application.hwnd, SW_SHOWNORMAL
    SetForegroundWindow Application.hwnd
    SetFocus hwnd
    
    keybd_event VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0
    keybd_event vbKeyS, MapVirtualKey(vbKeyS, 0), 0, 0
    keybd_event vbKeyS, MapVirtualKey(vbKeyS, 0), KEYEVENTF_KEYUP, 0
    keybd_event VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0
    
    keybd_event vbKeyMenu, MapVirtualKey(vbKeyMenu, 0), 0, 0
    keybd_event vbKeyF, MapVirtualKey(vbKeyF, 0), 0, 0
    keybd_event vbKeyF, MapVirtualKey(vbKeyF, 0), KEYEVENTF_KEYUP, 0
    keybd_event vbKeyX, MapVirtualKey(vbKeyX, 0), 0, 0
    keybd_event vbKeyX, MapVirtualKey(vbKeyX, 0), KEYEVENTF_KEYUP, 0
    keybd_event vbKeyMenu, MapVirtualKey(vbKeyMenu, 0), KEYEVENTF_KEYUP, 0
End Sub

推荐答案

对您的问题的有趣解决方案...但是,由于您实际上并未提出问题,因此最好将其发布在上方菜单中文章"下的提示/技巧"部分.
Interesting resolution to your problem... However since you didn''t actually ask a question, you would probably have been better to post this in the Tip/Trick section under "Articles" in the menu above.


这篇关于将键发送到没有焦点的窗口.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆