Я пытаюсь перехватить event_object_create
и event_object_destroy
события с помощью следующего кода:
class NameChangeTracker
{
private const uint EVENT_OBJECT_CREATE = 0x00008000;
private const uint EVENT_OBJECT_DESTROY = 0x00008001;
private const uint WINEVENT_OUTOFCONTEXT = 0;
//DLL imports
private static WinEventDelegate procDelegate = new WinEventDelegate(NameChangeTracker.WinEventProc);
private delegate void WinEventDelegate(IntPtr hWinEventHook, uint eventType, IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime);
private static void WinEventProc(IntPtr hWinEventHook, uint eventType, IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime)
{
if(idObject==0 && idChild==0)
{
if(hwnd.ToInt32() == getspotify().ToInt32())
{
switch(eventType)
{
case EVENT_OBJECT_CREATE:
Console.WriteLine("inside create case");
break;
case EVENT_OBJECT_DESTROY:
Console.WriteLine("inside destroy case");
break;
}
}
}
}
Внутри main
метод
public static void Main()
{
NameChangeTracker tracker = new NameChangeTracker();
IntPtr hwnd = tracker.getspotify(); // returns hwnd using "FindWindow()" method.
int num = tracker.getprocessid(hwnd); //returns processid using "GetWindowThreadProcessId()" method.
IntPtr hWinEventHook = SetWinEventHook(0x00008000,0x00008001,IntPtr.Zero, procDelegate, 0, 0, 0);
Message msg = new Message();
while(GetMessage(ref msg,hwnd,0,0))
UnhookWinEvent(hWinEventHook);
}
}
Мой код выше захватывает событие, когдаЯ вручную закрываю свое приложение (Spotify) и печатает комбинацию inside create case
и inside destroy case
, но когда я restart
мое приложение, оно ничего не печатает в консоли.
Итак, как мне убедиться, что мое приложениеПрограмма непрерывно прослушивает create & destroy
события, запущенные с Application(Spotify)
, и является правильным подходом, описанным выше.
Вот мой ConsoleOutput .
EDIT-1
Итак, я изменил параметр idProcess
, чтобы прослушивать события из всего процесса.Но моя программа теперь печатает только inside create case
, когда я запускаю свое приложение, она ничего не печатает, когда я закрываю его вручную.