なごみコネクト バージョン | 1.14 |
---|---|
ドキュメント バージョン | 2013.11.18 |
なごみコネクト 作者 | 衣日和 |
アプリケーション | サンプル ほたる v.1.02 |
ドキュメント バージョン(記載アプリ) | 2013.10.19 |
アプリ作者 | 衣日和 |
アプリ製作元 / 連絡先 |
HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes, BOOL bInitialOwner, LPCTSTR lpName); ミューテックスオブジェクトを製作します。 ミューテックスには所有状態と非所有状態があり、同時に所有状態になれるのは1プロセスのみです。 | ||
lpMutexAttributes | セキュリティ | 0 (NULL) |
bInitialOwner | 所有権要求 | 0 (FALSE) |
lpName | オブジェクト名 | 任意文字列 (なごコネ既定の識別名称) |
戻り値 | 0 (失敗) n (オブジェクトハンドル) |
HANDLE CreateFileMapping(HANDLE hFile, LPSECURITY_ATTRIBUTES lpAttributes, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCTSTR lpName); ファイルマッピングオブジェクトを製作します。 オブジェクト名に同一文字列を指定することでプロセス間でメモリ領域を共有します。 | ||
hFile | ファイルのハンドル | -1 (INVALID_HANDLE_VALUE) |
lpAttributes | セキュリティ | 0 (NULL) |
flProtect | 保護属性 | 0x00000004 (PAGE_READWRITE) |
dwMaximumSizeHigh | サイズ(上位) | 0 |
dwMaximumSizeLow | サイズ(下位) | n [byte](なごコネから取得) |
lpName | オブジェクト名 | 任意文字列 (なごコネ既定の識別名称) |
戻り値 | 0 (失敗) n (オブジェクトハンドル) |
BOOL CloseHandle(HANDLE hObject); オブジェクト(CreateMutex,CreateFileMappingで製作)を破棄します。 ミューテックスオブジェクトの所有権を持っている場合、あらかじめ ReleaseMutex をします。 ファイルマッピングオブジェクトをマッピングしている場合、あらかじめ UnmapViewOfFile をします。 | ||
hObject | オブジェクトのハンドル | n |
戻り値 | 0 (失敗) n (完了) |
DWORD WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds); ミューテックスオブジェクトの所有権を取得します。 すでに所有者がいた場合はタイムアウト時間まで待ちます。 | ||
hHandle | オブジェクトのハンドル | n |
dwMilliseconds | タイムアウト時間 | 0 [ms](時間待ちをしない) 0xFFFFFFFF (INFINITE) |
戻り値 |
0x00000000 (WAIT_OBJECT_0) 所有権を取得した 0x00000080 (WAIT_ABANDONED) 先の所有者が所有権を放棄したため、所有権を取得した 0x00000102 (WAIT_TIMEOUT) タイムアウト時間が経過した(所有権を得られなかった) 0xFFFFFFFF (WAIT_FAILED) エラーが発生した |
BOOL ReleaseMutex(HANDLE hMutex); ミューテックスオブジェクトの所有権を放棄します。 |
LPVOID MapViewOfFile(HANDLE hFileMappingObject, DWORD dwDesiredAccess, DWORD dwFileOffsetHigh, DWORD dwFileOffsetLow, SIZE_T dwNumberOfBytesToMap); ファイルマッピングオブジェクトをマッピングします。 ファイルマッピングオブジェクトはマッピングすることでメモリ空間へのアクセスが可能になります。 | ||
hFileMappingObject | オブジェクトのハンドル | n |
dwDesiredAccess | アクセスモード | 0x00000002 (FILE_MAP_WRITE) |
dwFileOffsetHigh | オフセット(上位) | 0 |
dwFileOffsetLow | オフセット(下位) | 0 |
dwNumberOfBytesToMap | 対象のバイト数 | 0 (オブジェクト全域が対象) |
戻り値 | 0 (失敗) n (開始アドレス) |
BOOL UnmapViewOfFile(LPCVOID lpBaseAddress); ファイルマッピングオブジェクトのマッピングを解除します。 |
DWORD GetTickCount(VOID); Windows起動からの経過時間(ms)を取得します。 |
コード | +0x0 | +0x1 | +0x2 | +0x3 | +0x4 | +0x5 | +0x6 | +0x7 | +0x8 | +0x9 | +0xa | +0xb | +0xc | +0xd | +0xe | +0xf |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x20 | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / | |
0x30 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? |
0x40 | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
0x50 | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ |
0x60 | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
0x70 | p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ |
終端コード(NULL) | 0x00 |
タブ(桁揃えインデント) | 0x09 |
改行 | 0x0d , 0x0a (連続で) |
日本語(2bytes文字)の1byte目 | 0x81〜0x9F , 0xE0〜0xFC |
N | a | g | o | m | i | C | o | n | n | e | c | t | 和 | 結 | ||||
0x4E | 0x61 | 0x67 | 0x6F | 0x6D | 0x69 | 0x43 | 0x6F | 0x6E | 0x6E | 0x65 | 0x63 | 0x74 | 0x20 | 0x98 | 0x61 | 0x8C | 0x8B | 0x00 |
メモリ域 | 0x4E | 0x61 | 0x67 | 0x6F | 0x6D | 0x69 | 0x00 | 0x00 |
---|---|---|---|---|---|---|---|---|
ビッグエンディアン | 0x4E61676F | 0x6D690000 | ||||||
リトルエンディアン | 0x6F67614E | 0x0000696D | ||||||
文字列 | Nagomi(NULL)(NULL) |
文字列 | 文字コード | 値(リトルエンディアン) |
---|---|---|
"IT" | "I"=0x49 , "T"=0x54 | 0x00005449 |
"TEST" | "T"=0x54 , "E"=0x45 , "S"=0x53 , "T"=0x54 | 0x54534554 |
"略仮" | "略"=0x97AA , "仮"=0x89BC | 0xBC89AA97 |
LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); BOOL PostMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam); | ||
hWnd | 送信先のウィンドウハンドル | n (なごコネから取得) |
Msg | 送信するメッセージコード | n (なごコネから取得) |
wParam | 送信側のアイテム番号とレタータイプ | 0xFFFF0000 アイテム番号 0x0000FFFF レタータイプ |
lParam | パラメータ | n (任意) |
戻り値 | SendMessage時:受信側が返した値 PostMessage時:0(NG) or 0以外(OK) |
#define NgmLe_Inquire1st 0x0000 //アプリ自由レスポ(対話型相手確認など) #define NgmLe_InquireLast 0x0005 // ↑全6種 #define NgmLe_Greeting 0x0006 //ごあいさつ #define NgmLe_UpdateFD 0x0007 //エクステ更新報告(コマンドライン送信など) #define NgmLe_PleaseFD 0x0008 //エクステ更新要求(データ要求) #define NgmLe_MyPost 0x000F //自身への送信目的で用いる #define NgmLe_User1st 0x0010 //ユーザー自由定義 #define NgmLe_UserLast 0xFFFF
Index | フィールド(サイズ4bytes) | 値 |
---|---|---|
0 | コネクトシグネチャ | 0x8B8C6198 = "和結" (固定) |
1 | 更新時間 ⇒このコネクトを更新した時のWindows起動からの経過時間 |
n [ms](GetTickCountの戻り値) |
2 | マップ番号(予約) | 0 (固定) |
3 | 最大アイテム数 ⇒同時に参加していたアイテムの最大数 ※このフィールドはカウントアップのみ |
n [個] |
4〜1003 | アイテム識別子 ⇒参加アイテムの識別子一覧 |
0xnnnnnnnn = "????" (アイテム識別子) 0x00000000 = "" (空き) |
Index | 値 | 備考 |
---|---|---|
0 | 0x8B8C6198 = "和結" | |
1 | 3600000 | Windows起動から1時間 |
2 | 0 | |
3 | 6 | |
4 | 0x4C504D53 = "SMPL" | アイテム番号 1 のアイテム |
5 | 0x54534554 = "TEST" | |
6 | 0 = "" | 参加したアイテムが離脱した跡(次に参加するアイテムはここに入ることが望ましい) |
7 | 0x45474F48 = "HOGE" | アプリの多重起動や偶然同じ識別子を使用したなど |
8 | 0x45474F48 = "HOGE" | |
9 | 0 = "" | 最大アイテム数はここを示してる(つまり離脱跡) |
: | 0 = "" | |
1003 | 0 = "" | アイテム番号 1000 のアイテム |
Index | フィールド(サイズ4bytes) | 値 |
---|---|---|
0 | アペンドシグネチャ | 0xnnnnnnnn = "????" (アイテム識別子) |
1 | 更新時間 ⇒このアペンドを更新した時のWindows起動からの経過時間 |
n [ms](GetTickCountの戻り値) |
2 | レター受信用ウィンドウのハンドル | 0 (レター受信をしない) n (ウィンドウハンドル) |
3 | レター受信用ウィンドウメッセージの番号 | 0 (レター受信をしない) n (メッセージコード) |
4 | エクステサイズ | 0 (現在エクステは無い) n [byte](現在のエクステのサイズ) |
5 | エクステタイプ ⇒現在のエクステに格納しているデータの種類 ※エクステ自体が一時的なものなのでこのフィールドの利用は任意 |
0 (特に無ければ) n (アイテム定義の定数) |
6〜37 (128bytes) |
アプリ名 ⇒アプリ名を示すNULLで終わる文字列(改行禁止) |
"" (未定でも良い) "?" (任意文字列) |
38〜41 (16bytes) |
バージョン ⇒アプリバージョンを示すNULLで終わる文字列(改行禁止) ※複数参加や多重起動する場合に個々を識別するために使用しても良い |
"" (未定でも良い) "?" (任意文字列) |
42〜105 (512bytes) |
ショートメッセージ ⇒アプリからのメッセージをNULLで終わる文字列(改行OK)で指定 |
"" (未定でも良い) "?" (任意文字列) |
0〜 1023 (0x0000〜0x03FF) | Windowsが指定/予約しています。 この範囲の指定は避けるべきです。 |
1024〜32767 (0x0400〜0x7FFF) WM_USER〜 | 既存のコントロールでも利用する範囲です。 これらのコントロールに誤って送信した場合誤動作を起こす可能性があります。 |
32768〜49151 (0x8000〜0xBFFF) WM_APP〜 | この範囲なら既存のコントロールの定義と衝突することもないでしょう。 |
49152〜65535 (0xC000〜0xFFFF) | 文字列メッセージの範囲です。 この範囲を使用するには所定の手続き(RegisterWindowMessageなど)を取ってください。 |
65536〜 (0x10000〜) | 予約されています。 なごみコネクトで使用できる範囲を超えています。 |
名前(文字列) | 例:アイテム番号 7 の場合 | 例:アイテム番号 15 の場合 | |
---|---|---|---|
コネクト | NagomiConnect | ||
ミューテ | NagomiConnectMutex_X | NagomiConnectMutex_7 | NagomiConnectMutex_15 |
アペンド | NagomiConnectAppend_X | NagomiConnectAppend_7 | NagomiConnectAppend_15 |
エクステ | NagomiConnectExtend_X | NagomiConnectExtend_7 | NagomiConnectExtend_15 |
送信側アイテム | 受信側アイテム |
---|---|
アペンド(NagomiConnectAppend_R)を参照し送信先を取得 | |
ウィンドウメッセージを発行(SendMessage)
|
メッセージ割り込み発生 |
レタータイプ,パラメータから戻り値を算出 | |
復帰 | 戻り値を設定して処理完了 |
戻り値を確認 |
送信側アイテム | 受信側アイテム |
---|---|
アペンド(NagomiConnectAppend_R)を参照し送信先を取得 | |
ウィンドウメッセージを発行(PostMessage)
|
|
復帰 | |
メッセージ割り込み発生 | |
必要なら処理する | |
戻り値を設定して処理完了 |
送信側アプリ(未参加の場合) | 送信側アイテム | 受信側アイテム |
---|---|---|
ミューテ(NagomiConnectMutex_0)の所有権を取得 ※以降アイテム番号は 0 を使用する ※所有権が取得できない場合は CloseHandle して処理を終了する |
エクステ(NagomiConnectExtend_S)が存在する場合は破棄 ※マッピングオブジェクトのメモリサイズ変更は不具合になる |
|
エクステ(NagomiConnectExtend_S)を製作しデータを書き込む | ||
アペンド(NagomiConnectAppend_0)を製作し値を書き込む
|
アペンド(NagomiConnectAppend_S)を編集
| |
アペンド(NagomiConnectAppend_R)参照し送信先を取得 | ||
ウィンドウメッセージを発行(SendMessage)
|
メッセージ割り込み発生 | |
アペンド(NagomiConnectAppend_S)を参照しエクステサイズを取得 | ||
エクステ(NagomiConnectExtend_S)を参照しデータを取得 | ||
復帰 | 戻り値を設定して処理完了 | |
エクステ(NagomiConnectExtend_S)を破棄 | ||
アペンド(NagomiConnectAppend_0)を破棄 | アペンド(NagomiConnectAppend_S)を編集
| |
ミューテ(NagomiConnectMutex_0)を破棄 |
送信側アイテム | 受信側アイテム |
---|---|
アペンド(NagomiConnectAppend_R)参照し送信先を取得 | |
ウィンドウメッセージを発行(SendMessage)
|
メッセージ割り込み発生 |
エクステ(NagomiConnectExtend_R)が存在する場合は破棄 | |
エクステ(NagomiConnectExtend_R)を製作しデータを書き込む | |
アペンド(NagomiConnectAppend_R)を編集
| |
復帰 | 戻り値を設定して処理完了 |
アペンド(NagomiConnectAppend_R)を参照しエクステサイズを取得 | |
エクステ(NagomiConnectExtend_R)を参照しデータを取得 | |
以下の操作は任意 | |
レター送信(NgmLe_Greeting)でエクステ取得完了を通知 | |
復帰 | |
メッセージ割り込み発生 | |
エクステ(NagomiConnectExtend_R)を破棄 | |
アペンド(NagomiConnectAppend_R)を編集
| |
戻り値を設定して処理完了 |
アイテム識別子 | 0x53525448 = "HTRB" (変動有) |
---|---|
レター受信 | 有り |
受信用メッセージコード | 0x0400 (変動有) |
追加定義 |
#define NgmLe_Hotaru_Bmscr 16 #define NgmLe_Hotaru_Talk 17 #define NgmLe_Hotaru_Debug 18 |
レタータイプ | パラメータ | 返値 |
---|---|---|
NgmLe_Inquire1st | n (自由) | 0x48 = "H" |
NgmLe_Inquire1st + 1 | n (自由) | 0x4F = "O" |
NgmLe_Inquire1st + 2 | n (自由) | 0x54 = "T" |
NgmLe_Inquire1st + 3 | n (自由) | 0x41 = "A" |
NgmLe_Inquire1st + 4 | n (自由) | 0x52 = "R" |
NgmLe_InquireLast | n (自由) | 0x55 = "U" |
NgmLe_Greeting | n (規定) | 1 |
NgmLe_UpdateFD | 1 (テキストデータ) 2 (バイナリデータ) | 1 |
NgmLe_PleaseFD | 1 (テキストデータ) 2 (バイナリデータ) | 1 |
NgmLe_Hotaru_Bmscr | n (Index) | n (該当値) |
NgmLe_Hotaru_Talk | n (自由) | 1 |
NgmLe_Hotaru_Debug | 専用モジュールを用いた特殊機能用 |