Vb.net VB:ShowWindow焦点问题

Vb.net VB:ShowWindow焦点问题,vb.net,showwindow,Vb.net,Showwindow,我正试图通过一个小的VB表单向一个不支持复制+粘贴的应用程序发送自动按键。表单从文本文件加载数据,并在单击按钮后使用SendKeys将其触发 除ShowWindow部分外,所有功能都正常工作。我目前正在使用记事本进行测试,除了一个例外,我似乎无法让ShowWindow将焦点转移到记事本上。显然,我担心它会对我最终要运行它的应用程序产生同样的影响(我目前没有访问权限)。使记事本处于活动状态的唯一ShowWindow参数是SW_SHOWMAXIMIZED。SW_SHOW和SW_SHOWNORMAL看

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

除ShowWindow部分外,所有功能都正常工作。我目前正在使用记事本进行测试,除了一个例外,我似乎无法让ShowWindow将焦点转移到记事本上。显然,我担心它会对我最终要运行它的应用程序产生同样的影响(我目前没有访问权限)。使记事本处于活动状态的唯一ShowWindow参数是SW_SHOWMAXIMIZED。SW_SHOW和SW_SHOWNORMAL看起来没有任何作用,而SW_RESTORE将在最小化的情况下还原记事本,但我的VB窗体仍保持活动窗口

我不是一名程序员,但我犯了一个错误,告诉我的老板我在高中时涉猎过Pascal Turbo(十多年前),所以我一直在努力让它工作。我目前的代码是从S.O.和其他来源拼凑而成的:

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

导入System.Runtime.InteropServices
公开课表格1
私有声明函数FindWindow_
库“user32”_
别名“FindWindowA”_
(ByVal lpClassName作为字符串_
ByVal lpWindowName(作为字符串)作为IntPtr
_
专用共享函数ShowWindow(ByVal hwnd作为IntPtr,ByVal nCmdShow作为ShowWindowCommands)作为布尔值
端函数
将ShowWindowCommand枚举为整数
SW_SHOWNORMAL=1
SW_最大化=3
SW_RESTORE=9
结束枚举
专用子表单1_加载
[表格]
端接头
私有子按钮1\u单击(ByVal发送者作为System.Object_
ByVal e作为System.EventArgs)处理按钮1。单击
Dim lHwnd作为IntPtr=FindWindow(“记事本”,vbNullString)
如果lHwnd IntPtr.为零,则
ShowWindow(lHwnd、ShowWindowCommands.SW\u SHOWNORMAL)
SendKeys.Send(TextBox1.Text)
其他的
[诸如此类的错误处理]
如果结束
端接头

我想尝试另一种技术,比如SetForeGroundIndow,但我读到它在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
然后这一行:

ShowWindow(lHwnd, ShowWindowCommands.SW_SHOWNORMAL)
为此:

Public Declare Function BringWindowToTop Lib "user32" (ByVal hwnd As IntPtr) As Boolean
BringWindowToTop(lHwnd)
我意识到两者之间存在功能上的差异,但这种变化在我的具体情况下起作用,所以我很高兴

BringWindowToTop(lHwnd)