首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB: ShowWindow焦点问题

VB: ShowWindow焦点问题
EN

Stack Overflow用户
提问于 2015-02-28 00:42:03
回答 1查看 1.9K关注 0票数 2

我正在尝试通过一个小的VB表单将自动击键发送到不支持copy+paste的应用程序。该表单从一个文本文件加载数据,并在我单击按钮时使用SendKeys对其进行激活。

除了ShowWindow部分之外,其他一切似乎都可以正常工作。我目前正在使用记事本进行测试,除了一个例外,我似乎无法让ShowWindow将焦点转移到记事本上。显然,我担心它会对我最终运行它的应用程序做同样的事情(我目前还没有访问它的权限)。使记事本处于活动状态的唯一ShowWindow参数是SW_SHOWMAXIMIZED。SW_SHOW和SW_SHOWNORMAL看起来什么都不做,而SW_RESTORE会在最小化的情况下恢复记事本,但我的VB窗体仍然是活动窗口。

我不是一个程序员,但我犯了一个错误,告诉我的老板我在高中时(十多年前)涉足了Pascal Turbo,所以我是那个坚持要让它工作的人。我当前的代码是从S.O.和其他来源拼凑而成的:

(我使用的是Windows7和MVSE2013)

代码语言:javascript
复制
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,但我发现它在Windows7上玩得不太好。

EN

回答 1

Stack Overflow用户

发布于 2015-03-02 20:42:59

我发现了一个我希望可以通过PInvoke解决的方法。我最终交换了这个块:

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

为此:

代码语言:javascript
复制
Public Declare Function BringWindowToTop Lib "user32" (ByVal hwnd As IntPtr) As Boolean

然后是这一行:

代码语言:javascript
复制
ShowWindow(lHwnd, ShowWindowCommands.SW_SHOWNORMAL)

为此:

代码语言:javascript
复制
BringWindowToTop(lHwnd)

我意识到两者之间存在功能差异,但更改在我的特定实例中有效,所以我很高兴。

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

https://stackoverflow.com/questions/28770018

复制
相关文章

相似问题

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