スレッド: [becky-pin:02108] Re: [becky-ml:13187] Re: 添付ファイルの切り離し

スレッド

[becky-pin:02108] Re: [becky-ml:13187] Re: 添付ファイルの切り離し

[ | ▲ / | ]
Subject:
[becky-pin:02108] Re: [becky-ml:13187] Re: 添付ファイルの切り離し
From:
Shigeru Mitsumori <mitumori@...>
Date:
Sun, 30 Sep 2001 22:48:16 +0900
X-Mailer:
Becky! ver. 2.00.07
Message-Id:
<20010930222410.E4E2.MITUMORI‐at‐be.mbn.or.jp>
In-Reply-To:
[becky-ml:13187]
References:
[becky-ml:13129] [becky-ml:13187]
三森です。

#plug-in 関係なので、こちらに移動します。

On Sat, 29 Sep 2001 23:28:15 +0900
ac3a-nkt <atsuhiro_n@...> wrote:

> すいませんが、教えてください。(ちなみに開発環境はDelphiです。)
> 下記のようなことは出来るのでしょうか?
> 出来るなら、方法を伝授して頂ければ幸いです。
>
> 1.添付ファイルがある場合に表示されるウィンドウのウィンドウハンドルの取得
> 方法(GetWindowHandles関数ではダメですよね?)

Spy++ で見ると分かりますが、view の兄弟ウインドウに ListView があります。
多分、これが添付ファイルを表示しているウインドウでしょうから、
CBeckyAPI::GetWindowHandles() で view のハンドルを取得して、その兄弟ウイ
ンドウより、ListView を探せば取得できるのではないでしょうか。

> 2.そして、そのウィンドウに表示されている添付ファイルのリストの取得方法

1. で ListView の Handle が取得できれば、後は ListView に対して、一覧取
得する操作をしてあげれば良いです。

> 3.さらに2.で取得したリストから、任意の添付ファイルを選択する方法

同上です。

> 4.最後にBecky!にDeleteキーを送りつけて、添付ファイルを削除する方法

ListView に SendMessage するか keybd_event で良いかと。
---
Shigeru Mitsumori <mitumori@...>
           http://plaza11.mbn.or.jp/~mitumori/

[becky-pin:02109] Re: [becky-ml:13187] Re: 添付ファイルの切り離し

[ | / | ]
Subject:
[becky-pin:02109] Re: [becky-ml:13187] Re: 添付ファイルの切り離し
From:
shinonon <shinonon@...>
Date:
Sun, 30 Sep 2001 23:03:45 +0900
X-Mailer:
Becky! ver. 2.00.07
Message-Id:
<20010930230009.4DA0.SHINONON‐at‐jcom.home.ne.jp>
In-Reply-To:
2108
References:
[becky-ml:13187] 2108
しののん@ちょい補足……

Shigeru Mitsumori さんの「[becky-pin:02108] Re: [becky-ml:13187] Re: 添
付ファイルの切り離し」より…

> > 1.添付ファイルがある場合に表示されるウィンドウのウィンドウハンドルの取得
> > 方法(GetWindowHandles関数ではダメですよね?)
>
> Spy++ で見ると分かりますが、view の兄弟ウインドウに ListView があります。
> 多分、これが添付ファイルを表示しているウインドウでしょうから、
> CBeckyAPI::GetWindowHandles() で view のハンドルを取得して、その兄弟ウイ
> ンドウより、ListView を探せば取得できるのではないでしょうか。

「レイアウトの変更」をして B2 を再起動すると、各ウィンドウの親子状況が変
わりますので、hwndList などを元に決め打ちしてハンドルを取得するときは注
意が必要です。

▲▽《篠田 敦》      shinonon@... ▽▲
▲▽ http://members.jcom.home.ne.jp/shinonon/ ▽▲

[becky-pin:02111] Re: [becky-ml:13187] Re: 添付ファイルの切り離し

[ | / | ]
Subject:
[becky-pin:02111] Re: [becky-ml:13187] Re: 添付ファイルの切り離し
From:
ac3a-nkt <atsuhiro_n@...>
Date:
Tue, 02 Oct 2001 00:02:05 +0900
X-Mailer:
Becky! ver. 2.00.07
Message-Id:
<20011001235502.23D1.ATSUHIRO_N‐at‐pop02.odn.ne.jp>
In-Reply-To:
2108
References:
[becky-ml:13187] 2108
三森さん、こんにちわ!早速のご返答有り難う御座います。

