Home > ソフトウエア | 技術 > 気まぐれ Programming TIPS 【1】

気まぐれ Programming TIPS 【1】

【1】 タスクトレイ常駐アプリ(C++,Win32 API,MFC)

気まぐれに思いついた内容を、備忘録的に殴り書く。

今回はタスクトレイ常駐アプリについて。
タスクトレイ常駐アプリを作るには、
・タスクトレイにアイコンを追加する
・メインウィンドウを非表示にする
とすれば良いのではなかろうか。

●タスクトレイにアイコンを追加する
これをやるにはAPIの「Shell_NotifyIcon」関数を使う。
Shell_NotifyIcon関数は、タスクバーのステータスエリアにメッセージを送る関数らしい。

BOOL
Shell_NotifyIcon(
DWORD dwMessage,
PNOTIFYICONDATA lpdata
);

第一引数がメッセージの種類、第二引数がもろもろの情報をまとめたNOTIFYICONDATA構造体。
で、関数が成功したらTRUE,失敗したらFALSEを返す。

ちなみにShell_NotifyIconを使うにはshellapi.hをインクルード、shell32.libをリンクする。

メッセージの種類は以下の通り。
NIM_ADD - アイコンの追加
NIM_MODIFY - アイコンの変更
NIM_DELETE - アイコンの削除
NIM_SETFOCUS - タスクトレイにフォーカスをセット
NIM_SETVERSION - バージョン設定

NOTIFYICONDATA構造体のメンバは以下の通り。
cbSize - 構造体のサイズをバイト単位で指定する
hWnd - アイコンの通知メッセージを受け取るウィンドウのハンドル
uID - アイコンのアプリケーショ定義のID
uFlags - 構造体のどのメンバを有効にするかのフラグ
(
NIF_MESSAGE:uCallbackMessage
NIF_ICON:hIcon
NIF_TIP:szTip
NIF_STATE:dwState, dwStateMask
NIF_INFO:szInfo, uTimeout,szInfoTitle,dwInfoFlags
NIF_GUID:使用しない
)
uCallbackMessage - アプリケーション定義のメッセージコード、タスクトレイアイコンにイベントが起こったと時にhWndで指定したウィンドウに送られる
hIcon - 表示アイコンのハンドル
szTip - ツールチップに表示される文字列
dwState - アイコンの状態
(
NIS_HIDDEN:アイコンは非表示
NIS_SHAREDICON:アイコンは共有
)
dwStateMask - dwStateメンバでどの状態を設定、取得するのかの指定
szInfo - バルーンツールチップに表示される文字列
uTimeout - バルーンツールチップの表示タイムアウト時間(10000 ~ 30000 msec)
uVersion - バージョン指定
(
0:Windows 95
NOTIFYICON_VERSION:Windows 2000
)
szTitleInfo - バルーンツールチップのタイトルとして表示される文字列
dwInfoFlags - バルーンツールチップに表示されるアイコンに設定
(
NIIF_NONE:アイコン無し
NIIF_INFO:情報アイコン
NIIF_WARNING:警告アイコン
NIIF_ERROR:エラーアイコン
NIIF_ICON_MASK:使用しない
NIIF_NOSOUND:音を鳴らさないようにする
)
guidItem - 使用しない

実際のコード


NOTIFYICONDATA nid;

nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = GetSafeHwnd();
nid.uID = 0;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.uCallbackMessage = MSG_TASKTRAY;
nid.hIcon = AfxGetApp()->LoadIcon(IDI_ICON);
strcpy(nid.szTip,"tool tip");

Shell_NotifyIcon(NIM_ADD, &m_nid);

最低限上記で、表示できる。
で、メインウィンドウを非表示にすれば、タスクトレイ常駐アプリの完成。

ついでに、バルーンツールチップの表示の仕方。


NOTIFYICONDATA nid;

nid.cbSize = sizeof(NOTIFYICONDATA);
nid.uFlags = NIF_INFO;
nid.hWnd = GetSafeHwnd();
strcpy(nid.szTip,"balloon title");
strcpy(nid.szInfo,"balloon info");
nid.dwInfoFlags = NIIF_INFO;
nid.uTimeout = 20;

Shell_NotifyIcon(NIM_MODIFY, &nid);

Home > ソフトウエア | 技術 > 気まぐれ Programming TIPS 【1】

Search
Feeds
Authorized
奨学金支援制度
Meta

Return to page top