home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l430 / 1.ddi / CHAP5.ZIP / TASKQ.C < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-08  |  1.4 KB  |  57 lines

  1. /*
  2.     TASKQ.C -- Task Queue info
  3.  
  4.     From Chapter 5 of "Undocumented Windows" (Addison-Wesley 1992)
  5.     by Andrew Schulman, Dave Maxey and Matt Pietrek
  6.  
  7.     Build using: WINIOBC TASKQ (for Borland C++ v3.00)
  8.                  WINIOMS TASKQ (for Microsoft C/SDK)
  9. */
  10.  
  11. #include <windows.h>
  12. #include <stdlib.h>
  13. #include <dos.h>
  14. #include "winio.h"
  15.  
  16. #ifndef __BORLANDC__ 
  17. #define MK_FP(a,b)  ((void far *)(((unsigned long)(a) << 16) | (b))) 
  18. #endif 
  19.  
  20. typedef struct {
  21.     WORD wNext;
  22.     HANDLE hTask;
  23.     WORD wSize;
  24.     WORD wNumMsgs;
  25.     // ... other fields:  see Task Queue ...
  26.     } TASKQ;
  27.  
  28. WORD FAR PASCAL GetTaskQueue(HANDLE hTask);
  29.  
  30. main(int argc, char *argv[])
  31. {
  32.     HANDLE hTaskQ;
  33.     TASKQ far *fpTaskQ;
  34.     
  35.     winio_about("TASKQ"
  36.         "\nTask Queue info"
  37.         "\nUsage: TASKQ [window title]"
  38.         "\n\nFrom Chapter 5 of"
  39.         "\n\"Undocumented Windows\" (Addison-Wesley, 1992)"
  40.         "\nby Andrew Schulman, David Maxey and Matt Pietrek"
  41.         );
  42.     
  43.     if (argc < 2)
  44.         hTaskQ = GetTaskQueue(0);
  45.     else
  46.         hTaskQ = GetTaskQueue(GetWindowTask(FindWindow(0L, argv[1])));
  47.     
  48.     if (! hTaskQ)
  49.         fail("Can't locate Task Queue");
  50.             
  51.     fpTaskQ = MK_FP(hTaskQ, 0);
  52.     printf("Task: %04x\n", fpTaskQ->hTask);
  53.     printf("Number of pending messages: %u\n", fpTaskQ->wNumMsgs);
  54.     return 0;
  55. }
  56.  
  57.