Я пытаюсь перехватить event_object_create
и event_object_destroy
события через следующий код:ручка приложения 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
, но когда I restart
мое приложение ничего не печатает в con единственный.
Итак, как я могу следить за тем, чтобы моя программа постоянно слушала события create & destroy
, выпущенные с Application(Spotify)
, и является вышеупомянутым подходом к правильному подходу.
вот мой ConsoleOutput.
EDIT-1
Итак, я изменил idProcess
слушать В параметре событий от всего процесса. Но моя программа теперь печатает только inside create case
, когда я запускаю приложение, оно ничего не печатает, когда я вручную закрываю его.
Итак, где я должен введите код, который гарантирует, что моя программа всегда прослушивает события из всех процессов. – RanRag
@Noob: быстрое считывание параметров в [SetWinEventProc] (http://msdn.microsoft.com/en-us/library/windows/desktop/dd373640 (v = vs.85) .aspx) скажет вам ответ на этот вопрос. – BrendanMcK
Я изменил 'idProcess' на' 0', чтобы прослушать все процессы. Проверьте мои изменения. – RanRag