winx.h

C:\home\SVGCats_src\src\winx.h

[目次 | 型・クラス・構造体 | マクロ]

目次

型・クラス・構造体一覧

マクロ一覧


   1|/**************************************************************************
   2|   1. <<< Windows API (WinX) >>> 
   3|***************************************************************************/
   4|
   5|#ifndef __WINX_H
   6|#define __WINX_H
   7|
   8|#include <ddeml.h>
   9|
  10|
  11|#ifndef USES_PRIORITY_HEADER
  12|/*[START_OF_PRIORITY_HEADER]*/
  13|
  14|#ifndef  USES_WINX
  15|#define  USES_WINX
  16|
  17|typedef  struct _WinX_RegData  WinX_RegData;
  18|typedef  struct _WinX_RegData  WinX_RegData;
  19|
  20|typedef  struct _WinX_DdeAct  WinX_DdeAct;
  21|typedef  struct _WinX_FType   WinX_FType;
  22|typedef  struct _WinX_Autorun WinX_Autorun;
  23|
  24|typedef  struct _WinX_Inst      WinX_Inst;
  25|typedef  struct _WinX_InstType  WinX_InstType;
  26|typedef  struct _WinX_InstCmd   WinX_InstCmd;
  27|typedef  struct _WinX_Uninst    WinX_Uninst;
  28|typedef  enum   _WinX_DefType   WinX_DefType;
  29|
  30|typedef  struct _WinX_DDBmp  WinX_DDBmp;
  31|
  32|typedef  struct _WinX_DdeServ   WinX_DdeServ;
  33|
  34|#endif
  35|
  36|#define  STDLIBS_INCLUDE_STDLIB_H
  37|
  38|/*[END_OF_PRIORITY_HEADER]*/
  39|#endif /* USES_PRIORITY_HEADER */
  40|
  41|
  42|#define  WinX_Err_API_Error  991
  43|#define  WinX_Err_NoRegKey   992
  44|#define  WinX_Err_NotMatchActionName  993
  45|#define  WinX_Err_NoRegData  994
  46|#define  WinX_Err_DifferentType  995
  47|#define  WinX_Err_TooLongPath    996
  48|#define  WinX_Err_CannotAddNest  997
  49|#define  WinX_Err_AccessDenied   998
  50|#define  WinX_Err_FileNotFound   999
  51|#define  WinX_Err_DdeError       989
  52|
  53|
  54| 
  55|/*------------------------------------------------------------------------*/
  56|/* 2. <<< Interface Area ----------------------------------------------- >>> */ 
  57|/*------------------------------------------------------------------------*/
  58|
  59|#ifdef __cplusplus
  60|extern "C" {
  61|#endif
  62|
  63| 
  64|/**************************************************************************
  65|  3. <<< サブルーチン >>> 
  66|***************************************************************************/
  67|typedef  const unsigned char*  WinX_DataPtr;  // レジストリの値の型
  68|
  69|void   WinX_error(void);
  70|#ifdef _WINDOWS_
  71| void   WinX_error2( LONG code );
  72|#endif
  73|
  74|void  WinX_throw( int errcode );
  75|void  WinX_throwDde( unsigned long dde );
  76|
  77|/* 内部用 */
  78|void  WinX_throw_imp( int errcode, char* file, int line );
  79|void  WinX_throwDde_imp( unsigned long dde, char* file, int line );
  80| 
  81|/**************************************************************************
  82|  4. <<< レジストリ関係 >>> 
  83|***************************************************************************/
  84|
  85|#ifdef _WINREG_
  86|  void  WinX_getReg( HKEY baseKey, const char* subKeyPath, bool bDef, WinX_RegData* data );
  87|  void  WinX_setReg( HKEY baseKey, const char* subKeyPath, bool bDef, WinX_RegData* data );
  88|  void  WinX_delReg( HKEY baseKey, const char* subKeyPath, bool bKey );
  89|  void  WinX_delRegIfNoSub( HKEY baseKey, const char* path );
  90|  bool  WinX_isExistReg( HKEY baseKey, const char* path, bool bKey, bool bKeyOrData );
  91|
  92|  char*  WinX_getReg_s( HKEY baseKey, const char* subKeyPath,
  93|    const char* name, char* var, int var_size );
  94|  char*  WinX_getReg_x( HKEY baseKey, const char* subKeyPath,
  95|    const char* name, void* var, int var_size );
  96|
  97|  void  WinX_copyRegNest( HKEY dstKey, const char* dstPath,
  98|    HKEY srcKey, const char* srcPath );
  99|  void  WinX_delRegNest( HKEY baseKey, const char* path );
 100|#endif
 101|
 102| 
 103|/**************************************************************************
 104|  5. <<< (WinX_RegData) レジストリ・データ >>> 
 105|【補足】
 106|・WinX_RegData_init でデータ領域を設定してから使うことができます。
 107|・WinX_getRegWinX_setReg などで使われます。
 108|・レジストリのデータの型は次のとおりです。(MSDNヘルプより抜粋)
 109|  値                意味
 110| *REG_BINARY        任意の形式のバイナリデータです。
 111| *REG_DWORD         32 ビット値です。
 112|  REG_DWORD_LITTLE_ENDIAN  リトルエンディアン形式の 32 ビット値です。REG_DWORD と同じです。Windows NT と Windows 95 が動作するコンピュータにおいて、もっとも一般的な形式です。
 113|  REG_DWORD_BIG_ENDIAN     ビッグエンディアン形式の 32 ビット値です。
 114|  REG_EXPAND_SZ     展開前の環境変数への参照 (たとえば“%PATH%”) が入った NULL で終わる文字列です。Unicode 関数と ANSI 関数のどちらを使用しているかにより、Unicode 文字列または ANSI 文字列になります。
 115|  REG_LINK          Unicode のシンボリックリンクです。
 116|  REG_MULTI_SZ      NULL で終わる文字列の配列です。連続する 2 つの NULL 文字で、終端を示します。
 117|  REG_NONE          定義されていない種類です。
 118|  REG_RESOURCE_LIST デバイスドライバのリソースリストです。
 119| *REG_SZ            NULL で終わる文字列です。Unicode 関数と ANSI 関数のどちらを使用しているかにより、Unicode 文字列または ANSI 文字列になります。
 120|***************************************************************************/
 121|#ifdef _WINREG_
 122|  WinX_RegData_init( WinX_RegData*, void* data, int data_size );
 123|
 124|  struct _WinX_RegData {
 125|    DWORD  type;     /* データ型(→補足) */
 126|    char*  data;     /* データの格納領域の先頭アドレス */
 127|    DWORD  size;     /* 格納されているデータのサイズ(byte) */
 128|    DWORD  maxSize;  /* データの格納領域のサイズ(byte) */
 129|  };
 130|#endif
 131| 
 132|/**************************************************************************
 133|  6. <<< [WinX_RegNest] サブ・レジストリを含めてレジストリデータを列挙する >>> 
 134|【補足】
 135|・親は、データは無くキーのみです。データは、キーの集まりの後に集まっています。
 136|・1つのキーのサブキーは、逆順で格納されます。
 137|***************************************************************************/
 138|#define  WinX_nestM  50
 139|#define  WinX_absPathSize  255
 140|#define  WinX_RegNest_bufM  8192
 141|#define  WinX_RegNest_nameSize  250
 142|
 143|typedef  struct _WinX_RegNest  WinX_RegNest;
 144|
 145|void  WinX_RegNest_init( WinX_RegNest*, HKEY baseKey, const char* absPath,
 146|  bool bFinishedDir );
 147|void  WinX_RegNest_finish( WinX_RegNest* );
 148|bool  WinX_RegNest_next( WinX_RegNest* );
 149|
 150|char*  WinX_RegNest_getName( WinX_RegNest* );
 151|char*  WinX_RegNest_getStepPath( WinX_RegNest* );
 152|char*  WinX_RegNest_getAbsPath( WinX_RegNest* );
 153|int    WinX_RegNest_getNumer( WinX_RegNest* );
 154|int    WinX_RegNest_getDenomi( WinX_RegNest* );
 155|bool   WinX_RegNest_getIsKey( WinX_RegNest* );
 156|
 157|void  WinX_RegNest_getData( WinX_RegNest*, WinX_RegData* data );
 158|int   WinX_RegNest_getDataCount( WinX_RegNest* );
 159|int   WinX_RegNest_getNotExpandSubKeyCount( WinX_RegNest* );
 160|
 161|
 162|struct _WinX_RegNest {
 163|  char** fname; /* キー名かデータ名のポインタ配列, WinX_RegNest_bufM * WinX_RegNest_nameSize */
 164|  char*  fname_memArea;
 165|
 166|  bool  bFinishedDir;  /* 探索が済んだディレクトリも列挙するかどうか */
 167|
 168|  int*  I;  /* 最後の配列要素はデータへのポインタ、*/
 169|            /* その1つ前の配列要素は、次のサブキー */
 170|            /* それ以外の配列要素は、*/
 171|            /* 列挙し終わった各段の最後のサブキーへのポインタ */
 172|  int   nest;  /* ネスト・レベル、0 が基底 */
 173|
 174|  bool  bKey;  /* 最後の配列要素はキーかどうか(キーでないならデータ)*/
 175|
 176|  HKEY  baseKey; /* 基底キー */
 177|  char  absPath[WinX_absPathSize+1]; /* 基底ディレクトリ・パス */
 178|  char  workPath[WinX_absPathSize+1]; /* 出力用 */
 179|};
 180| 
 181|/**************************************************************************
 182|  7. <<< パス関係 >>> 
 183|***************************************************************************/
 184|char*  WinX_getWSHPath(void);
 185|char*  WinX_getWindowsPath(void);
 186|char*  WinX_getSystemPath(void);
 187|char*  WinX_getDesktopPath(void);
 188|char*  WinX_getProgramPath(void);
 189|char*  WinX_getSendToPath(void);
 190|char*  WinX_getMyDocPath(void);
 191|char*  WinX_getStartupPath(void);
 192|char*  WinX_getAllStartupPath(void);
 193|char*  WinX_getTempPath(void);
 194|void   WinX_getShortCutTarget( const char* shortCut_path, char* target_path );
 195|void  WinX_createShortcut( const char* path, const char* targetPath,
 196|  const char* param, const char* workPath, int showFlags,
 197|  const char* iconPath, int iIcon, const char* description );
 198|bool  WinX_openFolderSelDlg( HWND parent, const char* title, char* path );
 199| 
 200|/**************************************************************************
 201|  8. <<< ウィンドウ関係 >>> 
 202|***************************************************************************/
 203|void  WinX_getWndRectN( HWND hWnd, RECT* rect );
 204|void  WinX_setIme( HWND hWnd, bool bOn );
 205|bool  WinX_getIme( HWND hWnd );
 206|int   WinX_getNumOfWnd(void);
 207|int   WinX_getAllAppHWnd( HWND* hs, int hs_size, const char* exe_fname );
 208|bool  WinX_getExeFNameOfWnd( HWND wnd, char* exe_fname );
 209|
 210| 
 211|/**************************************************************************
 212|  9. <<< ディスプレイ関係 >>> 
 213|【補足】
 214|・画面の大きさは、GetSystemMetrics の SM_CXSCREEN, SM_CYSCREEN で取得できます。
 215|  最大化したときの大きさは、SM_CXFULLSCREEN, SM_CYFULLSCREEN で取得できます。
 216|***************************************************************************/
 217|int    WinX_getDisplayBpp(void);
 218|void   WinX_setDisplayBppReturnValue( int bpp );
 219|
 220| 
 221|/**************************************************************************
 222|  10. <<< プログラム実行関係 >>> 
 223|***************************************************************************/
 224|int   WinX_call( const char* cmdline );
 225|void  WinX_openHtml( const char* url, bool bNewWnd );
 226|void  WinX_openIE( const char* url );
 227|void  WinX_openByNotepad( const char* path );
 228|void  WinX_openFile( const char* path );
 229|void  WinX_openFile2( const char* path, const char* action );
 230|void  WinX_openFolder( const char* path );
 231|void  WinX_openFolder2( const char* path, bool bTree, bool bRoot, const char* selPath );
 232|void  WinX_openExplorer( const char* path );
 233|void  WinX_sendMsgToExe( const char* exe_path, UINT message, WPARAM wParam, LPARAM lParam );
 234|void  WinX_postMsgToExe( const char* exe_path, UINT message, WPARAM wParam, LPARAM lParam );
 235|bool  WinX_isRunning( const char* exe_path );
 236|
 237| 
 238|/**************************************************************************
 239|  11. <<< エクスプローラメニュー関係 >>> 
 240|***************************************************************************/
 241|
 242|#ifdef  USES_BIGSTACK
 243|  void  WinX_setExtApp( const char* ext, const char* explain,
 244|    const char* actionName, const char* actionTitle, const char* command,
 245|    const char* iconPath, int iconNum, bool bDefault, bool bDownChk );
 246|  void  WinX_setFolderApp( const char* actionName, const char* actionTitle,
 247|    const char* command, bool bDefault );
 248|  void  WinX_unsetExtApp( const char* ext, const char* actionName );
 249|  void  WinX_unsetFolderApp( const char* actionName );
 250|  void  WinX_setNewFile( const char* ext, const char* newPath );
 251|  void  WinX_unsetNewFile( const char* ext );
 252|  bool  WinX_isNeedSecurity( const char* ext );
 253|  char*  WinX_getShellNewPath(void);
 254|#endif  /* USES_BIGSTACK */
 255|
 256|void  WinX_setIcon( const char* ext, const char* path, int iIcon );
 257|void  WinX_getIcon( const char* ext, char* path, int* iIcon );
 258|int   WinX_getFTypeInfos( const char* ext, WinX_FType* types, int types_size,
 259|  bool bAll, WinX_FType** defType );
 260|
 261|void  WinX_flush(void);
 262| 
 263|/**************************************************************************
 264|  12. <<< インストール関係 >>> 
 265|***************************************************************************/
 266|#ifdef  USES_BIGSTACK
 267|
 268|bool  WinX_uninstallFolder( const char* folderPath, const char* appName,
 269|  const char* folderName );
 270|void  WinX_setAppUninstall( const char* appName,
 271|  const char* title, const char* command );
 272|void  WinX_unsetAppUninstall( const char* appName );
 273|bool  WinX_isSetAppUninstall( const char* appName );
 274|
 275|#endif  /* USES_BIGSTACK */
 276|
 277|
 278|void  WinX_throwToTrash( HWND hWnd, const char* path );
 279|
 280|
 281|
 282|/**************************************************************************
 283|  13. <<< [WinX_Inst] インストール関係 >>>
 284|***************************************************************************/
 285|#ifdef  USES_BIGSTACK
 286|
 287|void  WinX_Inst_install( WinX_Inst*, const char* exePath, bool* enables, bool bSplitByVer );
 288|void  WinX_Inst_uninstall( WinX_Inst*, const char* exePath, bool* enables );
 289|/*void  WinX_Inst_getVersion( char* appName, char* ver, int ver_size );*/
 290|
 291|
 292|struct _WinX_Inst {
 293|  char*  appName;
 294|  char*  ver;
 295|
 296|  WinX_InstType*  types;
 297|  WinX_Uninst*  uninst;  /* NULL=アンインストーラなし */
 298|};
 299|
 300|struct _WinX_InstType {
 301|  char*  ext;        /* 拡張子、最後の配列要素には "NULL" を設定する, "*" "folder" 可 */
 302|  char*  explain;    /* タイプの説明 */
 303|  bool   bDownChk;   /* ダウンロード時にチェックするかどうか */
 304|  char*  iconPath;   /* アイコンファイル、またはアイコンのある実行ファイルのパス、NULL=標準exeパス */
 305|  int    iIcon;      /* 設定しない=-1 */
 306|  WinX_InstCmd*  cmds;
 307|};
 308|
 309|struct _WinX_InstCmd {
 310|  char*  name;      /* コマンド名、最後の配列要素には "NULL" を設定する */
 311|  char*  caption;   /* 右クリックメニューの表示内容 */
 312|  char*  exePath;   /* NULL=標準exeパス、標準exeからの相対パス */
 313|  char*  command;   /* コマンドライン、実行ファイルは指定しない */
 314|  WinX_DefType  defType;
 315|};
 316|
 317|struct _WinX_Uninst {
 318|  char*  uninstName;
 319|  char*  uninstCaption;
 320|  char*  uninstCmd;
 321|  char*  uninstFolderPath;  /* アンインストーラからの相対パス */
 322|};
 323|
 324|enum _WinX_DefType {
 325|  WinX_NotDef, WinX_Def, WinX_SubDef,
 326|};
 327|
 328|#endif  /* USES_BIGSTACK */
 329| 
 330|/**************************************************************************
 331|  14. <<< Windows 用高速ビットマップ描画(DDB = デバイス依存ビットマップ) >>> 
 332|***************************************************************************/
 333|struct _WinX_DDBmp {
 334|  char  path[_MAX_PATH];
 335|  int   width, height;
 336|  int   size;
 337|  HBITMAP  bmp;
 338|  HGDIOBJ  oldBmp;
 339|  HDC  bmpDC;
 340|};
 341|
 342|void  WinX_DDBmp_init( WinX_DDBmp* m, const char* path );
 343|void  WinX_DDBmp_finish( WinX_DDBmp* m );
 344|HDC   WinX_DDBmp_openForWrite( WinX_DDBmp* m, HDC windowDC, int width, int height );
 345|void  WinX_DDBmp_closeForWrite( WinX_DDBmp* m );
 346|HDC   WinX_DDBmp_openForRead( WinX_DDBmp* m, HDC windowDC );
 347|void  WinX_DDBmp_closeForRead( WinX_DDBmp* m );
 348|bool  WinX_DDBmp_readDirect( WinX_DDBmp* m, HDC windowDC, int x, int y );
 349|
 350|
 351| 
 352|/**************************************************************************
 353|  15. <<< DDE関係(関数) >>> 
 354|***************************************************************************/
 355|bool  WinX_isOpenDDE( const char* service, char* topic );
 356|void  WinX_sendDDE( const char* command, const char* service,
 357|  const char* topic, const void* data, int data_size, int sendType );
 358|int   WinX_receiveDDE( const char* command, const char* service,
 359|  const char* topic, void* data, int data_size );
 360|
 361|enum { WinX_Request, WinX_Execute };
 362|
 363|
 364|
 365| 
 366|/**************************************************************************
 367|  16. <<< [WinX_DdeServ] DDEサーバ >>> 
 368|***************************************************************************/
 369|typedef  void  (*WinX_DdeServ_onMsgF)( int type, char* data );
 370|  /* type = XTYP_POKE or XTYP_EXECUTE */
 371|
 372|void  WinX_DdeServ_init( WinX_DdeServ* m, const char* serviceName,
 373|  const char* topicName, const char* itemName, WinX_DdeServ_onMsgF onMsg );
 374|
 375|void  WinX_DdeServ_finish( WinX_DdeServ* m );
 376|
 377|
 378|struct _WinX_DdeServ {
 379|  DWORD  handle;
 380|  HSZ  serviceName;
 381|  HSZ  topicName;
 382|  HSZ  itemName;
 383|  char  advdata[2];
 384|  WinX_DdeServ_onMsgF  onMsg;
 385|};
 386|
 387|extern  WinX_DdeServ*  WinX_ddeServ;
 388|
 389|
 390| 
 391|/**************************************************************************
 392|  17. <<< [WinX_DdeAct] ファイルタイプの DDE アクション >>> 
 393|【役割】
 394|・ファイルタイプに関連付けられたアクション(DDE を使用する)のタイプです。
 395|***************************************************************************/
 396|enum { WinX_DdeAct_size = 256 };
 397|
 398|struct _WinX_DdeAct {
 399|  char  command[_MAX_PATH];         /* コマンド・パス */
 400|  char  service[WinX_DdeAct_size];  /* DDE サービス名(アプリ名)*/
 401|  char  topic[WinX_DdeAct_size];    /* DDE トピック名(プロパティ名)*/
 402|  char  data[WinX_DdeAct_size];     /* 転送データ・フォーマット */
 403|};
 404|
 405|void  WinX_DdeAct_init( WinX_DdeAct*, const char* type );
 406|bool  WinX_DdeAct_isOpen( WinX_DdeAct* );
 407|void  WinX_DdeAct_send( WinX_DdeAct*,
 408|  const char* topic, void* data, int data_size );
 409|void  WinX_DdeAct_receive( WinX_DdeAct*,
 410|  const char* topic, void* data, int data_size );
 411|
 412|
 413| 
 414|/**************************************************************************
 415|  18. <<< [WinX_FType] ファイルタイプの各アクションの情報 >>> 
 416|***************************************************************************/
 417|struct _WinX_FType {
 418|  char  name[64];
 419|  char  caption[64];
 420|  long  editFlags;  /*  0x00000001 (Secutiry) */
 421|  char  command[256];
 422|  bool  bDDE;
 423|  char  ddeMsg[64];
 424|  char  ddeApp[256];
 425|  char  ddeOpenCmd[256];
 426|  char  ddeTopic[64];
 427|};
 428| 
 429|/**************************************************************************
 430|  19. <<< [WinX_Autorun] CD-ROM 自動実行の情報 >>> 
 431|***************************************************************************/
 432|#define  WinX_Autorun_mShell  20
 433|
 434|struct _WinX_Autorun {
 435|  char  autorun_path[_MAX_PATH];
 436|  char  open[_MAX_PATH];
 437|  char  iconPath[_MAX_PATH];
 438|  int   iconNum;
 439|  int   nCommand;  /* captions と commands の配列要素数 */
 440|  char  captions[WinX_Autorun_mShell][256];
 441|  char  commands[WinX_Autorun_mShell][_MAX_PATH];   /* 第1添字は、caption と同じ */
 442|};
 443|
 444|void  WinX_Autorun_read( WinX_Autorun*, const char* path );
 445|void  WinX_Autorun_exec( WinX_Autorun*, int iCommand );
 446|char*  WinX_Autorun_getCmdPath( WinX_Autorun*, int iCommand,
 447|  char* exe_path, int exe_path_size );
 448| 
 449|#ifdef __cplusplus
 450|}
 451|#endif
 452|
 453|/*------------------------------------------------------------------------*/
 454|/* 20. <<<< Mapping Area ----------------------------------------------- >>>> */ 
 455|/*------------------------------------------------------------------------*/
 456|
 457| 
 458|/**************************************************************************
 459|  20-1. <<< [WinX_throw] 例外を投げる >>> 
 460|***************************************************************************/
 461|#define  WinX_throw( errcode )  WinX_throw_imp( errcode, __FILE__, __LINE__ )
 462| 
 463|/**************************************************************************
 464|  20-2. <<< [WinX_throwDde] DDE の 例外を投げる >>> 
 465|【引数】
 466|  ・DWORD  dde;    DdeInitialize の第1引数と同じ
 467|***************************************************************************/
 468|#define  WinX_throwDde( dde )   WinX_throwDde_imp( dde, __FILE__, __LINE__ )
 469|
 470| 
 471|/**************************************************************************
 472|  20-3. <<< [WinX_RegData_init] 初期化する >>> 
 473|***************************************************************************/
 474|#define  WinX_RegData_init( this, _data, _data_size ) \
 475|  ( (this)->type = 0, (this)->data = (_data), \
 476|    (this)->size = 0, (this)->maxSize = (_data_size) )
 477|
 478| 
 479|/**************************************************************************
 480|  20-4. <<< [WinX_RegNest_getIsKey] 現在のパスがキーかどうかを返す >>> 
 481|***************************************************************************/
 482|#define  WinX_RegNest_getIsKey( this ) \
 483|  ( (this)->bKey )
 484| 
 485|/**************************************************************************
 486|  20-5. <<< [WinX_RegNest_getDataCount] 現在のデータと残りのデータの数を返す >>> 
 487|***************************************************************************/
 488|#define  WinX_RegNest_getDataCount( this ) \
 489|  ( (this)->I[(this)->nest] - (this)->I[(this)->nest - 1] + 1 )
 490|
 491| 
 492|#endif 
 493| 
 494|