INASOFT 管理人のひとことフリーソフトダウンロードサイト「INASOFT」の管理人 矢吹拓也 が日々の「ひとこと」を語るページです。 2021年1月1日より、旧ブログ(blog.inasoft.org)からお引越ししました。 ・INASOFT Webサイト: https://www.inasoft.org/ ・管理人のふたこと(長文記事/寄稿文): https://www.inasoft.org/talk/ 2022年7月下旬より再び本業多忙化してきているため、更新頻度は落ちます。 [2022/7/24 19:32] Tweet ■マウスのお供の連携ソフト作成方法2014年12月21日(日) 0:00:00 [さくらのブログから転記] |
RSS配信中 | |
そういえば、マウスのお供には、他ソフトと連携し、他ソフトから渡された文字列を表示する機能があります。 今のところ、NumLockLockとウィキペディア・タイマがそれに対応していますが、逆に言うとそれだけなんですね。 具体的な方法を公開していなかったので、そりゃそうですね。 連携方法はヘルプに載せていたつもりになっていましたが、実際にはどこにも載っていませんでした。 ヘルプには、今月中予定の正式版公開時に載せるとして、とりあえず、ここにサンプルを載せておこうかと思います。 #include <windows.h> #include <stdio.h> // ========================== // 「マウスのお供」連係機能 // ========================== #define CDWM_UNICODETEXT_ID 102414 // WM_COPYDATAを用いて、マウスのお供へメッセージを送信する int sendtk(HWND hWnd, const wchar_t *str) { HWND hWndTK = FindWindow(L"mousenootomo", NULL); if ( hWndTK ) { // 連携ソフト検出 COPYDATASTRUCT MyCDS; MyCDS.dwData = CDWM_UNICODETEXT_ID; MyCDS.lpData = (void *)str; MyCDS.cbData = (lstrlen(str)+1)*sizeof(wchar_t); SendMessage(hWndTK, WM_COPYDATA, (WPARAM)hWnd, (LPARAM)&MyCDS); puts("マウスのお供へメッセージを送信しました。"); return 1; } else { puts("マウスのお供が見つかりません。"); return 0; } } int wmain() { // 自分のウィンドウハンドルを渡さなければならないので // 送信元としてコンソールウィンドウのハンドルを取得しておく。 // (マウスのお供側で、送信元ウィンドウハンドルに対する生存確認を // しているため、すぐになくなるハンドルやNULLを渡すことはできない) wchar_t strConsoleWindowTitle[1024]; HWND hWndConsole; // (エラー処理は省略) GetConsoleTitle(strConsoleWindowTitle, sizeof(strConsoleWindowTitle)); hWndConsole = FindWindow(NULL, strConsoleWindowTitle); // コマンドライン文字列(プログラム名+引数)をマウスのお供へ送信する return sendtk(hWndConsole, GetCommandLine()); } 102414という固定のID番号を伴って、マウスのお供のウィンドウハンドルに対してWM_COPYDATAでデータを送ります。 この際、マウスのお供では送り元のウィンドウハンドルが生存しているかを見ているので、適当にすぐに消えてしまうウィンドウのハンドルであるとか、NULLを渡すことを許していません。 そのため、ここではコンソールウィンドウのウィンドウハンドルを取得して、利用しています。 このサンプルプログラムを実行するときは、コンソールウィンドウがすぐに閉じてしまわないよう、注意して下さい。 目次の表示: ブログではないので、コメント機能とトラックバック機能は提供していません。ご質問・ご意見等はメール、フィードバックまたはTwitter等からお願いします。いただいたご質問・ご意見などは、この「管理人のひとこと」の記事に追加、あるいは新規の記事にする形で一部または全文をそのまま、あるいは加工させていただいた上で、ご紹介させていただく場合があります。 当サイトでは掲載内容による不具合等に関する責任を持ちません。また、内容の正確性についての保証もありませんので、情報をご利用の際は、利用者の自己責任で確認をお願いします。 |
- 最近の更新 - |
|
3212838 (+0187)[+0348] Copyright© 2010-2024 INASOFT |