メールをクリップボードにコピーしたときNo.04181
さん 18/11/05 09:14
 
 こんにちは、お世話になります。

 「編集」メニューの「コピー」やCtrl+C等でメールをコピーできると思いますが、
エクスプローラ等で貼り付けを実行したときに、ドラッグ&ドロップと同等の動作と
していただくようなことは可能でしょうか。
 もし可能でしたら検討していただけると助かります。

 以上、よろしくお願いいたします。

[ ]
RE:04181 メールをクリップボードにコピーNo.04182
秀まるお2 さん 18/11/05 09:34
 
 ドラッグドロップの時は、ドラッグ開始時点で選択してるメールをTempMailフォル
ダにエクスポートして、そのエクスポートしたファイルをOLEオブジェクトとしてWin
dowsに渡すような処理をしています。「コピー」コマンドの時にも一応同じようにす
れば出来るといえば出来ますけども。そうすると、コピーコマンドを実行する度に
メールをエクスポートしないといけないです。

 ドラッグドロップの時は、実は選択してるメール数が99通以下であればOLEオブ
ジェクト方式にしています。

 「コピー」コマンドの時にも選択してるメール数が例えば1通だけならOLEオブジ
ェクト方式にするって作戦が考えられますけども、そういうのでどうでしょうか。1
通だけなら気になるほど遅くはならないと思うのですけども。

[ ]
RE:04182 メールをクリップボードにコピーNo.04187
さん 18/11/05 11:35
 
 こんにちは、お世話になります。

> 「コピー」コマンドの時にも選択してるメール数が例えば1通だけならOLEオブジ
>ェクト方式にするって作戦が考えられますけども、そういうのでどうでしょうか。
>1通だけなら気になるほど遅くはならないと思うのですけども。

 多分それで大丈夫だと思います。
 よろしくお願いいたします。

 それでは。

 追伸:ここで聞くようなことではないかもしれないんですが、このフォーラムのタ
イトルの文字数制限ってどのくらいなんでしょうか。時々題名が途中で途切れている
のがあるもので。

[ ]
RE:04187 メールをクリップボードにコピーNo.04190
秀まるお2 さん 18/11/05 14:07
 
 テストしてみたんですが、そんな極端に待たされる訳でも無さそうなので、とりあ
えず、ドラッグドロップの時と同じく99通までOKにしてみます。

 ドラッグドロップ時も含めて、ステータスバーに「他のアプリへ貼り付け可能」と
か「100通以上なので他のアプリへの貼り付け不可」とかも表示するようにもしてみ
ます。

 (そもそも的に100通以上だとダメとかってユーザーさんには分からないことだっ
たので)

 ステータスバーは音声化されないので陸さんには不便かもしれませんが。

[ ]
RE:04190 メールをクリップボードにコピーNo.04192
さん 18/11/05 14:16
 
 こんにちは、お世話になります。

> テストしてみたんですが、そんな極端に待たされる訳でも無さそうなので、とり
>あえず、ドラッグドロップの時と同じく99通までOKにしてみます。
>
> ドラッグドロップ時も含めて、ステータスバーに「他のアプリへ貼り付け可能」
>とか「100通以上なので他のアプリへの貼り付け不可」とかも表示するようにもして
>みます。

 了解しました。
 ありがとうございます。

> ステータスバーは音声化されないので陸さんには不便かもしれませんが。

 一応こちらの音声化ソフトでは、ステータスバーを読ませるコマンドがあるので、
一応それで読み上げ可能ではあるんですが、秀丸メールのステータスバーは通常のス
テータスバーと違うようで、うまく読まれないことが時々あります。
 秀丸エディタではステータスバーの右クリックメニューから「ファンクション表示
と合体」のチェックを解除すれば、通常のステータスバーとして認識され、読み上げ
が可能なんですが、今見てみたところ、秀丸メールのステータスバーはダイアログ部
品という扱いのようで、通常のステータスバーとはまた別もののようです。
 ここが読めればメールを何通受信とかもわかって、結構便利なんですけどね。
 現在は公開停止になってますが、Windows10を1809にしたら、なぜかこちらの環境
