Как я могу проверить, находится ли определенный процесс в фокусе?
Я пытаюсь проверить, есть ли у javaw.exe фокус, а затем выполнить определенный код, если это так.
Ранее у меня был код, который ищет идентификатор процесса javaw.exe, затем сравнивает его с процессом, который в настоящее время имеет фокус, который работал некоторое время, но затем я заметил, что когда у меня запущено более одного процесса javaw.exe, он работать только над одним из этих процессов, в то время как он мне нужен, когда любой процесс javaw.exe находится в фокусе.
Есть какой-либо способ сделать это?
1 ответ
Вы можете определить это довольно легко, используя GetForegroundWindow()
а также GetWindowThreadProcessId()
WinAPI функции.
Первый звонок GetForegroundWindow
чтобы получить дескриптор окна текущего окна, затем вызовите GetWindowThreadProcessId
для того, чтобы получить идентификатор процесса этого окна. Наконец получить его как Process
экземпляр класса по вызову Process.GetProcessById()
Public NotInheritable Class ProcessHelper
Private Sub New() 'Make no instances of this class.
End Sub
<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 UInteger) As Integer
End Function
Public Shared Function GetActiveProcess() As Process
Dim FocusedWindow As IntPtr = GetForegroundWindow()
If FocusedWindow = IntPtr.Zero Then Return Nothing
Dim FocusedWindowProcessId As UInteger = 0
GetWindowThreadProcessId(FocusedWindow, FocusedWindowProcessId)
If FocusedWindowProcessId = 0 Then Return Nothing
Return Process.GetProcessById(CType(FocusedWindowProcessId, Integer))
End Function
End Class
Пример использования:
Dim ActiveProcess As Process = ProcessHelper.GetActiveProcess()
If ActiveProcess IsNot Nothing AndAlso _
String.Equals(ActiveProcess.ProcessName, "javaw", StringComparison.OrdinalIgnoreCase) Then
MessageBox.Show("A 'javaw.exe' process has focus!")
End If
Надеюсь это поможет!