> > 1.添付ファイルがある場合に表示されるウィンドウのウィンドウハンドルの取得
> > 方法(GetWindowHandles関数ではダメですよね?)
>
> Spy++ で見ると分かりますが、view の兄弟ウインドウに ListView があります。
> 多分、これが添付ファイルを表示しているウインドウでしょうから、
> CBeckyAPI::GetWindowHandles() で view のハンドルを取得して、その兄弟ウイ
> ンドウより、ListView を探せば取得できるのではないでしょうか。

Delphiを使用してプラグインを作成しているのですが、なぜかGetWindowHandles関数
を使用すると、エラーでBeckyが落ちてしまいます。私のコードの実装が多分ど
こかおかしいと思いますが.....。

> > 2.そして、そのウィンドウに表示されている添付ファイルのリストの取得方法
>
> 1. で ListView の Handle が取得できれば、後は ListView に対して、一覧取
> 得する操作をしてあげれば良いです。

1.もそうですが、この辺は、EnumWindows、EnumChildWindowsを利用してウィン
ドウハンドルまで取得できました。
後は、SendMessageで、LVM_GETITEMTEXTを送りつけてListViewの添付ファイルのリスト
を取得出来ると思うのですが、コードの実装方法がよく分からず、今そこで悪戦苦闘しています。

> > 3.さらに2.で取得したリストから、任意の添付ファイルを選択する方法

この辺もLVM_GETITEMTEXTを送りつけることによって出来そうなのは分かるので
すが、コードの実装方法がよく分からず、今そこで悪戦苦闘しています。

> > 4.最後にBecky!にDeleteキーを送りつけて、添付ファイルを削除する方法
>
> ListView に SendMessage するか keybd_event で良いかと。

これも3.と同じですね?

以上、LVM_GETITEMTEXTの使用方法をご教授頂ければ幸いです。

--------------------------------------------
中田 敦浩
E-mail atsuhiro_n@...
E-mail ncad@...
URL  http://www.geocities.co.jp/SiliconValley/5668/
--------------------------------------------

[becky-pin:02112] Re: [becky-ml:13187] Re: 添付ファイルの切り離し

[ | / | ]
Subject:
[becky-pin:02112] Re: [becky-ml:13187] Re: 添付ファイルの切り離し
From:
Shigeru Mitsumori <mitumori@...>
Date:
Tue, 02 Oct 2001 01:26:44 +0900
X-Mailer:
Becky! ver. 2.00.07
Message-Id:
<20011002003601.013F.MITUMORI‐at‐be.mbn.or.jp>
In-Reply-To:
2111
References:
2108 2111
三森です。

On Tue, 02 Oct 2001 00:02:05 +0900
ac3a-nkt <atsuhiro_n@...> wrote:

> > > 1.添付ファイルがある場合に表示されるウィンドウのウィンドウハンドルの取得
> > > 方法(GetWindowHandles関数ではダメですよね?)
> >
> > Spy++ で見ると分かりますが、view の兄弟ウインドウに ListView があります。
> > 多分、これが添付ファイルを表示しているウインドウでしょうから、
> > CBeckyAPI::GetWindowHandles() で view のハンドルを取得して、その兄弟ウイ
> > ンドウより、ListView を探せば取得できるのではないでしょうか。
>
> Delphiを使用してプラグインを作成しているのですが、なぜかGetWindowHandles関数
> を使用すると、エラーでBeckyが落ちてしまいます。私のコードの実装が多分ど
> こかおかしいと思いますが.....。

Delphi は知らないんであれですが、多分、DLL 初期化時に CBeckyAPI::InitAPI()
を呼んでないのではないでしょうか?

もし、安藤さんが作られた Becky! Plug-in SDK for Delphi を使っていないの
でしたら、使ってみるのが早道の様な気がします。

> > > 2.そして、そのウィンドウに表示されている添付ファイルのリストの取得方法
> >
> > 1. で ListView の Handle が取得できれば、後は ListView に対して、一覧取
> > 得する操作をしてあげれば良いです。
>
> 1.もそうですが、この辺は、EnumWindows、EnumChildWindowsを利用してウィン
> ドウハンドルまで取得できました。
> 後は、SendMessageで、LVM_GETITEMTEXTを送りつけてListViewの添付ファイルのリスト
> を取得出来ると思うのですが、コードの実装方法がよく分からず、今そこで悪戦苦闘しています。

