繁体   English   中英

VB:ShowWindow焦点问题

[英]VB: ShowWindow focus issue

我试图通过一个小的VB表单将自动击键发送到不支持复制+粘贴的应用程序。 表单从文本文件加载数据,并在单击按钮后使用SendKeys将其触发。

除了ShowWindow部分,其他所有内容似乎都可以正常工作。 我目前正在使用记事本进行测试,除了一个例外,我似乎无法让ShowWindow将重点放在记事本上。 显然,我担心它会对最终将要针对它运行的应用程序执行相同的操作(我目前无法访问它)。 使记事本处于活动状态的唯一ShowWindow参数是SW_SHOWMAXIMIZED。 SW_SHOW和SW_SHOWNORMAL似乎没有执行任何操作,而SW_RESTORE如果将其最小化,它将恢复记事本,但我的VB表单仍处于活动窗口。

我不是程序员,但我犯了一个错误,就是告诉我的老板,我在高中(十多年前)涉足Pascal Turbo,所以我就是一个试图完成这项工作的人。 我当前的代码从SO和其他来源整理而来:

(我正在运行Windows 7并使用MVSE2013)

Imports System.Runtime.InteropServices
Public Class Form1
Private Declare Function FindWindow _
       Lib "user32" _
       Alias "FindWindowA" _
      (ByVal lpClassName As String, _
       ByVal lpWindowName As String) As IntPtr

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function ShowWindow(ByVal hwnd As IntPtr, ByVal nCmdShow As ShowWindowCommands) As Boolean
End Function

Enum ShowWindowCommands As Integer
    SW_SHOWNORMAL = 1
    SW_SHOWMAXIMIZED = 3
    SW_RESTORE = 9
End Enum

Private Sub Form1_Load
    [form]
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click

    Dim lHwnd As IntPtr = FindWindow("Notepad", vbNullString)

    If lHwnd <> IntPtr.Zero Then
        ShowWindow(lHwnd, ShowWindowCommands.SW_SHOWNORMAL)
        SendKeys.Send(TextBox1.Text)
    Else
        [blah blah error handling]
    End If

End Sub

我尝试了另一种类似SetForegroundWindow的技术,但我读到它在Windows 7中不能很好地工作。

找到了我希望可以通过PInvoke解决的方法。 我最终交换了这个代码块:

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
Private Shared Function ShowWindow(ByVal hwnd As IntPtr, ByVal nCmdShow _
As ShowWindowCommands) As Boolean
End Function

为了这:

Public Declare Function BringWindowToTop Lib "user32" (ByVal hwnd As IntPtr) As Boolean

然后这行:

ShowWindow(lHwnd, ShowWindowCommands.SW_SHOWNORMAL)

为了这:

BringWindowToTop(lHwnd)

我意识到两者之间在功能上有所不同,但是更改在我的特定实例中有效,因此我很高兴。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM