JwaDde.pas
上传用户:davidchvip
上传日期:2009-07-28
资源大小:1749k
文件大小:10k
源码类别:

Windows编程

开发平台:

Delphi

  1. {******************************************************************************}
  2. {                                                                       }
  3. { Dynamic Data Exchange API interface Unit for Object Pascal                   }
  4. {                                                                       }
  5. { Portions created by Microsoft are Copyright (C) 1995-2001 Microsoft          }
  6. { Corporation. All Rights Reserved.                                            }
  7. {                 }
  8. { The original file is: dde.h, released June 2000. The original Pascal         }
  9. { code is: Dde.pas, released December 2000. The initial developer of the       }
  10. { Pascal code is Marcel van Brakel (brakelm@chello.nl).                        }
  11. {                                                                              }
  12. { Portions created by Marcel van Brakel are Copyright (C) 1999-2001            }
  13. { Marcel van Brakel. All Rights Reserved.                                      }
  14. {                 }
  15. { Obtained through: Joint Endeavour of Delphi Innovators (Project JEDI)        }
  16. {                }
  17. { You may retrieve the latest version of this file at the Project JEDI home    }
  18. { page, located at http://delphi-jedi.org or my personal homepage located at   }
  19. { http://members.chello.nl/m.vanbrakel2                                        }
  20. {                }
  21. { The contents of this file are used with permission, subject to the Mozilla   }
  22. { Public License Version 1.1 (the "License"); you may not use this file except }
  23. { in compliance with the License. You may obtain a copy of the License at      }
  24. { http://www.mozilla.org/MPL/MPL-1.1.html                                      }
  25. {                                                                              }
  26. { Software distributed under the License is distributed on an "AS IS" basis,   }
  27. { WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for }
  28. { the specific language governing rights and limitations under the License.    }
  29. {                                                                              }
  30. { Alternatively, the contents of this file may be used under the terms of the  }
  31. { GNU Lesser General Public License (the  "LGPL License"), in which case the   }
  32. { provisions of the LGPL License are applicable instead of those above.        }
  33. { If you wish to allow use of your version of this file only under the terms   }
  34. { of the LGPL License and not to allow others to use your version of this file }
  35. { under the MPL, indicate your decision by deleting  the provisions above and  }
  36. { replace  them with the notice and other provisions required by the LGPL      }
  37. { License.  If you do not delete the provisions above, a recipient may use     }
  38. { your version of this file under either the MPL or the LGPL License.          }
  39. {                 }
  40. { For more information about the LGPL: http://www.gnu.org/copyleft/lesser.html }
  41. {                 }
  42. {******************************************************************************}
  43. unit JwaDde;
  44. {$WEAKPACKAGEUNIT}
  45. {$HPPEMIT ''}
  46. {$HPPEMIT '#include "Dde.h"'}
  47. {$HPPEMIT ''}
  48. {$I WINDEFINES.INC}
  49. interface
  50. uses
  51.   JwaWinNT, JwaWinType;
  52. // DDE window messages
  53. const
  54.   WM_DDE_FIRST = $03E0;
  55.   {$EXTERNALSYM WM_DDE_FIRST}
  56.   WM_DDE_INITIATE = (WM_DDE_FIRST);
  57.   {$EXTERNALSYM WM_DDE_INITIATE}
  58.   WM_DDE_TERMINATE = (WM_DDE_FIRST + 1);
  59.   {$EXTERNALSYM WM_DDE_TERMINATE}
  60.   WM_DDE_ADVISE = (WM_DDE_FIRST + 2);
  61.   {$EXTERNALSYM WM_DDE_ADVISE}
  62.   WM_DDE_UNADVISE = (WM_DDE_FIRST + 3);
  63.   {$EXTERNALSYM WM_DDE_UNADVISE}
  64.   WM_DDE_ACK = (WM_DDE_FIRST + 4);
  65.   {$EXTERNALSYM WM_DDE_ACK}
  66.   WM_DDE_DATA = (WM_DDE_FIRST + 5);
  67.   {$EXTERNALSYM WM_DDE_DATA}
  68.   WM_DDE_REQUEST = (WM_DDE_FIRST + 6);
  69.   {$EXTERNALSYM WM_DDE_REQUEST}
  70.   WM_DDE_POKE = (WM_DDE_FIRST + 7);
  71.   {$EXTERNALSYM WM_DDE_POKE}
  72.   WM_DDE_EXECUTE = (WM_DDE_FIRST + 8);
  73.   {$EXTERNALSYM WM_DDE_EXECUTE}
  74.   WM_DDE_LAST = (WM_DDE_FIRST + 8);
  75.   {$EXTERNALSYM WM_DDE_LAST}
  76. {*----------------------------------------------------------------------------
  77. |       DDEACK structure
  78. |
  79. | Structure of wStatus (LOWORD(lParam)) in WM_DDE_ACK message
  80. |       sent in response to a WM_DDE_DATA, WM_DDE_REQUEST, WM_DDE_POKE,
  81. |       WM_DDE_ADVISE, or WM_DDE_UNADVISE message.
  82. |
  83. ----------------------------------------------------------------------------*}
  84. type
  85.   DDEACK = record
  86.     Flags: Word;
  87.     // bAppReturnCode:8,
  88.     // reserved:6,
  89.     // fBusy:1,
  90.     // fAck:1;
  91.   end;
  92.   {$EXTERNALSYM DDEACK}
  93.   TDdeAck = DDEACK;
  94.   PDdeAck = ^DDEACK;
  95. {*----------------------------------------------------------------------------
  96. |       DDEADVISE structure
  97. |
  98. | WM_DDE_ADVISE parameter structure for hOptions (LOWORD(lParam))
  99. |
  100. ----------------------------------------------------------------------------*}
  101. type
  102.   DDEADVICE = record
  103.     Flags: Word;
  104.     // reserved:14,
  105.     // fDeferUpd:1,
  106.     // fAckReq:1;
  107.     cfFormat: Smallint;
  108.   end;
  109.   {$EXTERNALSYM DDEADVICE}
  110.   TDdeAdvice = DDEADVICE;
  111.   PDdeAdvice = ^DDEADVICE;
  112. {*----------------------------------------------------------------------------
  113. |       DDEDATA structure
  114. |
  115. |       WM_DDE_DATA parameter structure for hData (LOWORD(lParam)).
  116. |       The actual size of this structure depends on the size of
  117. |       the Value array.
  118. |
  119. ----------------------------------------------------------------------------*}
  120. type
  121.   DDEDATA = record
  122.     usFlags: Word;
  123.     // unused:12,
  124.     // fResponse:1,
  125.     // fRelease:1,
  126.     // reserved:1,
  127.     // fAckReq:1;
  128.     cfFormat: Smallint;
  129.     Value: array [0..0] of Byte;
  130.   end;
  131.   {$EXTERNALSYM DDEDATA}
  132.   TDdeData = DDEDATA;
  133.   PDdeData = ^DDEDATA;
  134. {*----------------------------------------------------------------------------
  135. | DDEPOKE structure
  136. |
  137. | WM_DDE_POKE parameter structure for hData (LOWORD(lParam)).
  138. |       The actual size of this structure depends on the size of
  139. |       the Value array.
  140. |
  141. ----------------------------------------------------------------------------*}
  142. type
  143.   DDEPOKE = record
  144.     usFlags: Word;
  145.     //unused:13,  // Earlier versions of DDE.H incorrectly 12 unused bits.
  146.     //fRelease:1,
  147.     //fReserved:2;
  148.     cfFormat: Smallint;
  149.     Value: array [0..0] of Byte;  // This member was named rgb[1] in previous
  150.                                   // versions of DDE.H
  151.   end;
  152.   {$EXTERNALSYM DDEPOKE}
  153.   TDdePoke = DDEPOKE;
  154.   PDdePoke = ^DDEPOKE;
  155. {*----------------------------------------------------------------------------
  156. The following typedef's were used in previous versions of the Windows SDK.
  157. They are still valid.  The above typedef's define exactly the same structures
  158. as those below.  The above typedef names are recommended, however, as they
  159. are more meaningful.
  160. Note that the DDEPOKE structure typedef'ed in earlier versions of DDE.H did
  161. not correctly define the bit positions.
  162. ----------------------------------------------------------------------------*}
  163. type
  164.   DDELN = record
  165.     usFlags: Word;
  166.     // unused:13,
  167.     // fRelease:1,
  168.     // fDeferUpd:1,
  169.     // fAckReq:1;
  170.     cfFormat: Smallint;
  171.   end;
  172.   {$EXTERNALSYM DDELN}
  173.   TDdeLn = DDELN;
  174.   PDdeLn = ^DDELN;
  175.   DDEUP = record
  176.     usFlags: Word;
  177.     // unused:12,
  178.     // fAck:1,
  179.     // fRelease:1,
  180.     // fReserved:1,
  181.     // fAckReq:1;
  182.     cfFormat: Smallint;
  183.     rgb: array [0..0] of Byte;
  184.   end;
  185.   {$EXTERNALSYM DDEUP}
  186.   TDdeUp = DDEUP;
  187.   PDdeUp = ^DDEUP;
  188. //
  189. // DDE SECURITY
  190. //
  191. function DdeSetQualityOfService(hwndClient: HWND; const pqosNew: SECURITY_QUALITY_OF_SERVICE;
  192.   pqosPrev: PSECURITY_QUALITY_OF_SERVICE): BOOL; stdcall;
  193. {$EXTERNALSYM DdeSetQualityOfService}
  194. function ImpersonateDdeClientWindow(hWndClient, hWndServer: HWND): BOOL; stdcall;
  195. {$EXTERNALSYM ImpersonateDdeClientWindow}
  196. //
  197. // DDE message packing APIs
  198. //
  199. function PackDDElParam(msg: UINT; uiLo, uiHi: UINT_PTR): LPARAM; stdcall;
  200. {$EXTERNALSYM PackDDElParam}
  201. function UnpackDDElParam(msg: UINT; lParam: LPARAM; puiLo, puiHi: PUINT_PTR): BOOL; stdcall;
  202. {$EXTERNALSYM UnpackDDElParam}
  203. function FreeDDElParam(msg: UINT; lParam: LPARAM): BOOL; stdcall;
  204. {$EXTERNALSYM FreeDDElParam}
  205. function ReuseDDElParam(lParam: LPARAM; msgIn, msgOut: UINT; uiLo, uiHi: UINT_PTR): LPARAM; stdcall;
  206. {$EXTERNALSYM ReuseDDElParam}
  207. implementation
  208. const
  209.   user32 = 'user32.dll';
  210. {$IFDEF DYNAMIC_LINK}
  211. var
  212.   _DdeSetQualityOfService: Pointer;
  213. function DdeSetQualityOfService;
  214. begin
  215.   GetProcedureAddress(_DdeSetQualityOfService, user32, 'DdeSetQualityOfService');
  216.   asm
  217.     mov esp, ebp
  218.     pop ebp
  219.     jmp [_DdeSetQualityOfService]
  220.   end;
  221. end;
  222. {$ELSE}
  223. function DdeSetQualityOfService; external user32 name 'DdeSetQualityOfService';
  224. {$ENDIF DYNAMIC_LINK}
  225. {$IFDEF DYNAMIC_LINK}
  226. var
  227.   _ImpersonateDdeClientWindow: Pointer;
  228. function ImpersonateDdeClientWindow;
  229. begin
  230.   GetProcedureAddress(_ImpersonateDdeClientWindow, user32, 'ImpersonateDdeClientWindow');
  231.   asm
  232.     mov esp, ebp
  233.     pop ebp
  234.     jmp [_ImpersonateDdeClientWindow]
  235.   end;
  236. end;
  237. {$ELSE}
  238. function ImpersonateDdeClientWindow; external user32 name 'ImpersonateDdeClientWindow';
  239. {$ENDIF DYNAMIC_LINK}
  240. {$IFDEF DYNAMIC_LINK}
  241. var
  242.   _PackDDElParam: Pointer;
  243. function PackDDElParam;
  244. begin
  245.   GetProcedureAddress(_PackDDElParam, user32, 'PackDDElParam');
  246.   asm
  247.     mov esp, ebp
  248.     pop ebp
  249.     jmp [_PackDDElParam]
  250.   end;
  251. end;
  252. {$ELSE}
  253. function PackDDElParam; external user32 name 'PackDDElParam';
  254. {$ENDIF DYNAMIC_LINK}
  255. {$IFDEF DYNAMIC_LINK}
  256. var
  257.   _UnpackDDElParam: Pointer;
  258. function UnpackDDElParam;
  259. begin
  260.   GetProcedureAddress(_UnpackDDElParam, user32, 'UnpackDDElParam');
  261.   asm
  262.     mov esp, ebp
  263.     pop ebp
  264.     jmp [_UnpackDDElParam]
  265.   end;
  266. end;
  267. {$ELSE}
  268. function UnpackDDElParam; external user32 name 'UnpackDDElParam';
  269. {$ENDIF DYNAMIC_LINK}
  270. {$IFDEF DYNAMIC_LINK}
  271. var
  272.   _FreeDDElParam: Pointer;
  273. function FreeDDElParam;
  274. begin
  275.   GetProcedureAddress(_FreeDDElParam, user32, 'FreeDDElParam');
  276.   asm
  277.     mov esp, ebp
  278.     pop ebp
  279.     jmp [_FreeDDElParam]
  280.   end;
  281. end;
  282. {$ELSE}
  283. function FreeDDElParam; external user32 name 'FreeDDElParam';
  284. {$ENDIF DYNAMIC_LINK}
  285. {$IFDEF DYNAMIC_LINK}
  286. var
  287.   _ReuseDDElParam: Pointer;
  288. function ReuseDDElParam;
  289. begin
  290.   GetProcedureAddress(_ReuseDDElParam, user32, 'ReuseDDElParam');
  291.   asm
  292.     mov esp, ebp
  293.     pop ebp
  294.     jmp [_ReuseDDElParam]
  295.   end;
  296. end;
  297. {$ELSE}
  298. function ReuseDDElParam; external user32 name 'ReuseDDElParam';
  299. {$ENDIF DYNAMIC_LINK}
  300. end.