Отследить перехват фокуса приложения - VB

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Проблема такая: у меня на компьютере периодически кто-то перехватывает фокус секунды на 1-2, а потом обратно возвращает. Очень неудобно. Как мне это программно вычислить, т.е. узнать, что за программа? Грубо говоря, как отследить перехват фокуса в приложениях, открытых в Windows?

Решение задачи: «Отследить перехват фокуса приложения»

textual
Листинг программы
Declare Function GetForegroundWindow Lib "user32" () As Long
Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Declare Function Module32First Lib "kernel32" (ByVal hSnapshot As Long, uProcess As MODULEENTRY32) As Long
Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
 
Private Type MODULEENTRY32
  dwSize As Long
  th32ModuleID As Long
  th32ProcessID As Long
  GlblcntUsage As Long
  ProccntUsage As Long
  modBaseAddr As Long
  modBaseSize As Long
  hModule As Long
  szModule As String * 256
  szExePath As String * 260
End Type
Sub TimerProc()
Dim uProcess As MODULEENTRY32
Static OldName$
Ret = GetForegroundWindow()
GetWindowThreadProcessId Ret, pid
 
hSnapshot = CreateToolhelp32Snapshot(8, pid)
uProcess.dwSize = Len(uProcess)
n = Module32First(hSnapshot, uProcess)
Name$ = Left(uProcess.szModule, InStr(uProcess.szModule, Chr(0)) - 1)
If Name$ <> OldName$ Then
 Form1.Print Name$
 OldName$ = Name$
End If
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы