Hex Artifact Content

Not logged in

Artifact 882f1cfcdc84a351364334b301cc8c1f0a1444a2:


0000: 23 69 66 6e 64 65 66 20 5f 4b 49 4c 49 42 5f 57  #ifndef _KILIB_W
0010: 49 4e 55 54 49 4c 5f 48 5f 0d 0a 23 64 65 66 69  INUTIL_H_..#defi
0020: 6e 65 20 5f 4b 49 4c 49 42 5f 57 49 4e 55 54 49  ne _KILIB_WINUTI
0030: 4c 5f 48 5f 0d 0a 23 69 6e 63 6c 75 64 65 20 22  L_H_..#include "
0040: 74 79 70 65 73 2e 68 22 0d 0a 23 69 6e 63 6c 75  types.h"..#inclu
0050: 64 65 20 22 6d 65 6d 6f 72 79 2e 68 22 0d 0a 23  de "memory.h"..#
0060: 69 6e 63 6c 75 64 65 20 22 6b 74 6c 61 70 74 72  include "ktlaptr
0070: 2e 68 22 0d 0a 23 69 66 6e 64 65 66 20 5f 5f 63  .h"..#ifndef __c
0080: 63 64 6f 63 5f 5f 0d 0a 6e 61 6d 65 73 70 61 63  cdoc__..namespac
0090: 65 20 6b 69 20 7b 0d 0a 23 65 6e 64 69 66 0d 0a  e ki {..#endif..
00a0: 0d 0a 0d 0a 0d 0a 2f 2f 3d 3d 3d 3d 3d 3d 3d 3d  ......//========
00b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
00c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
00d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
00e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
00f0: 3d 0d 0a 2f 2f 40 7b 20 40 70 6b 67 20 6b 69 2e  =..//@{ @pkg ki.
0100: 57 69 6e 55 74 69 6c 20 2f 2f 40 7d 0d 0a 2f 2f  WinUtil //@}..//
0110: 40 7b 0d 0a 2f 2f 09 83 4e 83 8a 83 62 83 76 83  @{..//..N...b.v.
0120: 7b 81 5b 83 68 8a c7 97 9d 0d 0a 2f 2f 0d 0a 2f  {.[.h......//../
0130: 2f 09 4f 70 65 6e 43 6c 69 70 62 6f 61 72 64 20  /.OpenClipboard 
0140: 82 e2 20 43 6c 6f 73 65 43 6c 69 70 62 6f 61 72  .. CloseClipboar
0150: 64 20 95 d3 82 e8 82 cc 8c c4 82 d1 8f 6f 82 b5  d ...........o..
0160: 82 f0 93 4b 93 96 82 c9 8e a9 93 ae 89 bb 82 b5  ...K............
0170: 82 dc 82 b7 81 42 0d 0a 2f 2f 40 7d 0d 0a 2f 2f  .....B..//@}..//
0180: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0190: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
01c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a 63 6c 61  =========....cla
01d0: 73 73 20 43 6c 69 70 62 6f 61 72 64 20 3a 20 70  ss Clipboard : p
01e0: 75 62 6c 69 63 20 4f 62 6a 65 63 74 0d 0a 7b 0d  ublic Object..{.
01f0: 0a 70 75 62 6c 69 63 3a 0d 0a 0d 0a 09 2f 2f 40  .public:.....//@
0200: 7b 20 8a 4a 82 ad 20 2f 2f 40 7d 0d 0a 09 43 6c  { .J.. //@}...Cl
0210: 69 70 62 6f 61 72 64 28 20 48 57 4e 44 20 6f 77  ipboard( HWND ow
0220: 6e 65 72 2c 20 62 6f 6f 6c 20 72 65 61 64 3d 74  ner, bool read=t
0230: 72 75 65 20 29 3b 0d 0a 0d 0a 09 2f 2f 40 7b 20  rue );.....//@{ 
0240: 95 c2 82 b6 82 e9 20 2f 2f 40 7d 0d 0a 09 7e 43  ...... //@}...~C
0250: 6c 69 70 62 6f 61 72 64 28 29 3b 0d 0a 0d 0a 09  lipboard();.....
0260: 2f 2f 40 7b 20 83 66 81 5b 83 5e 93 c7 82 dd 8d  //@{ .f.[.^.....
0270: 9e 82 dd 20 2f 2f 40 7d 0d 0a 09 48 41 4e 44 4c  ... //@}...HANDL
0280: 45 20 47 65 74 44 61 74 61 28 20 55 49 4e 54 20  E GetData( UINT 
0290: 75 46 6f 72 6d 61 74 20 29 20 63 6f 6e 73 74 3b  uFormat ) const;
02a0: 0d 0a 0d 0a 09 2f 2f 40 7b 20 8e 77 92 e8 83 74  .....//@{ .w...t
02b0: 83 48 81 5b 83 7d 83 62 83 67 82 cc 83 66 81 5b  .H.[.}.b.g...f.[
02c0: 83 5e 82 aa 83 4e 83 8a 83 62 83 76 83 7b 81 5b  .^...N...b.v.{.[
02d0: 83 68 8f e3 82 c9 82 a0 82 e9 82 a9 81 48 20 2f  .h...........H /
02e0: 2f 40 7d 0d 0a 09 62 6f 6f 6c 20 49 73 41 76 61  /@}...bool IsAva
02f0: 69 6c 28 20 55 49 4e 54 20 75 46 6f 72 6d 61 74  il( UINT uFormat
0300: 20 29 20 63 6f 6e 73 74 3b 0d 0a 0d 0a 09 2f 2f   ) const;.....//
0310: 40 7b 20 8e 77 92 e8 83 74 83 48 81 5b 83 7d 83  @{ .w...t.H.[.}.
0320: 62 83 67 82 cc 83 66 81 5b 83 5e 82 aa 83 4e 83  b.g...f.[.^...N.
0330: 8a 83 62 83 76 83 7b 81 5b 83 68 8f e3 82 c9 82  ..b.v.{.[.h.....
0340: a0 82 e9 82 a9 81 48 28 95 a1 90 94 29 20 2f 2f  ......H(....) //
0350: 40 7d 0d 0a 09 62 6f 6f 6c 20 49 73 41 76 61 69  @}...bool IsAvai
0360: 6c 28 20 55 49 4e 54 20 75 46 6f 72 6d 61 74 73  l( UINT uFormats
0370: 5b 5d 2c 20 69 6e 74 20 6e 75 6d 20 29 20 63 6f  [], int num ) co
0380: 6e 73 74 3b 0d 0a 0d 0a 09 2f 2f 40 7b 20 83 65  nst;.....//@{ .e
0390: 83 4c 83 58 83 67 8f ee 95 f1 95 db 8e 9d 83 4e  .L.X.g.........N
03a0: 83 89 83 58 20 2f 2f 40 7d 0d 0a 09 63 6c 61 73  ...X //@}...clas
03b0: 73 20 54 65 78 74 20 7b 0d 0a 09 09 66 72 69 65  s Text {....frie
03c0: 6e 64 20 63 6c 61 73 73 20 43 6c 69 70 62 6f 61  nd class Clipboa
03d0: 72 64 3b 0d 0a 0d 0a 09 09 6d 75 74 61 62 6c 65  rd;......mutable
03e0: 20 75 6e 69 63 6f 64 65 2a 20 20 20 20 20 20 20   unicode*       
03f0: 20 73 74 72 5f 3b 0d 0a 09 09 65 6e 75 6d 20 54   str_;....enum T
0400: 70 20 7b 20 4e 45 57 2c 20 47 41 4c 4c 4f 43 20  p { NEW, GALLOC 
0410: 7d 20 6d 65 6d 5f 3b 0d 0a 0d 0a 09 09 54 65 78  } mem_;......Tex
0420: 74 28 20 75 6e 69 63 6f 64 65 2a 20 73 2c 20 54  t( unicode* s, T
0430: 70 20 6d 20 29 20 3a 20 73 74 72 5f 28 73 29 2c  p m ) : str_(s),
0440: 20 6d 65 6d 5f 28 6d 29 20 7b 7d 0d 0a 09 09 76   mem_(m) {}....v
0450: 6f 69 64 20 6f 70 65 72 61 74 6f 72 3d 28 20 63  oid operator=( c
0460: 6f 6e 73 74 20 54 65 78 74 26 20 29 3b 0d 0a 0d  onst Text& );...
0470: 0a 09 70 75 62 6c 69 63 3a 0d 0a 09 09 54 65 78  ..public:....Tex
0480: 74 28 20 63 6f 6e 73 74 20 54 65 78 74 26 20 74  t( const Text& t
0490: 20 29 0d 0a 09 09 09 3a 20 73 74 72 5f 28 74 2e   ).....: str_(t.
04a0: 73 74 72 5f 29 2c 20 6d 65 6d 5f 28 74 2e 6d 65  str_), mem_(t.me
04b0: 6d 5f 29 20 7b 20 74 2e 73 74 72 5f 3d 4e 55 4c  m_) { t.str_=NUL
04c0: 4c 3b 20 7d 0d 0a 09 09 7e 54 65 78 74 28 29 0d  L; }....~Text().
04d0: 0a 09 09 09 7b 0d 0a 09 09 09 09 69 66 28 20 73  ....{......if( s
04e0: 74 72 5f 20 21 3d 20 4e 55 4c 4c 20 29 0d 0a 09  tr_ != NULL )...
04f0: 09 09 09 09 69 66 28 20 6d 65 6d 5f 3d 3d 4e 45  ....if( mem_==NE
0500: 57 20 29 20 64 65 6c 65 74 65 20 5b 5d 20 73 74  W ) delete [] st
0510: 72 5f 3b 0d 0a 09 09 09 09 09 65 6c 73 65 20 20  r_;.......else  
0520: 20 20 20 20 47 6c 6f 62 61 6c 55 6e 6c 6f 63 6b      GlobalUnlock
0530: 28 20 73 74 72 5f 20 29 3b 0d 0a 09 09 09 7d 0d  ( str_ );.....}.
0540: 0a 09 09 63 6f 6e 73 74 20 75 6e 69 63 6f 64 65  ...const unicode
0550: 2a 20 64 61 74 61 28 29 20 63 6f 6e 73 74 20 7b  * data() const {
0560: 20 72 65 74 75 72 6e 20 73 74 72 5f 3b 20 7d 0d   return str_; }.
0570: 0a 09 7d 3b 0d 0a 0d 0a 09 2f 2f 40 7b 20 83 65  ..};.....//@{ .e
0580: 83 4c 83 58 83 67 93 c7 82 dd 8d 9e 82 dd 20 2f  .L.X.g........ /
0590: 2f 40 7d 0d 0a 09 54 65 78 74 20 47 65 74 55 6e  /@}...Text GetUn
05a0: 69 63 6f 64 65 54 65 78 74 28 29 20 63 6f 6e 73  icodeText() cons
05b0: 74 3b 0d 0a 0d 0a 09 2f 2f 40 7b 20 83 66 81 5b  t;.....//@{ .f.[
05c0: 83 5e 8f 91 82 ab 8d 9e 82 dd 20 2f 2f 40 7d 0d  .^........ //@}.
05d0: 0a 09 62 6f 6f 6c 20 53 65 74 44 61 74 61 28 20  ..bool SetData( 
05e0: 55 49 4e 54 20 75 46 6f 72 6d 61 74 2c 20 48 41  UINT uFormat, HA
05f0: 4e 44 4c 45 20 68 44 61 74 61 20 29 3b 0d 0a 0d  NDLE hData );...
0600: 0a 09 2f 2f 40 7b 20 93 c6 8e a9 83 74 83 48 81  ..//@{ .....t.H.
0610: 5b 83 7d 83 62 83 67 82 cc 93 6f 98 5e 20 2f 2f  [.}.b.g...o.^ //
0620: 40 7d 0d 0a 09 73 74 61 74 69 63 20 55 49 4e 54  @}...static UINT
0630: 20 52 65 67 69 73 74 65 72 46 6f 72 6d 61 74 28   RegisterFormat(
0640: 20 63 6f 6e 73 74 20 54 43 48 41 52 2a 20 6e 61   const TCHAR* na
0650: 6d 65 20 29 3b 0d 0a 0d 0a 70 75 62 6c 69 63 3a  me );....public:
0660: 0d 0a 0d 0a 09 2f 2f 40 7b 20 90 b3 8f ed 82 c9  .....//@{ ......
0670: 8a 4a 82 a9 82 ea 82 c4 82 a2 82 e9 82 a9 83 60  .J.............`
0680: 83 46 83 62 83 4e 20 2f 2f 40 7d 0d 0a 09 62 6f  .F.b.N //@}...bo
0690: 6f 6c 20 69 73 4f 70 65 6e 65 64 28 29 20 63 6f  ol isOpened() co
06a0: 6e 73 74 3b 0d 0a 0d 0a 70 72 69 76 61 74 65 3a  nst;....private:
06b0: 0d 0a 0d 0a 09 62 6f 6f 6c 20 6f 70 65 6e 65 64  .....bool opened
06c0: 5f 3b 0d 0a 0d 0a 70 72 69 76 61 74 65 3a 0d 0a  _;....private:..
06d0: 0d 0a 09 4e 4f 43 4f 50 59 28 43 6c 69 70 62 6f  ...NOCOPY(Clipbo
06e0: 61 72 64 29 3b 0d 0a 7d 3b 0d 0a 0d 0a 0d 0a 0d  ard);..};.......
06f0: 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .//-------------
0700: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a  ------------....
0740: 69 6e 6c 69 6e 65 20 62 6f 6f 6c 20 43 6c 69 70  inline bool Clip
0750: 62 6f 61 72 64 3a 3a 69 73 4f 70 65 6e 65 64 28  board::isOpened(
0760: 29 20 63 6f 6e 73 74 0d 0a 09 7b 20 72 65 74 75  ) const...{ retu
0770: 72 6e 20 6f 70 65 6e 65 64 5f 3b 20 7d 0d 0a 0d  rn opened_; }...
0780: 0a 69 6e 6c 69 6e 65 20 48 41 4e 44 4c 45 20 43  .inline HANDLE C
0790: 6c 69 70 62 6f 61 72 64 3a 3a 47 65 74 44 61 74  lipboard::GetDat
07a0: 61 28 20 55 49 4e 54 20 75 46 6f 72 6d 61 74 20  a( UINT uFormat 
07b0: 29 20 63 6f 6e 73 74 0d 0a 09 7b 20 72 65 74 75  ) const...{ retu
07c0: 72 6e 20 3a 3a 47 65 74 43 6c 69 70 62 6f 61 72  rn ::GetClipboar
07d0: 64 44 61 74 61 28 20 75 46 6f 72 6d 61 74 20 29  dData( uFormat )
07e0: 3b 20 7d 0d 0a 0d 0a 69 6e 6c 69 6e 65 20 62 6f  ; }....inline bo
07f0: 6f 6c 20 43 6c 69 70 62 6f 61 72 64 3a 3a 53 65  ol Clipboard::Se
0800: 74 44 61 74 61 28 20 55 49 4e 54 20 75 46 6f 72  tData( UINT uFor
0810: 6d 61 74 2c 20 48 41 4e 44 4c 45 20 68 44 61 74  mat, HANDLE hDat
0820: 61 20 29 0d 0a 09 7b 20 72 65 74 75 72 6e 20 4e  a )...{ return N
0830: 55 4c 4c 20 21 3d 20 3a 3a 53 65 74 43 6c 69 70  ULL != ::SetClip
0840: 62 6f 61 72 64 44 61 74 61 28 20 75 46 6f 72 6d  boardData( uForm
0850: 61 74 2c 20 68 44 61 74 61 20 29 3b 20 7d 0d 0a  at, hData ); }..
0860: 0d 0a 69 6e 6c 69 6e 65 20 62 6f 6f 6c 20 43 6c  ..inline bool Cl
0870: 69 70 62 6f 61 72 64 3a 3a 49 73 41 76 61 69 6c  ipboard::IsAvail
0880: 28 20 55 49 4e 54 20 75 46 6f 72 6d 61 74 20 29  ( UINT uFormat )
0890: 20 63 6f 6e 73 74 0d 0a 09 7b 20 72 65 74 75 72   const...{ retur
08a0: 6e 20 66 61 6c 73 65 21 3d 3a 3a 49 73 43 6c 69  n false!=::IsCli
08b0: 70 62 6f 61 72 64 46 6f 72 6d 61 74 41 76 61 69  pboardFormatAvai
08c0: 6c 61 62 6c 65 28 75 46 6f 72 6d 61 74 29 3b 20  lable(uFormat); 
08d0: 7d 0d 0a 0d 0a 69 6e 6c 69 6e 65 20 62 6f 6f 6c  }....inline bool
08e0: 20 43 6c 69 70 62 6f 61 72 64 3a 3a 49 73 41 76   Clipboard::IsAv
08f0: 61 69 6c 28 20 55 49 4e 54 20 75 46 6f 72 6d 61  ail( UINT uForma
0900: 74 73 5b 5d 2c 20 69 6e 74 20 6e 75 6d 20 29 20  ts[], int num ) 
0910: 63 6f 6e 73 74 0d 0a 09 7b 20 72 65 74 75 72 6e  const...{ return
0920: 20 2d 31 21 3d 3a 3a 47 65 74 50 72 69 6f 72 69   -1!=::GetPriori
0930: 74 79 43 6c 69 70 62 6f 61 72 64 46 6f 72 6d 61  tyClipboardForma
0940: 74 28 75 46 6f 72 6d 61 74 73 2c 6e 75 6d 29 3b  t(uFormats,num);
0950: 20 7d 0d 0a 0d 0a 69 6e 6c 69 6e 65 20 55 49 4e   }....inline UIN
0960: 54 20 43 6c 69 70 62 6f 61 72 64 3a 3a 52 65 67  T Clipboard::Reg
0970: 69 73 74 65 72 46 6f 72 6d 61 74 28 20 63 6f 6e  isterFormat( con
0980: 73 74 20 54 43 48 41 52 2a 20 6e 61 6d 65 20 29  st TCHAR* name )
0990: 0d 0a 09 7b 20 72 65 74 75 72 6e 20 3a 3a 52 65  ...{ return ::Re
09a0: 67 69 73 74 65 72 43 6c 69 70 62 6f 61 72 64 46  gisterClipboardF
09b0: 6f 72 6d 61 74 28 6e 61 6d 65 29 3b 20 7d 0d 0a  ormat(name); }..
09c0: 0d 0a 0d 0a 0d 0a 2f 2f 3d 3d 3d 3d 3d 3d 3d 3d  ......//========
09d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
09e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
09f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0a00: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0a10: 3d 0d 0a 2f 2f 40 7b 0d 0a 2f 2f 09 94 72 91 bc  =..//@{..//..r..
0a20: 90 a7 8c e4 0d 0a 2f 2f 0d 0a 2f 2f 09 96 bc 91  ......//..//....
0a30: 4f 95 74 82 ab 4d 75 74 65 78 82 f0 88 b5 82 a2  O.t..Mutex......
0a40: 82 dc 82 b7 0d 0a 2f 2f 40 7d 0d 0a 2f 2f 3d 3d  ......//@}..//==
0a50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0a60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0a70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0a80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0a90: 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a 63 6c 61 73 73  =======....class
0aa0: 20 4d 75 74 65 78 20 3a 20 70 75 62 6c 69 63 20   Mutex : public 
0ab0: 4f 62 6a 65 63 74 0d 0a 7b 0d 0a 70 75 62 6c 69  Object..{..publi
0ac0: 63 3a 0d 0a 09 4d 75 74 65 78 28 20 63 6f 6e 73  c:...Mutex( cons
0ad0: 74 20 54 43 48 41 52 2a 20 6e 61 6d 65 20 29 3b  t TCHAR* name );
0ae0: 0d 0a 09 7e 4d 75 74 65 78 28 29 3b 0d 0a 0d 0a  ...~Mutex();....
0af0: 70 72 69 76 61 74 65 3a 0d 0a 09 63 6f 6e 73 74  private:...const
0b00: 20 48 41 4e 44 4c 45 20 6d 74 78 5f 3b 0d 0a 0d   HANDLE mtx_;...
0b10: 0a 70 72 69 76 61 74 65 3a 0d 0a 09 4e 4f 43 4f  .private:...NOCO
0b20: 50 59 28 4d 75 74 65 78 29 3b 0d 0a 7d 3b 0d 0a  PY(Mutex);..};..
0b30: 0d 0a 0d 0a 0d 0a 2f 2f 2d 2d 2d 2d 2d 2d 2d 2d  ......//--------
0b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b80: 2d 0d 0a 0d 0a 69 6e 6c 69 6e 65 20 4d 75 74 65  -....inline Mute
0b90: 78 3a 3a 4d 75 74 65 78 28 20 63 6f 6e 73 74 20  x::Mutex( const 
0ba0: 54 43 48 41 52 2a 20 6e 61 6d 65 20 29 0d 0a 09  TCHAR* name )...
0bb0: 3a 20 6d 74 78 5f 28 20 3a 3a 43 72 65 61 74 65  : mtx_( ::Create
0bc0: 4d 75 74 65 78 28 20 4e 55 4c 4c 2c 20 54 52 55  Mutex( NULL, TRU
0bd0: 45 2c 20 6e 61 6d 65 20 29 20 29 20 7b 7d 0d 0a  E, name ) ) {}..
0be0: 0d 0a 69 6e 6c 69 6e 65 20 4d 75 74 65 78 3a 3a  ..inline Mutex::
0bf0: 7e 4d 75 74 65 78 28 29 0d 0a 09 7b 20 69 66 28  ~Mutex()...{ if(
0c00: 20 6d 74 78 5f 20 21 3d 20 4e 55 4c 4c 20 29 20   mtx_ != NULL ) 
0c10: 3a 3a 52 65 6c 65 61 73 65 4d 75 74 65 78 28 20  ::ReleaseMutex( 
0c20: 6d 74 78 5f 20 29 2c 20 3a 3a 43 6c 6f 73 65 48  mtx_ ), ::CloseH
0c30: 61 6e 64 6c 65 28 20 6d 74 78 5f 20 29 3b 20 7d  andle( mtx_ ); }
0c40: 0d 0a 0d 0a 0d 0a 0d 0a 2f 2f 3d 3d 3d 3d 3d 3d  ........//======
0c50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0c60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0c70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0c80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0c90: 3d 3d 3d 0d 0a 0d 0a 7d 20 20 20 20 20 20 2f 2f  ===....}      //
0ca0: 20 6e 61 6d 65 73 70 61 63 65 20 6b 69 0d 0a 23   namespace ki..#
0cb0: 65 6e 64 69 66 20 2f 2f 20 5f 4b 49 4c 49 42 5f  endif // _KILIB_
0cc0: 57 49 4e 55 54 49 4c 5f 48 5f 0d 0a              WINUTIL_H_..