でトースト通知が届かないっていう現象が起きてるので、どうにかそれでしのいでま
す。
 ちょっとウィンドウ内の部品判定にはあまり詳しくないので、もしかしたら少し見
当違いのことを書いてたらすみません。

 それでは。


[ ]
RE:04192 メールをクリップボードにコピーNo.04193
秀まるお2 さん 18/11/05 14:36
 
 秀丸メールのステータスバーは、たしかに自前のウィンドウというか、普通のstat
ic controlって部品に無理矢理枠線を付けて出してました。

 秀丸エディタは、ソースコードを見たら、CreateStatusWindowってAPIで生成する、
Windows標準のステータスバーコントロールを使ってるようでした。

 秀丸メールも同じようにステータスバーコントロールを使うように直してみます。

[ ]
RE:04193 メールをクリップボードにコピーNo.04194
さん 18/11/05 15:08
 
 こんにちは、お世話になります。

> 秀丸メールも同じようにステータスバーコントロールを使うように直してみます。

 ありがとうございます。
 よろしくお願いします。

 あとここに書くことではないかもしれないんですが、メールリスト部分の読み上げ
対応って難しいんでしょうか。
 多分リストアイテムの「INVISIBLE」指定か「「OFFSCREEN」指定を解除すればうま
くいくような気がしてるんですが、いかがでしょうか。
 もしかして、前にどこかに書いていて、だめだったということであれば申し訳ない
んですが。

 それでは。

[ ]
RE:04194 メールをクリップボードにコピーNo.04204
秀まるお2 さん 18/11/06 09:14
 
>  あとここに書くことではないかもしれないんですが、メールリスト部分の読み上
>げ対応って難しいんでしょうか。

 メールリスト部分というのはどこのことなのでしょうか。

 フォルダ枠、メール一覧枠、メール内容枠、とあるうちのメール一覧枠の中のこと
でしたら、一応音声化バージョンにてちゃんと音声化させてるはずではありますが、
そこは秀丸メールの場合リストボックスになってまして、いわゆるリストビュー的な
音声化はされず、リストボックス的にしか音声化されないですけども。

 秀丸メールのVersion 2.xx以下の時代はメール一覧にリストビューコントロールや
ツリービューコントロールを使っていたんですが、動作速度が非常に遅いとかいろい
ろユーザーさんからの要望に対応するのに無理があって、全部自前で描画させる必要
性もあって、リストボックスに見せかけた独自ウィンドウで実現しています。

 そことは別の場所なのやら?

[ ]
RE:04204 メールをクリップボードにコピーNo.04205
さん 18/11/06 09:25
 
 こんにちは、お世話になります。

> フォルダ枠、メール一覧枠、メール内容枠、とあるうちのメール一覧枠の中のこ
>とでしたら、一応音声化バージョンにてちゃんと音声化させてるはずではあります
>が、そこは秀丸メールの場合リストボックスになってまして、いわゆるリストビ
>ュー的な音声化はされず、リストボックス的にしか音声化されないですけども。

 すみません、メール一覧枠のことでした。
 一応レジストリのspeechの値を2に書き換えたら読み上げはするようですが、矢印
キーを押したときの読み上げができないようです。
 スクリーンリーダーの開発元にも個人的に問合せしてみたりしたんですが、原因が
わからないようで、マクロでなんとか読み上げさせているのが現状です。
 とりあえず、メール一覧枠の部品情報を見ると、「ROLE_LIST」っていうのが指定
されているので、リストボックスとしては認識されているようです。
 こちらでもうちょっと調べれたらいいんですが、あいにくGUI部品関連のことはそ
こまで詳しくないもので。

 それでは。

[ ]
RE:04205 メールをクリップボードにコピーNo.04207
秀まるお2 さん 18/11/06 10:24
 
 ソースコードを見直したら、NVDA対応モードの場合はあえてリストボックスじゃな
いようにしてるようです。

 理由は、遅いからってことのようです。フォルダ切り替え時に待たされるってこと
のようです。

    https://log.maruo.co.jp/hidesoft/hidesoft_8/x03258.html

 当時テストして、リストボックスを使う以上回避不能だったってことで、そういう
ことにしたようです。

