vb.net sendkeys到特定的活动应用程序

时间:2013-04-08 23:43:40

标签: vb.net sendkeys

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

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

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

事先提前

2 个答案:

答案 0 :(得分:0)

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

使用哪种方法,请检查一下,我认为它符合How do I find the program with the current focus?

答案 1 :(得分:0)

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

''' <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