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_getReg、WinX_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|