[ ]
RE:04207 メールをクリップボードにコピーNo.04208
さん 18/11/06 10:42
 
 こんにちは、お世話になります。

> ソースコードを見直したら、NVDA対応モードの場合はあえてリストボックスじゃ
>ないようにしてるようです。
>
> 理由は、遅いからってことのようです。フォルダ切り替え時に待たされるってこ
>とのようです。

 そういえばそうでした。
 自分で提案したのに、すっかり抜けていました。
 本当に申し訳ないです。

 とりあえず、こちらでもう1度再現するかどうかテストしてみたんですが、今のと
ころは以前のように動作が遅くなるという現象は起きないようでした。
 何が原因だったのかよくわからないんですが、リストボックスでも大丈夫だと思い
ます。

 それでは。

[ ]
RE:04208 メールをクリップボードにコピーNo.04210
秀まるお2 さん 18/11/06 13:42
 
 リストボックスで大丈夫であれば、そもそも的に新しく追加したNVDA用モードは必
要なくなったってことかもしれません。

 インストール時にPC-Talkerを選択してインストールするといいのかなぁと思います。

 PC-Talkerを選択すれば、秀丸メールのメール一覧は普通のリストボックスに見え
るはずなのでで、カーソル移動キーでちゃんと音声化もされるんじゃないかと思いま
す。

[ ]
RE:04210 メールをクリップボードにコピーNo.04211
さん 18/11/06 13:49
 
 こんにちは、お世話になります。

> PC-Talkerを選択すれば、秀丸メールのメール一覧は普通のリストボックスに見え
>るはずなのでで、カーソル移動キーでちゃんと音声化もされるんじゃないかと思い
>ます。

 PC-Talkerモードでインストールして試していますが、やはりカーソルキーで移動
したときは読み上げできないようです。
 ちなみに、Tabキー等でフォーカス移動して、メール一覧枠にフォーカスしたとき
は現在選択しているメールの件名等を読み上げるようではあります。
 いろいろ調べてみると、リスト項目に「STATE_INVISIBLE」っていうのが指定して
あって、これによってリスト内のコントロールが取得できていないんじゃないかとい
う気がしています。
 でも、独自描画ということであれば、この指定をオフにするのは、難しいんでしょ
うか。

 それでは。

[ ]
RE:04211 メールをクリップボードにコピーNo.04212
秀まるお2 さん 18/11/06 14:10
 
 STATE_INVISIBLEという用語はWindowsのAPIリファレンスの中には存在しないので
すけども、ウィンドウの表示/非表示の状態のことなのやら?

 ウィンドウの表示/非表示は、WindowsのAPI(Win32 API)では、

    ShowWindow( ウィンドウハンドル, SW_SHOW );

 とすると表示になって、

    ShowWindow( ウィンドウハンドル, SW_HIDE );

 とすると非表示になります。

 ウィンドウスタイル上は、「WS_VISIBLE」っていうフラグが存在してる形になって
ます。

 秀丸メールのメール一覧は高速化のために、複数のリストボックスを同じ位置に重
ねて配置しつつ、1つだけ「SW_SHOW」として、他は「SW_HIDE」と指定してます。な
ので最低1つは常にVISIBLEなウィンドウが存在してて、Tabキーを押してフォーカス
移動した場合も、そのVISIBLEなウィンドウにフォーカスが乗るようになってます。

 秀丸メールのメール一覧枠は実はさらにややこしくて、リストボックスの中にリス
トボックスがある、みたいなややこしいウィンドウ構造になってて、それの関係でう
まく音声化されないのかもしれません。他の音声化ソフトでは大丈夫なのですけども。

 画面上ではたしかにリストボックスが見えてる訳なので、NVDAさんに「ちゃんと見
えてるのにSTATE_INVISIBLE扱いになってるのはバグじゃないですか?」みたいに言
うのはダメなんですかね。(フリーソフトだから文句言えない?)

[ ]
RE:04212 メールをクリップボードにコピーNo.04213
さん 18/11/06 14:53
 
 お世話になります。

