| /* SPY.C |
| * |
| * Copyright 1994, Bob Amstadt |
| */ |
| |
| #include <stdlib.h> |
| #include <stdio.h> |
| #include <X11/Xlib.h> |
| #include <X11/Xresource.h> |
| #include <string.h> |
| #include "wineopts.h" |
| #include "windows.h" |
| #include "wine.h" |
| #include "options.h" |
| |
| #ifndef NOSPY |
| |
| #define SPY_MAX_MSGNUM 0x0232 |
| |
| const char *MessageTypeNames[SPY_MAX_MSGNUM + 1] = |
| { |
| "WM_NULL", /* 0x00 */ |
| "WM_CREATE", |
| "WM_DESTROY", |
| "WM_MOVE", |
| "WM_UNUSED0", |
| "WM_SIZE", |
| "WM_ACTIVATE", |
| "WM_SETFOCUS", |
| "WM_KILLFOCUS", |
| "WM_UNUSED1", |
| "WM_ENABLE", |
| "WM_SETREDRAW", |
| "WM_SETTEXT", |
| "WM_GETTEXT", |
| "WM_GETTEXTLENGTH", |
| "WM_PAINT", |
| "WM_CLOSE", /* 0x10 */ |
| "WM_QUERYENDSESSION", |
| "WM_QUIT", |
| "WM_QUERYOPEN", |
| "WM_ERASEBKGND", |
| "WM_SYSCOLORCHANGE", |
| "WM_ENDSESSION", |
| "WM_UNUSED2", |
| "WM_SHOWWINDOW", |
| "WM_CTLCOLOR", |
| "WM_WININICHANGE", |
| "WM_DEVMODECHANGE", |
| "WM_ACTIVATEAPP", |
| "WM_FONTCHANGE", |
| "WM_TIMECHANGE", |
| "WM_CANCELMODE", |
| "WM_SETCURSOR", /* 0x20 */ |
| "WM_MOUSEACTIVATE", |
| "WM_CHILDACTIVATE", |
| "WM_QUEUESYNC", |
| "WM_GETMINMAXINFO", |
| "WM_UNUSED3", |
| "WM_PAINTICON", |
| "WM_ICONERASEBKGND", |
| "WM_NEXTDLGCTL", |
| "WM_UNUSED4", |
| "WM_SPOOLERSTATUS", |
| "WM_DRAWITEM", |
| "WM_MEASUREITEM", |
| "WM_DELETEITEM", |
| "WM_VKEYTOITEM", |
| "WM_CHARTOITEM", |
| "WM_SETFONT", /* 0x30 */ |
| "WM_GETFONT", NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x40 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, |
| "WM_WINDOWPOSCHANGING", /* 0x0046 */ |
| "WM_WINDOWPOSCHANGED", /* 0x0047 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x0050 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x0060 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x0070 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| NULL, /* 0x0080 */ |
| "WM_NCCREATE", /* 0x0081 */ |
| "WM_NCDESTROY", /* 0x0082 */ |
| "WM_NCCALCSIZE", /* 0x0083 */ |
| "WM_NCHITTEST", /* 0x0084 */ |
| "WM_NCPAINT", /* 0x0085 */ |
| "WM_NCACTIVATE", /* 0x0086 */ |
| "WM_GETDLGCODE", /* 0x0087 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x0090 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x00A0 */ |
| "WM_NCMOUSEMOVE", /* 0x00A0 */ |
| "WM_NCLBUTTONDOWN", /* 0x00A1 */ |
| "WM_NCLBUTTONUP", /* 0x00A2 */ |
| "WM_NCLBUTTONDBLCLK", /* 0x00A3 */ |
| "WM_NCRBUTTONDOWN", /* 0x00A4 */ |
| "WM_NCRBUTTONUP", /* 0x00A5 */ |
| "WM_NCRBUTTONDBLCLK", /* 0x00A6 */ |
| "WM_NCMBUTTONDOWN", /* 0x00A7 */ |
| "WM_NCMBUTTONUP", /* 0x00A8 */ |
| "WM_NCMBUTTONDBLCLK", /* 0x00A9 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x00B0 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x00C0 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x00D0 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x00E0 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x00F0 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| "WM_KEYDOWN", /* 0x0100 */ |
| "WM_KEYUP", /* 0x0101 */ |
| "WM_CHAR", /* 0x0102 */ |
| "WM_DEADCHAR", /* 0x0103 */ |
| "WM_SYSKEYDOWN", /* 0x0104 */ |
| "WM_SYSKEYUP", /* 0x0105 */ |
| "WM_SYSCHAR", /* 0x0106 */ |
| "WM_SYSDEADCHAR", /* 0x0107 */ |
| "WM_KEYLAST", /* 0x0108 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| "WM_INITDIALOG", /* 0x0110 */ |
| "WM_COMMAND", /* 0x0111 */ |
| "WM_SYSCOMMAND", /* 0x0112 */ |
| "WM_TIMER", /* 0x0113 */ |
| "WM_HSCROLL", /* 0x0114 */ |
| "WM_VSCROLL", /* 0x0115 */ |
| NULL, NULL, |
| "WM_SYSTIMER", /* 0x0118 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x0120 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x0130 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x0140 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x0150 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x0160 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x0170 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x0180 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x0190 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x01A0 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x01B0 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x01C0 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x01D0 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x01E0 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x01F0 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| "WM_MOUSEMOVE", /* 0x0200 */ |
| "WM_LBUTTONDOWN", /* 0x0201 */ |
| "WM_LBUTTONUP", /* 0x0202 */ |
| "WM_LBUTTONDBLCLK", /* 0x0203 */ |
| "WM_RBUTTONDOWN", /* 0x0204 */ |
| "WM_RBUTTONUP", /* 0x0205 */ |
| "WM_RBUTTONDBLCLK", /* 0x0206 */ |
| "WM_MBUTTONDOWN", /* 0x0207 */ |
| "WM_MBUTTONUP", /* 0x0208 */ |
| "WM_MBUTTONDBLCLK", /* 0x0209 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| "WM_PARENTNOTIFY", /* 0x0210 */ |
| |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| /* 0x0220 */ |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, |
| |
| |
| NULL, /* 0x0230 */ |
| "WM_ENTERSIZEMOVE", /* 0x0231 */ |
| "WM_EXITSIZEMOVE" /* 0x0232 */ |
| }; |
| |
| char SpyFilters[256]; |
| char SpyIncludes[256]; |
| |
| #endif /* NOSPY */ |
| |
| /********************************************************************** |
| * SpyMessage |
| */ |
| void SpyMessage(HWND hwnd, WORD msg, WORD wParam, LONG lParam) |
| { |
| #ifndef NOSPY |
| char msg_name[80]; |
| |
| if (SpyFp == NULL) |
| return; |
| |
| if (msg > SPY_MAX_MSGNUM || MessageTypeNames[msg] == NULL) |
| sprintf(msg_name, "%04x", msg); |
| else |
| strcpy(msg_name, MessageTypeNames[msg]); |
| |
| strcat(msg_name, ";"); |
| |
| if ((strlen(SpyIncludes) == 0 || strstr(SpyIncludes, msg_name) != NULL) && |
| strstr(SpyFilters, msg_name) == NULL) |
| { |
| msg_name[strlen(msg_name) - 1] = '\0'; |
| fprintf(SpyFp, "%04.4x %20.20s %04.4x %04.4x %08.8x\n", |
| hwnd, msg_name, msg, wParam, lParam); |
| } |
| #endif |
| } |
| |
| /********************************************************************** |
| * SpyInit |
| */ |
| void SpyInit(void) |
| { |
| char filename[100]; |
| |
| if (SpyFp != NULL) |
| return; |
| |
| if (Options.spyFilename == NULL) |
| { |
| GetPrivateProfileString("spy", "file", "", filename, sizeof(filename), |
| WINE_INI); |
| } |
| else |
| strncpy(filename, Options.spyFilename, 100); |
| |
| if (strcasecmp(filename, "CON") == 0) |
| SpyFp = stdout; |
| else if (strlen(filename)) |
| SpyFp = fopen(filename, "a"); |
| else |
| { |
| SpyFp = NULL; |
| return; |
| } |
| |
| GetPrivateProfileString("spy", "exclude", "", SpyFilters, |
| sizeof(SpyFilters), WINE_INI); |
| GetPrivateProfileString("spy", "include", "", SpyIncludes, |
| sizeof(SpyIncludes), WINE_INI); |
| } |