0

我已经完成了一些 sendkeys 应用程序来帮助我让我的生活更轻松,但是当我切换窗口并且我忘记关闭 sendkeys 时我很恼火,例如,我的应用程序会将“123123”发送到记事本(当前活动应用程序)直到我停止它,所以当我切换到 msword 它将无法工作,然后如果我再次切换回记事本它将再次发送键,这可能吗?如果有一些争论,比如

If activeWindows = notepad.exe then
    do this
Else
    do nothing
End If

这只是一个想法,但我不知道如何在 vb.net 中制作类似的东西,我想使用 .exe 而不是应用程序的标题,因为我认为它非常适合我正在做的事情。

提前谢谢

4

2 回答 2

2

您可以使用GetForegroundWindowGetWindowThreadProcessIdAPI 为您执行此操作。这是一个简单的例子:

''' <summary>The GetForegroundWindow function returns a handle to the foreground window.</summary>
''' <returns>The return value is a handle to the foreground window. The foreground window can be NULL in certain circumstances, such as when a window is losing activation. </returns>
<DllImport("user32.dll", SetLastError:=True)> _
Private Shared Function GetForegroundWindow() As IntPtr
End Function

<DllImport("user32.dll", SetLastError:=True)> _
Private Shared Function GetWindowThreadProcessId(ByVal hwnd As IntPtr, _
                      ByRef lpdwProcessId As Integer) As Integer
End Function

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

    Task.Run(AddressOf KeySender)

End Sub

Private Sub KeySender()
    While (True)

        Dim fgWin = GetForegroundWindow()
        Dim fgPid As New Integer()
        GetWindowThreadProcessId(fgWin, fgPid)

        Dim proc = System.Diagnostics.Process.GetProcessById(fgPid)
        Console.WriteLine(proc.ProcessName)

        If (proc.ProcessName = "notepad") Then
            SendKeys.SendWait("A")
        End If


        System.Threading.Thread.Sleep(1000)

    End While
End Sub
于 2013-04-09T02:15:53.633 回答
0

是的,它应该工作,好主意。到目前为止,我所做的是阅读 numLock 键。只要它打开,带有 sendkeys 的计时器就会触发。一旦关闭,计时器也将停止。但是添加对当前焦点的检查将是一个很好的补充。

使用什么方法,请查看这个,我认为它适合我如何找到当前焦点的程序?

于 2013-04-09T01:25:39.213 回答