> 秀丸メールのメール一覧は高速化のために、複数のリストボックスを同じ位置に
>重ねて配置しつつ、1つだけ「SW_SHOW」として、他は「SW_HIDE」と指定してます。
>なので最低1つは常にVISIBLEなウィンドウが存在してて、Tabキーを押してフォー
>カス移動した場合も、そのVISIBLEなウィンドウにフォーカスが乗るようになってま
>す。
>
> 秀丸メールのメール一覧枠は実はさらにややこしくて、リストボックスの中にリ
>ストボックスがある、みたいなややこしいウィンドウ構造になってて、それの関係
>でうまく音声化されないのかもしれません。他の音声化ソフトでは大丈夫なのです
>けども。

 確かに画面にウィンドウコントロールID0と10のリストボックスがあるのは確認で
きました。
 さらに、Tabキーでフォーカス移動したときにウィンドウコントロールID0のほうの
リストボックスにフォーカスが移ってて、その中のアイテムを読み上げてるというの
も確認できました。

> 画面上ではたしかにリストボックスが見えてる訳なので、NVDAさんに「ちゃんと
>見えてるのにSTATE_INVISIBLE扱いになってるのはバグじゃないですか?」みたいに
>言うのはダメなんですかね。(フリーソフトだから文句言えない?)

 フォーカスしたリスト内のアイテムを調べようとしても何もないって扱いになって
るので、リストボックスは認識しているけども、リスト内のアイテムが認識されてな
いってことなんだと思います。
 とりあえず、リストアイテムに0x400って値と0x400000っていう値が指定されてい
ることは確認できたんですが。
 やはりスクリーンリーダー側で修正してもらうしかないんでしょうか。

 それでは。


[ ]
RE:04213 メールをクリップボードにコピーNo.04214
秀まるお2 さん 18/11/06 15:49
 
>  とりあえず、リストアイテムに0x400って値と0x400000っていう値が指定されて
>いることは確認できたんですが。
>  やはりスクリーンリーダー側で修正してもらうしかないんでしょうか。

 リストボックスの中にアイテムがあるかどうかは、WindowsのAPI的には、ウィンド
ウにLB_GETCOUNTメッセージを送ると分かりまして、たとえば項目が100個あれば100
って値が返るはずです。秀丸メールはちゃんとそういう正しい動作をしてるはずだと
思います。

 他には、リストボックスの中でのフォーカス位置は、LB_GETCARETINDEXまたはLB_G
ETCURSELメッセージで取得可能とか、中身のテキストデータはLB_GETTEXTメッセージ
で取得できるとか、一応その辺は大丈夫なはずに作っています。

 0x400とかなんとかって言われてもそれが何のことだか分からないのでなんともお
返事のしようがないです。もしかしてLB_GETITEMDATAで取得する値のことを言ってる
のであれば、その値は秀丸メールが内部的に持ってる値のことでして、音声化ソフト
がその値を見る必要は無いはずです。

 (っと、プログラミングの専門的な話を書いてしまいましたが)

[ ]
RE:04214 メールをクリップボードにコピーNo.04215
さん 18/11/06 19:02
 
 お世話になります。

> リストボックスの中にアイテムがあるかどうかは、WindowsのAPI的には、ウィン
>ドウにLB_GETCOUNTメッセージを送ると分かりまして、たとえば項目が100個あれば1
>00って値が返るはずです。秀丸メールはちゃんとそういう正しい動作をしてるはず
>だと思います。
>
> 他には、リストボックスの中でのフォーカス位置は、LB_GETCARETINDEXまたはLB_
>GETCURSELメッセージで取得可能とか、中身のテキストデータはLB_GETTEXTメッセー
>ジで取得できるとか、一応その辺は大丈夫なはずに作っています。

 ほんとですね。
 とりあえず、NVDA専用のスクリプトを作れるので、そのスクリプトでリストボック
スの読み上げをなんとか実装することができました。
 WindowsAPIにはそこまで詳しくないのとなぜかNVDAの標準機能ではLB_GETTEXTとか
を送れないっぽくて、ヘッダファイルとかを見ながらやったので、少し大変でしたが。
 しばらくこれで動かしてみたいと思います。

 大変お世話になりました。

 ありがとうございました。

 それでは。


[ ]