Frage : Anwendungsprozess-Weg

Die Anwendung vor launch
Is dort ermitteln eine Weise (I vermuten eine bestimmte Fenstermitteilung), herauszufinden, wann Leute Programme/Anwendungen starten?

The Anwendung läuft fein, WENN Sie sie im Notizblock alleine prüfen.  ABER mit allen anderen Akten? es ist nicht working.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
6:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
library MatHook;

Gebrauch
  Windows,
  Mitteilungen;

Art
  THookRec = Aufzeichnung
    hMatHook: HHOOK;
    hMatWnd: HWND;
    oldProc: Ganze Zahl;
  Ende;

var
  Diagramm: DWord;
  buf: ^THookRec;

//-neues Fenster proc - Durchläufe im Zusammenhang des Zielprozesses
Funktion MatWndProc (Handgriff: hWnd; Msg: uInt; wp: wParam; Langspielplatte: lParam): LongInt; stdcall;
anfangen
  Versuch
    Fall Msg von
      WM_CREATE:
      anfangen
        MessageBox (0, GetCommandLine, „Befehlszeile Parameter“, MB_OK);
      Ende;

      //-Benutzer definied Mitteilung zum subclassing zu stoppen
      // (RegisterWindowMessage würde eine bessere Wahl anstelle von der WM_USER Mitteilung! sein)
      WM_USER + 1:
      anfangen
        kundenspezifische Menüeintragungen der //-Löschung (quick'n'dirty)
        SetWindowLong (buf^.hMatWnd, GWL_WNDPROC, buf^.oldProc);
      Ende;

    Ende;
    Resultat: = CallWindowProc (Zeiger (buf^.oldProc), Handgriff, Msg, wp, Langspielplatte);
  ausgenommen
    Resultat: = 0;
  Ende;
Ende;

//-Haken proc - Wartezeiten, damit Zielfenster verursacht werden kann
Funktion MatHookProc (nCode: Ganze Zahl; wp: wParam; Langspielplatte: lParam): LongInt; stdcall;
var
  hTemp: hWnd;
  szClass: Reihe [0..255] der Putzfrau;
anfangen
  Versuch
    wenn (nCode >= HC_ACTION) dann
    anfangen
      nCode von umkleiden
        HCBT_CREATEWND:
        anfangen
          hTemp: = HWND (wp);
          FillChar (szClass, 256, 0);
          GetClassName (hTemp, szClass, 256);
          wenn (szClass = „Notizblock ") dann
          anfangen
            buf^.hMatWnd: = htemp;
            buf^.oldProc: = GetWindowLong (buf^.hMatWnd, GWL_WNDPROC);
            SetWindowLong (buf^.hMatWnd, GWL_WNDPROC, ganze Zahl (@MatWndProc));
          Ende;
        Ende;
        HCBT_DESTROYWND:
        anfangen
          hTemp: = HWND (wp);
          FillChar (szClass, 256, 0);
          GetClassName (hTemp, szClass, 256);
          wenn (szClass = „Notizblock ") dann
          anfangen
            SetWindowLong (buf^.hMatWnd, GWL_WNDPROC, buf^.OldProc);
          Ende;

        Ende;
      Ende;
    Ende;
    Resultat: = CallNextHookEx (buf^.hMatHook, nCode, wp, Langspielplatte);
  ausgenommen
    Resultat: = 0;
  Ende;
Ende;

// gründete Haken
Funktion SetHook: Boolesch; stdcall; Export;
anfangen
  Versuch
    Resultat: = falsch;
    wenn (nicht zugewiesen (buf)) dann
    anfangen
      Diagramm: = CreateFileMapping (DWord (- 1), Null, PAGE_READWRITE, 0, SizeOf (THookRec), „HookRecMemBlock ");
      buf: = MapViewOfFile (Diagramm, FILE_MAP_ALL_ACCESS, 0, 0, 0);
      buf^.hMatHook: = SetWindowsHookEx (WH_CBT, @MatHookProc, hInstance, 0);
      Resultat: = ausrichten;
    Ende;
  ausgenommen
    Resultat: = falsch;
  Ende;
Ende;

// entfernt Haken
Funktion RemoveHook: Boolesch; stdcall; Export;
anfangen
  Resultat: = falsch;
  wenn (zugewiesen (buf)) dann
  anfangen
    // erklären unser neues wnd proc subclassing zu stoppen
    // (muss im Zusammenhang des Zielprozesses getan werden)
    SendMessage (buf^.hMatWnd, wm_User + 1, 1, 0);
    wenn (buf^.hMatHook <> 0) dann UnhookWindowsHookEx (buf^.hMatHook);
    buf^.hMatHook: = 0;
    UnmapViewOfFile (buf);
    buf: = Null;
    Resultat: = ausrichten;
  Ende;
Ende;

// DLL-Eingang
Verfahren DllEntry (dwReason: DWord);
anfangen
  dwReason von umkleiden
    DLL_PROCESS_ATTACH:
    anfangen
      wenn (nicht zugewiesen (buf)) dann
      anfangen
        Diagramm: = OpenFileMapping (FILE_MAP_ALL_ACCESS, falsches, „HookRecMemBlock ");
        buf: = MapViewOfFile (Diagramm, FILE_MAP_ALL_ACCESS, 0, 0, 0);
        CloseHandle (Diagramm);
        Diagramm: = 0;
      Ende;
    Ende;
    DLL_PROCESS_DETACH:
    anfangen
      UnmapViewOfFile (buf);
      buf: = Null;
    Ende;
  Ende;
Ende;

Exporte
  SetHook,
  RemoveHook;

//-Hauptleitung
anfangen
  DisableThreadLibraryCalls (hInstance);
  DllProc: = @DLLEntry;
  DllEntry (DLL_PROCESS_ATTACH);
Ende.

Antwort : Anwendungsprozess-Weg

>> denke ich, dass es Betrug, nicht Pro ist.

warum?

>> Es arbeitet nicht an Keinfenster und Konsole apps.

Sure ist es Weise 1a und wie ich sie in HTTP erwähnte: #33496630, das es nicht mit solchen Fenstern funktioniert, weil es auf Abfangen die Fensterkreationsmitteilung basiert. So kann es nicht mit Keinfenster apps arbeiten. Es kann nicht mit den Konsole apps auch arbeiten, weil SetWindowsHook und SetWinEventHook nicht Mitteilungen der Konsolenfenster abfangen.
Weitere Lösungen  
 
programming4us programming4us