2013-04-08 2 views
0

Я уже сделал для создания приложения sendkeys, чтобы помочь мне сделать мою жизнь проще, но я буду раздражать ее при переключении окон, и я забыл отключить sendskeys, например, приложение отправит «123123» в блокнот (текущее активное приложение), пока я не остановлю его, поэтому, когда я переключусь на msword, это не сработает, тогда, если я снова вернусь в блокнот, он снова отправит клавиши, возможно ли это? жизнь, если есть какой-то аргумент, какvb.net sendkeys к конкретному активному приложению

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

это просто идея, но я не знаю, как сделать что-то подобное в vb.net, и я хочу использовать .exe вместо названия приложения причины я думаю, что это очень подходящий для того, что я делаю.

ТНХ заранее

ответ

0

Да, он должен работать, хорошая идея. То, что я сделал до сих пор, это прочитать ключ numLock. Пока он включен, срабатывает таймер с кнопками отправки. Как только он выключится, таймер также будет остановлен. Но добавление проверки для текущего фокуса было бы хорошим дополнением.

Какие методы использовать, пожалуйста, проверьте это, я думаю, что он подходит How do I find the program with the current focus?

0

Вы можете использовать GetForegroundWindow и GetWindowThreadProcessId 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 
Смежные вопросы