細々とした変更
- フィードの並べ替えを実装。フィード設定でドラッグ&ドロップ。
- 記事一覧に未読/既読アイコン追加
- HTTPのバッファ周りを少し変更
- 2行表示の時アイコンの下まで文字が流れるよう変更
- 記事一覧での左右キーをページスクロールに変更
- 速報みたいの実装
- ひどすぎた表示周りのコードを少し整理
速報みたいのはSendNews.exeから書き込めます。
RSSより優先してTodayに表示されます。指定時間経過、もしくは既読状態になることで削除されます。
複数の速報みたいのを保持することができます。表示順序は送信された順番です。
※00:59: 不具合があったので差し替えました
Download: SetupRssTicker1228.CAB
以下リファレンス的なもの。
速報みたいなの リファレンス
SendNewsflash.exe、Win32APIどちらを使用する場合もタイトルは必須パラメタです。指定されていない場合、メッセージは無視されます。
SendNews.exe
コマンドラインから送信する内容を決定できます。引数は以下の通り
/title
フィード名に対応します。2行表示の1行目にも使用されます
/subtitle
エントリ名に対応します。
/description
RSSの詳細に対応します。
/expire
表示可能時間です。ミリ秒で指定します。Today本体がメッセージ受信した時刻からの経過ミリ秒で計測しています。
使用例
SendNewsflash.exe /title 新着メールあり /subtitle Re: /本文... /expire 60000
それぞれに半角スペースを含むことはできません。"で囲んでもだめです。気が向いたらもう少しまともにコマンドライン解析します。
Win32API
Win32APIを使用して送信も可能です。送信する場合は次の仕様で送信してください。
// 送信に使用する構造体など // #define MAX_PATH 260 #define RSSTICKER_HWND _TEXT("RSSTICKER_HWND") #define ID_NEWSFLASH 7499 struct tagNEWSFLASHDATA { wchar_t lpTitle[64]; wchar_t lpSubTitle[64]; wchar_t lpDescription[512]; wchar_t lpExeName[MAX_PATH]; wchar_t lpParameter[MAX_PATH]; unsigned long ulExpire; };
// 送信サンプル // 前項のものが宣言されてることとします。 // ファイルマッピングオブジェクトの作成 // RSSTICKER_HWND でファイルマッピングオブジェクトを作成すると // RSS Ticker Today本体のウィンドウハンドルを取得することができます HANDLE hMapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READONLY, 0, sizeof(HWND), RSSTICKER_HWND); // GetLastError() が ERROR_ALREADY_EXISTS を返さない場合 // Todayはロードされていないので直ちにハンドルを解放しなければなりません if (GetLastError() != ERROR_ALREADY_EXISTS) { CloseHandle(hMapping); return 0; } // 次にファイルマッピングオブジェクトを実際のメモリに割り当てます。 HWND* lpHWND = (HWND*)MapViewOfFile(hMapping, FILE_MAP_READ, 0, 0, 0); HWND hWnd = *lpHWND; UnmapViewOfFile(lpHWND); CloseHandle(hMapping); // 送信するデータを構造体に用意します struct tagNEWSFLASHDATA nfd = {0}; wcsncpy(nfd.lpTitle, _TEXT("新着メールあり"), 64); wcsncpy(nfd.lpSubTitle, _TEXT("Re: <hogehoge@example.com>"), 64); wcsncpy(nfd.lpDescription, _TEXT("ここには<b>HTML</b>を記述することも可能です"), 512); nfd.ulExpire = 60000; // WM_COPYDATAで使用する構造体に先に設定した構造体をセットし // WM_COPYDATAで送信します。 COPYDATASTRUCT cds; cds.dwData = ID_NEWSFLASH; cds.cbData = sizeof(tagNEWSFLASHDATA); cds.lpData = &nfd; SendMessage(hWnd, WM_COPYDATA, NULL, (LPARAM)&cds);
現状lpExeName, lpParameterは無視されます。
こんな感じです。あとでシェル通知を流すようなのも作ってみます。