単純に、

int nItemNum = ::SendMessage(hlistWnd, LVM_GETITEMCOUNT, 0, 0L);
for(int ndx = 0 ; ndx < nItemNum ; ndx++){
  LVITEM lvi;
  memset(&lvi, 0, sizeof(LVITEM));
  lvi.iSubItem = 0;
  lvi.cchTextMax = nLen;
  lvi.pszText = lpszText;
  ::SendMessage(hlistWnd, LVM_GETITEMTEXT, (WPARAM)ndx,(LPARAM)&lvi);
}

で良いかと。
LVM_GETITEMTEXT を使ってと言う事でしたら、

int nItem = (int)::SendMessage(hlistWnd, LVM_GETNEXTITEM, -1,
                              MAKELPARAM(LVNI_ALL, 0));
while(-1 != nItem){
 // インデックス位置のテキスト等を取得する。
 ...

 // 次の項目のインデックスを取得する。
 nItem = (int)::SendMessage(hlistWnd, LVM_GETNEXTITEM, nItem,
                            MAKELPARAM(LVNI_ALL, 0));
}

って所でしょうか。

> > > 3.さらに2.で取得したリストから、任意の添付ファイルを選択する方法
>
> この辺もLVM_GETITEMTEXTを送りつけることによって出来そうなのは分かるので
> すが、コードの実装方法がよく分からず、今そこで悪戦苦闘しています。

これは、

LVITEM lvi;
lvi.stateMask = LVIS_SELECTED;
lvi.state     = LVIS_SELECTED;
::SendMessage(hlistWnd, LVM_SETITEMSTATE, nItem, (LPARAM)&lvi);
lvi.stateMask = LVIS_FOCUSED;
lvi.state     = LVIS_FOCUSED;
::SendMessage(hlistWnd, LVM_SETITEMSTATE, nItem, (LPARAM)&lvi);

かな...。

> > > 4.最後にBecky!にDeleteキーを送りつけて、添付ファイルを削除する方法
> >
> > ListView に SendMessage するか keybd_event で良いかと。
>
> これも3.と同じですね?

とりあえず、ドキュメントを読んでください。
---
Shigeru Mitsumori <mitumori@...>
           http://plaza11.mbn.or.jp/~mitumori/

[becky-pin:02113] Re: [becky-ml:13187] Re: 添付ファイルの切り離し

[ | / | ]
Subject:
[becky-pin:02113] Re: [becky-ml:13187] Re: 添付ファイルの切り離し
From:
中田 敦浩 <atsuhiro_n@...>
Date:
Tue, 02 Oct 2001 08:25:11 +0900
X-Mailer:
Becky! ver. 2.00.07
Message-Id:
<20011002081839.B185.ATSUHIRO_N‐at‐pop02.odn.ne.jp>
In-Reply-To:
2112
References:
2111 2112
三森さん、こんにちわ!アドバイス有り難うございます。

> Delphi は知らないんであれですが、多分、DLL 初期化時に CBeckyAPI::InitAPI()
> を呼んでないのではないでしょうか?

あ、ちゃんと初期化しています。

> もし、安藤さんが作られた Becky! Plug-in SDK for Delphi を使っていないの
> でしたら、使ってみるのが早道の様な気がします。

使用しています。私プログラミングは素人なので、Becky! Plug-in SDK for Delphi
がないと何も出来ません。(笑)

