- ベストアンサー
Becky!送信時に任意のメッセージを表示
- 社内で使用している秀丸メールでは、誤送信防止のメッセージを表示しています。しかし、Becky!を使用している2台のPCには同様のメッセージを表示するプラグインが見つかりません。送信ボタンが押された際に任意のメッセージを表示できるプラグインを探しています。
- Becky!を使用している2台のPCで、送信ボタンが押された際に任意のメッセージを表示するプラグインを探しています。元々の機能では宛先確認のメッセージを表示できるようですが、任意のメッセージを表示できるプラグインを探しています。
- Becky!の送信時に任意のメッセージを表示するプラグインを探しています。秀丸マクロとは異なり、エディタでコーディングする必要がありますか?開発環境が必要でしょうか?開発環境についても教えていただけると助かります。
- みんなの回答 (10)
- 専門家の回答
質問者が選んだベストアンサー
>設定画面とはiniファイルの内容を入力するような画面ってことでしょうか。 そういう事です >GetPrivateProfileString("message", "msg", "メッセージ無し", buf, sizeof(buf), "c:\msg.ini"); あんまり薦められない方法です プラグインSDKのどこかに書かれていたと思いますが 基本的にDLLと同じフォルダに同名のiniファイル もしくはプラグインがあるフォルダの同名フォルダの中のiniファイル としておいた方が データの移行時にも問題がありません c:\msg.ini のように全く関係ないところに置くとコピー忘れなど トラブルの元になります (場合によってはなんだこれ と思われて消されるかもしれない) じゃあ同じところのファイルから読むのはどうすれば良いって話なら 先に書いたように標準プラグイン(BkPGP)のソース参考にしてください > MessageBoxの引数としてretを指定 ← これでエラー そりゃそうでしょうね パラメータが間違ってます retってのは GetPrivateProfileString 関数の戻り値 実際読み込まれるデータは buf に入ります 極論とすれば該当データが無いときはデフォルト値がセットされる関数なので 戻り値チェックする必要もありません GetPrivateProfileInt なら 戻り値見ないといけません したがって希望してることをやりたいなら MessageBox(NULL, buf, "title", MB_OKCANCEL | MB_ICONEXCLAMATION) が正解 ※ 別に確認してるわけじゃなくて文書見てるだけなので間違ってる可能性もあり iniファイルの構造を理解しているなら自分で直接ファイル作ればいいだけなので 必要ありませんが理解してなくて実際の値が読めているかなどを確認したかったら WritePrivateProfileString 関数を使ってデータを書き込み(ファイルを作り) 作成される中身を確認したうえでメモ帳などで編集してください >変数の中身を表示できる ちゃんとデバックできるように設定すれば変数の中も見れますよ 方法は DLL デバッグ VC 等のワードで検索する (この場合VCから Becky起動することになるので事前に起動させておくと動きません) デバック環境作らないで確認するならそういった出力を都度行うように ソースを作成してください(各所でデバック用の表示の処理を行う) 当初の目的はすでに果たしているようですしあとは応用・拡張の話なので 以後はあまり細かいこと聞かれて反応しない可能性があります (初めからここまで対応する気が無かった)
その他の回答 (9)
- koi1234
- ベストアンサー率53% (1866/3459)
>メッセージ内容をiniファイルから読み込むとなると結構面倒 それ自体は大したことありません(あなたが書いてる関数1行で終わる) 設定画面付けたいとか真面目に対処しようとするとそれなりに面倒になります ただしその程度であれば標準の BkPGP の設定画面で同じようなことやってますので そのソース見れば参考にできるでしょう >どこに追記すればよいか 設定画面の有無・繁栄タイミング・読み書きの回数削減 さまざまな面でメリット・デメリットがありますのでそういったことを考慮して あなたの好きなところでやってくださいという事になります
補足
設定画面とはiniファイルの内容を入力するような 画面ってことでしょうか。 メッセージの内容を書き換えること自体、それほど無いと 思われるので、とりあえず今回はiniファイルに直接入力 してもらおうと思ってます。 ・・で、ネットで調べて色々やっているのですがうまうくいかない 状況です。 char buf[256]; DWORD ret; ret = GetPrivateProfileString("message", "msg", "メッセージ無し", buf, sizeof(buf), "c:\msg.ini"); if (nMode == 0) { if (MessageBox(NULL, ret, "title", MB_OKCANCEL | MB_ICONEXCLAMATION) != IDOK) return -1; } DWORDというデータ型でretという変数を定義。 で、iniファイルの[message]セクションのmsgキーの値をretに代入。 MessageBoxの引数としてretを指定 ← これでエラー そもそもiniファイルからmsgキーの値が読み込まれているか すらも分からず。。 "変数 messagebox vc++"でググってみましたが 有効な情報がなく。。 VBAなら & ret & とかやれば変数の中身を表示できる のですが、こっちはよく分かりません
- koi1234
- ベストアンサー率53% (1866/3459)
間が空いているため半ば忘れかけていますし内容の読み直しも行っていません >削除してもよいかとは思ったのですが ダメです そういう余計なことやるとそれ以外の所(DEFファイルとか)も編集が必要になります あなたのVCの環境がわかりませんが(どこかに書いてあったっけ?) SDKを環境に合わせてコンパイルリンクできる形に持っていくのに多少手間取ります それもあるので私が作ったVS2010での実際のファイルを公開してもかまわない と書いたわけです(ベースソースなので中身はあなたが作ることになります) それをあなたは別の意味にとったようですが VC2010でプロジェクトを開いてコンパイルすれば DLLが出来上がるところまではできる という一式の プロジェクトファイル含めたソース >パスに保存しているけど、windows.hは? システムヘッダなのでVCインストールすれば入ってます エラーになるなら設定が悪いだけ >DllMainについてはトレースできてません。。 デバッグ(基本的に設定)のやり方が悪いだけ
お礼
失礼しました。 MessageBoxでNullを指定すると"エラー"と 表示されるものなんですね。
補足
早速のご回答ありがとうございます。 不要と思われる箇所を削除した上でビルドしたら ボロボロでした。。なので、何も削除せず、必要な箇所だけ 修正したところ、ちゃんとdllファイルが作成でき 送信時にメッセージを表示することができました。 修正というよりは、先日教えていただいたものをコピぺし BKC_OnPlugInInfoの部分を少し修正しただけです。 で、メッセージは表示されるようになったのですが、 そのメッセージ(ポップアップ)の左上の箇所が"エラー"と 表示されてしまいます。 どのようなことが考えられますでしょうか。 度々すみません。。 あ、あと、メッセージ内容をiniファイルから読み込むとなると 結構面倒でしょうか。 調べたところGetPrivateProfileStringを使って読み込む ことになるかと思うのですが、どこに追記すればよいか さえも分からず。。
- koi1234
- ベストアンサー率53% (1866/3459)
>ソースとはコンパイルされる前の状態(要するにプログラム言語で そういう事です >中身を覗いて修正するようなことは出来ない・・・ってこと できないわけではありませんが一般的には禁止されています ソースの編集とかではなくてバイナリファイル(実行モジュール)の 直接的な改変に当たります(逆アセンブルとか言った話になります)] 今回の場合でいえばそういったプラグインがあって 更にメッセージの変更が標準で不可だった場合 既成の表示メッセージより短い文であれば改変することは可能な場合もありますが (これは比較的簡単だと思われる) 長文の場合は難しいといったこともあります そしてすべて自己責任内の個人使用にとどめるべきです またそういった作業はVC(VS)上で行うような話ではありません (不可能とは言わないがそういった目的のツール(環境)ではないという事です) >そこでリコンパイルして中身 リコンパイル(再コンパイル=ビルド)ってのはソースがあって初めてできる話です
お礼
koi1234さま やっと手が空いたので着手しようと思ったのですが。。 早速分からないので、ご教示頂けると幸いです。 Template.cppを開くと、いくつかのコールバック関数が コメントアウトされた状態であります。 今回必要なBKC_OnOutgoingの箇所と、BKC_OnPlugInInfo の箇所以外は不要かと思うので、削除してもよいかとは 思ったのですが、それ以外に"#ifdef"や 頭の方に記述されている#includeや"BOOL APIENTRY DllMain" はそのまま残す必要があるのでしょうか。 C++を一から勉強すればよいのでしょうが、もしお約束的な 記述であるなら、そのままでいいのかなと。 自分なりに調べてみた内容は以下の通りです。 #includeは別のファイルを埋め込むことができ、当該テンプレート では、windows.h、BeckyAPI.h、BkCommon.hを 埋め込んでいる。BeckyAPI.h、BkCommon.hは所定の パスに保存しているけど、windows.hは? DllMainについてはトレースできてません。。 宜しくお願い致します。
補足
プラグインの中身をどうにか見れないものかと思い 昨日バイナリエディタで開いてみましたが、仰る通り 長文だと難しそうですし、改変したものを実運用で使う のもちょっと怖いですね。 色々勉強になりました。 ありがとうございました。 質問はしばらく締めないでおきますね。 何か進展あったらコメントさせて頂きます。
- koi1234
- ベストアンサー率53% (1866/3459)
>例えばVector等で公開されているようなプラグイン >(DLL)をVisualStudioで開いて中身を確認することは可能なのでしょうか。 そういえばこの件も一言振れとこうかと思ってすっかり忘れ去っていました 公開されているプラグインの大半はDLL(実行モジュール)のみでソースも含めて 公開されているものは多くありません (個人的にVectorでソース付き公開されているものを見たことありません) したがって仮に希望するプラグインが公開されていても 自分でソースを修正することは無理だと思われます(肝心のソースが公開されて無い)
補足
ソースとはコンパイルされる前の状態(要するにプログラム言語で コーディングされたもの)という認識でよろしいでしょうか。 で、既にコンパイルされているDLLファイルに対して中身を 覗いて修正するようなことは出来ない・・・ってことですかね。 そこでリコンパイルして中身を覗こうなんてすると、何かしらの 違反になったりするんですかね。 んー。。考えが浅はかでした。
- koi1234
- ベストアンサー率53% (1866/3459)
>コールバックって何?? Beckyから呼ばれる関数がコールバック関数 というものだと思っていればいいです BKC_OnOutgoing 関数もコールバック関数として定義されています (自分で何か特別に使用しない限り意識する必要なし) >>後はコンパイル・リンクを実行できるようにすること >とはどういうことでしょうか。 VCでは プログラムを動かすまでに ソースファイルの作成・コンパイル・リンク という作業を行って はじめて実行モジュール(拡張子 EXEやDLL)のファイルが出来上がります 今回はBecky用のプラグインなので拡張子DLLのモジュールを作る必要があります 一連で使われるファイル群をプロジェクトファイルで定義して コンパイル・リンク (両方合わせてビルド処理)という作業を行う (難しく書いてるけど F7押せば一連の作業は行われます) コンパイル・リンクに必要なファイルは SDKの中に含まれていますので (その中に実際の標準プラグインのソースも入っています) ただしそちらは Template.cpp といったような雛形のファイル名ではありません (プロジェクトファイルはあります VCではプロジェクトファイルを開きます) 後は VCの使い方(環境+あなたの技量的)としてコンパイル・リンクを実行 ができるようにしないといけないという意味です >結局これってTemplate.defをベースにカスタマイズする 違います 編集するのは Template.cpp になります (実際私が自作してるのはそれ以外のファイルは編集していません) ※ プロジェクトファイルへの定義とかコンパイルオプションの設定は別の話 Templete.cppを開くをわかると思いますが その中に Becky から呼ばれる(コールバック)関数の雛形サンプルが書いてあります 中に BKC_OnOutgoing 関数もありますのでそこに No4に書いたような処理を書けば それで実現できるはずですよ という意味です プラグイン名とかそれ以外に修正しなければいけない場所が数か所あります (BKC_OnPlugInInfo 関数の所位だったはず) >今回のプラグインはBKC_OnSendを使うことになるのかなぁ ちょっと確認してみましたが厳密な意味ではそちらの方がいいかもしれません ただ動きとしてはどちらでもほとんど変わらないかと思います 違いとして OnOutgoing に書いた場合 メール編集Windowを開いた状態のままで送信取り消しが可能です BKC_OnSend に書いた場合 メール編集Windowは閉じて街頭メールは送信箱フォルダに格納されています 送信キャンセルはできますが再編集の必要があるときなどは 再度編集Windowを開く必要があります 運用方法によっては BKC_OnSend に書かないとダメといったこともあるかもしれません キャンセルさせたい場合 OnOutgoing では -1 を戻り値としますが BKC_OnSendの場合は BKC_ONSEND_ERROR を戻り値にしてください
補足
コンパイル・リンクのご説明ありがとうございます。 なんとなく理解できました。 >違います 編集するのは Template.cpp になります 失礼しました。cppの方でしたね。 OnOutgoingとOnSendの動作の違いについては 実際に作りながら確認してみたいと思います。 ※「メール編集Windowを開いた状態のままで送信取り消し が可能です」とのことなので、OnOutgoingの方が 良さそうですね。 ついでに教えて頂きたいのですが、昨日の補足に書かせて 頂いた通り、例えばVector等で公開されているようなプラグイン (DLL)をVisualStudioで開いて中身を確認することは可能なの でしょうか。 ファイル⇒ファイルを開く⇒デスクトップ上にあるDLLファイルを 選択すると、 ファイルパス\ファイル名.dll に対応するエディターはありません。 このファイルの種類(.dll)のアプリケーションがインストール されていることを確認してください。 と表示されてしまいます。 開こうとしたdllファイルは、「添付忘れ防止プラグイン for Becky!2」 というもので、Vectorにて公開(フリー)されてます。 ※そもそもよそ様が作成したものの中身を見ること自体NG なのでしょうが。。
- koi1234
- ベストアンサー率53% (1866/3459)
>他人が作ったプログラムをトレースしつつ勉強出来れば >と思った次第です。 Beckyのプラグインに関しては標準のプラグインのソースが標準で公開されています 説明的には全くの初心者にはわかりずらい部分があるのも確かですが 上記のようなつもりでやるのであれば不可能なことではないはずです (実際私もそういった状態に近いです ※ VSは過去にVer6を使ってた) 手順としては以下あたりが参考になります http://www.ne.jp/asahi/hishidama/home/tool/beckyplg.html BKC_OnOutgoing という関数で nMode 0の時が 送信直前にコールされるイベントとなります 多少具体的に書くと int WINAPI BKC_OnOutgoing(HWND hWnd, int nMode/* 0:SaveToOutbox, 1:SaveToDraft, 2:SaveToReminder*/) { // Return -1 if you do not want to send it yet. if (nMode == 0) { if (MessageBox(NULL, "任意のメッセージ", NULL, MB_OKCANCEL) != IDOK ) return -1; } return 0; } とすることで希望されてる要求は満たされるかと思います 後はコンパイル・リンクを実行できるようにすることと 応用としてメッセージを設定ファイルから読むぐらいでしょうか 作成したDLL(プラグイン)は BeckyインストールフォルダのPluginフォルダ もしくはデータフォルダ内のPluginフォルダ どちらかに入れておけば動きます 実際作成したソースを公開してもかまわないといえば構わないのですが テンプレートとほとんど差が無いので公開はしません それでもあえてどうしてもと要望があれば数日限定で公開してもかまいませんが サポートなどは一切するつもりはありませんし万一不具合が発生しても責任は持ちません それでもかまわないのであれば考えますので補足してください ※ いずれにしてもメールなどでの直接やり取りは行いません
お礼
BKC_OnOutgoing は作成中のメールがセーブされる時に 呼び出される関数で、nModeが0で「送信箱にセーブ」 だと思いますが、「送信箱にセーブ」=「送信直前にコールされる イベント」ってことなのでしょうか? ヘルプのコールバック・イベント一覧を見たところ、今回の プラグインはBKC_OnSendを使うことになるのかなぁと 思ってたのですが。。
補足
度々のご回答ありがとうございます! ご紹介頂いたサイトですが、わたしもこのサイトに 行きつきVisualStudioやBecky! Plug-In SDKを ダウンロードし、とりあえず環境だけは整えた次第です。 書かれている通りにcppファイルやdefファイルを 所定のパスに保存しましたが。。 結局これってTemplate.defをベースにカスタマイズする ってことなのでしょうか。Template.cppとは?? ・・・って感じで、Becky! Plug-In SDKを解凍して出来た それぞれのファイルの意味すら理解できてない状況です。。 あと、ヘルプを見てみましたがコールバックって何??って 感じです。 >実際作成したソースを公開してもかまわないといえば構わないのですが とてもありがたいお言葉なのですが、プラグインはわたしではなく 社内の他のPCで使用するので、やはりわたし自身が理解した上で 使いたいところです。 ちなみに >後はコンパイル・リンクを実行できるようにすることと とはどういうことでしょうか。 すみません、プログラムを作成する上で基本的なことだと 思うのですが、秀丸もAccessVBAもそういうことを意識 しなくてよいもので、いまいちわかってません。
- koi1234
- ベストアンサー率53% (1866/3459)
>VS上で中身見れてカスタマイズなんて出来るのかなぁ え~っと あなたはプログラミングできる人? その程度であればカスタマイズ云々より自分で作ったほうが早いかと 私もプラグインとかには慣れてませんが字便用にプラグイン作成することはできましたよ (情報はWEBで検索 開発環境としてはVS2010) イベントとしては送信箱におく直前にコールされるイベントがあります
補足
koi1234さま ご回答ありがとうございます。 >え~っと あなたはプログラミングできる人? 秀丸メールのマクロやAccessVBAであれば作成 出来る程度です。なので、作成したものをコンパイル したり・・・ってことはやったことがありません。 仰る通り自分で作った方が早いかと思うのですが 他人が作ったプログラムをトレースしつつ勉強出来れば と思った次第です。 それに、カスタマイズとは言っても今回はメッセージ内容の 文言を変える程度の修正です。 なので、単純に送信ボタンが押されたときに確認メッセージ が表示されるようなプラグインがあれば、その文言を ちょっと修正するだけでいいのかなと。
- narashingo
- ベストアンサー率74% (10168/13677)
A.No1です。 早とちりをしてしまったようですm(__)m Pluginを当たって見ましたが、禁句などの設定で警告をだすもの(Kinku Checker for Becky!2 Ver.0.00 Rev.4)はありましたが、これは警告文を「任意の文字列に変更」できる設定はないようです。 (Becky! Ver.2 プラグイン&関連ツール) http://www.b8p.net/b2pin/plugins.html メッセージフィルタリングでも対処できないですし、調べた限りでは、希望の処理ができる方法は見つかりませんでした・・。
補足
narashingoさま 調べて頂きありがとうございます。 ご紹介頂いたプラグインはチラッと見てはいたのですが ちょっとこれは違うかなと。。 とりあえずVisual Studio2015 Expressをダウンロードして みました。 で、適当なプラグインを落として、VS上で中身見れてカスタマイズ なんて出来るのかなぁって思ったのですが、開くことすらできず。 未だVSの使い方すら分からないですし、そもそもC言語すら 分かっていない状況です(見ればなんとかなるかな程度)。 というよりは諦めかけてる状況です(笑
- narashingo
- ベストアンサー率74% (10168/13677)
ver2.0で、常時、宛先確認の画面を表示するように設定する項目がありますが、これではいけないですか? 良ければ、チェックを入れて[OK]ボタンクリックで送信できるようにもできます。 (Becky!でメール誤送信を極力防ぐ方法) http://hanamiche.hatenablog.jp/entry/2012/04/11/112602
補足
narashingo様 ご回答ありがとうございます。 質問にも書かせて頂いた通り、 >元々の機能で宛先確認のメッセージを表示できるようですが、任意の >メッセージを表示出来るものを探しております。 です。
補足
>初めからここまで対応する気が無かった ありがとうございました。 大変勉強になりました。 また別のことで分からないことが出てきてしまったので 別途質問したいと思います。 今までお付き合い頂きありがとうございました。