> int nItemNum = ::SendMessage(hlistWnd, LVM_GETITEMCOUNT, 0, 0L);
> for(int ndx = 0 ; ndx < nItemNum ; ndx++){
>    LVITEM lvi;
>    memset(&lvi, 0, sizeof(LVITEM));
>    lvi.iSubItem = 0;
>    lvi.cchTextMax = nLen;
>    lvi.pszText = lpszText;
>    ::SendMessage(hlistWnd, LVM_GETITEMTEXT, (WPARAM)ndx,(LPARAM)&lvi);
> }
>
> で良いかと。
> LVM_GETITEMTEXT を使ってと言う事でしたら、
>
> int nItem = (int)::SendMessage(hlistWnd, LVM_GETNEXTITEM, -1,
>                                MAKELPARAM(LVNI_ALL, 0));
> while(-1 != nItem){
>   // インデックス位置のテキスト等を取得する。
>   ...
>
>   // 次の項目のインデックスを取得する。
>   nItem = (int)::SendMessage(hlistWnd, LVM_GETNEXTITEM, nItem,
>                              MAKELPARAM(LVNI_ALL, 0));
> }
>
> って所でしょうか。
>
> > > > 3.さらに2.で取得したリストから、任意の添付ファイルを選択する方法
> >
> > この辺もLVM_GETITEMTEXTを送りつけることによって出来そうなのは分かるので
> > すが、コードの実装方法がよく分からず、今そこで悪戦苦闘しています。
>
> これは、
>
> LVITEM lvi;
> lvi.stateMask = LVIS_SELECTED;
> lvi.state     = LVIS_SELECTED;
> ::SendMessage(hlistWnd, LVM_SETITEMSTATE, nItem, (LPARAM)&lvi);
> lvi.stateMask = LVIS_FOCUSED;
> lvi.state     = LVIS_FOCUSED;
> ::SendMessage(hlistWnd, LVM_SETITEMSTATE, nItem, (LPARAM)&lvi);
>
> かな...。

うむむ、難しいですね!ちょっと理解するのに時間が掛かりそうです。

> とりあえず、ドキュメントを読んでください。

はい、読んでいるつもりです。WinAPIのヘルプとかいろいろ自分なりには読んで
いるのですが、英語なので悪戦苦闘しています。

以上、宜しくお願い致します。

------------------------------------------------
中田 敦浩
E-mail atsuhiro_n@...
E-mail ncad@...
URL  http://www.geocities.co.jp/SiliconValley/5668/
------------------------------------------------

[becky-pin:02118] Re: [becky-ml:13187] Re: 添付ファイルの切り離し

[ | / ▼ | ]
Subject:
[becky-pin:02118] Re: [becky-ml:13187] Re: 添付ファイルの切り離し
From:
Shigeru Mitsumori <mitumori@...>
Date:
Tue, 02 Oct 2001 23:28:59 +0900
X-Mailer:
Becky! ver. 2.00.07
Message-Id:
<20011002231810.93F4.MITUMORI‐at‐be.mbn.or.jp>
In-Reply-To:
2112
References:
2111 2112
三森です。

#自己フォロー

On Tue, 02 Oct 2001 01:26:44 +0900
Shigeru Mitsumori <mitumori@...> wrote:

> 単純に、
>
> int nItemNum = ::SendMessage(hlistWnd, LVM_GETITEMCOUNT, 0, 0L);
> for(int ndx = 0 ; ndx < nItemNum ; ndx++){
>    LVITEM lvi;
>    memset(&lvi, 0, sizeof(LVITEM));
>    lvi.iSubItem = 0;
>    lvi.cchTextMax = nLen;
>    lvi.pszText = lpszText;
>    ::SendMessage(hlistWnd, LVM_GETITEMTEXT, (WPARAM)ndx,(LPARAM)&lvi);
> }
>
> で良いかと。
> LVM_GETITEMTEXT を使ってと言う事でしたら、
>
> int nItem = (int)::SendMessage(hlistWnd, LVM_GETNEXTITEM, -1,
>                                MAKELPARAM(LVNI_ALL, 0));
> while(-1 != nItem){
>   // インデックス位置のテキスト等を取得する。
>   ...
>
>   // 次の項目のインデックスを取得する。
>   nItem = (int)::SendMessage(hlistWnd, LVM_GETNEXTITEM, nItem,
>                              MAKELPARAM(LVNI_ALL, 0));
> }
>
> って所でしょうか。

えぇと、後者はあまり関係ない話ですので無視してください。

#むぅ、何で LVM_GETITEMTEXT を LVM_GETNEXTITEM と思ったんだろう...
---
Shigeru Mitsumori <mitumori@...>
           http://plaza11.mbn.or.jp/~mitumori/

Navigation

検索

[検索ヘルプ]

Maintener: Tietew <www.tietew.jp>
Powered by Ruby on Rails, Mongrel, PostgreSQL, and Hyper Estraier.
click here