C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

IP Messengerを操作する方法について

[トピック内 11 記事 (1 - 11 表示)]  << 0 >>

■91678 / inTopicNo.1)  IP Messengerを操作する方法について
  
□投稿者/ TanuTanu (35回)-(2019/07/19(Fri) 19:17:44)
TanuTanu さんの Web サイト

分類:[.NET 全般] 

いつもお世話になっております。

Send MessageというソフトのLIST部でグループ選択をVB.NETからAPI使用し操作したいのですが、
方法が解りません。ご存知の方いらっしゃいましたらご教授下さい。

ちなみにメモ記入欄は、SendMessage(hWnd, WM_SETTEXT, 0&, "AAAAAA")でいけました。

SPY++解った事
キャプション:List1
クラス:SysListView32

宜しくお願いいたします。
引用返信 編集キー/
■91681 / inTopicNo.2)  Re[1]: IP Messengerを操作する方法について
□投稿者/ PANG2 (313回)-(2019/07/20(Sat) 02:54:35)

List View Messages
https://docs.microsoft.com/en-us/windows/win32/controls/bumper-list-view-control-reference-messages
引用返信 編集キー/
■91682 / inTopicNo.3)  Re[2]: IP Messengerを操作する方法について
□投稿者/ TanuTanu (36回)-(2019/07/20(Sat) 11:46:15)
PANG2 さん

ありがとうございます。

LVM_SETSELECTEDCOLUMN messageを使用したいのですがコードがわかりません。

ぐぐったのですがこのメッセージのコードが載っていませんでした。

どのように調べればよいのでしょうか。ご教授お願い致します。

引用返信 編集キー/
■91690 / inTopicNo.4)  Re[3]: IP Messengerを操作する方法について
□投稿者/ とっちゃん (606回)-(2019/07/20(Sat) 17:05:11)
No91682 (TanuTanu さん) に返信

> LVM_SETSELECTEDCOLUMN messageを使用したいのですがコードがわかりません。
>
> ぐぐったのですがこのメッセージのコードが載っていませんでした。
>
リファレンス。
https://docs.microsoft.com/ja-jp/windows/win32/controls/lvm-setselectedcolumn


LVM_SETSELECTEDCOLUMN の定義値は、Commctrl.h を参照してください。
ヘッダーは C/C++ 用の WindowsSDK に含まれています。


> どのように調べればよいのでしょうか。ご教授お願い致します。
>
Windows メッセージなので、リファレンス見ればわかるでしょ?程度ですかねえ。。。



SendMessage は使えるという大前提のコードサンプル


' hWnd : IP Messenger のListViewコントロールのHWND
' index : 選択したいカラムのインデックス

SendMessage( hWnd, LVM_SETSELECTEDCOLUMN, index, 0 )

で、メッセージを送れます。
カラムを選択できて意味があるのか?という気がしますが、一応この形かなぁ。。。
たぶん意図したものじゃないと思いますよ。

IPMessenger の操作のグループ選択ってこんな単純にはできなかった気がする。。。
操作したことないからわからないけどw

引用返信 編集キー/
■91693 / inTopicNo.5)  Re[1]: IP Messengerを操作する方法について
□投稿者/ PANG2 (314回)-(2019/07/20(Sat) 19:56:39)
No91678 (TanuTanu さん) に返信
> SPY++解った事
> キャプション:List1
> クラス:SysListView32

Spy++でList1を監視して、メッセージのログを見るのがよいかな。
引用返信 編集キー/
■91694 / inTopicNo.6)  Re[2]: IP Messengerを操作する方法について
□投稿者/ TanuTanu (39回)-(2019/07/20(Sat) 20:05:15)
PANG2 様、とっちゃん 様

ありがとうございます。

月曜に試してみます。

SendMessage( hWnd, LVM_SETSELECTEDCOLUMN, index, 0 )を送ったあとに

Shiftキーともう一度範囲までのindexをLVM_SETSELECTEDCOLUMNで送ればいいのかなという目論見です。

ありがとうございました。
引用返信 編集キー/
■91696 / inTopicNo.7)  Re[3]: IP Messengerを操作する方法について
□投稿者/ とっちゃん (607回)-(2019/07/22(Mon) 11:06:11)
No91694 (TanuTanu さん) に返信
> SendMessage( hWnd, LVM_SETSELECTEDCOLUMN, index, 0 )を送ったあとに
>
> Shiftキーともう一度範囲までのindexをLVM_SETSELECTEDCOLUMNで送ればいいのかなという目論見です。
>
会社環境には IP Messenger がインストールされているので、ちょっと動かしてみました。

グループ(ListViewのグループではない)を選択する仕組みはないと思います。

動かしてみたところでわかったのは

1. 特定のカラムでソートが可能(ListViewのDetailモードでソート可能にしている場合の動作)
2. 複数選択ができる(ListViewの複数選択モードの動作)

くらいで、古いリストコントロールでもできるそうさくらいしかありません。

動かしたところでのグループ選択ですが現実的なところとしては

1. リストコントロールのカラムを取得して、グループのカラムを探す(LVM_GETCOLUMN)
2. リストコントロールのアイテムから該当グループ名を持つアイテムをピックアップする(LVM_GETITEMTEXT)
3. アイテムが特定グループなら選択、そうじゃなければ選択解除を一つずつすべてのアイテムで行う(LVM_SETITEMSTATE)

カラムは特定環境のみ(バージョンも含め)なら、決め打ちでもいいと思います。
ですが、そうではない場合は利用したい環境をつぶさに確認して、カラム名などをチェックすることになると思います。

構造体とかいろいろ使うことになるので、.NETからの操作は(かなり)面倒です。

引用返信 編集キー/
■91697 / inTopicNo.8)  Re[4]: IP Messengerを操作する方法について
□投稿者/ TanuTanu (40回)-(2019/07/22(Mon) 11:26:16)
TanuTanu さんの Web サイト
PANG2 様、とっちゃん 様


ありがとうございます。

SPY++で見ましたがLVM_SETSELECTEDCOLUMN コードは解らずでした(小生の知識不足です。。。)

下記は色が変わっただけでした(笑)

SendMessage(hWnd, WM_SETFOCUS, 0, 0)
SendMessage(hWnd, LVM_SETITEMSTATE, 3, 0) ’3番目を選択

さらに調べてみました。

SendMessage(hWnd, LVM_SETITEM, 0, VarPtr(stLvItem))

<StructLayout(LayoutKind.Sequential, Pack:=4)> Private Structure LV_ITEM
Dim mask As Integer
Dim iItem As Integer
Dim iSubItem As Integer
Dim state As Integer
Dim stateMask As Integer
Dim lpszText As IntPtr 'LPCSTR
Dim cchTextMax As Integer
Dim iImage As Integer
Dim lParam As Integer
Dim iIndent As Integer
End Structure

とっちゃん 様が指摘されている通り構造体にぶちあたりました(トホホ・・・)

小生には限界を超えていました。
どれか一つでも選択できれば前進できそうなのですが・・・
引用返信 編集キー/
■91698 / inTopicNo.9)  Re[5]: IP Messengerを操作する方法について
□投稿者/ とっちゃん (608回)-(2019/07/22(Mon) 13:12:34)
No91697 (TanuTanu さん) に返信

> 小生には限界を超えていました。
> どれか一つでも選択できれば前進できそうなのですが・・・

C#での例ですが、別プロセスの ListView コントロールのアイテムをとってくるコード例が出ていました。

考えてみたらその通りで、ListView のメッセージはアウトプロセスからの操作を受け入れられるようになっていないので
相手先プロセスで使えるメモリを用意してやらないと駄目と。。。

そんなのすっかり忘れてたけど、最低でもこれくらいのコードは書かないとやり取りできません。


https://stackoverflow.com/questions/4857602/get-listview-items-from-other-windows

引用返信 編集キー/
■91699 / inTopicNo.10)  Re[1]: IP Messengerを操作する方法について
□投稿者/ 魔界の仮面弁士 (2252回)-(2019/07/22(Mon) 14:24:06)
2019/07/22(Mon) 14:37:51 編集(投稿者)

No91678 (TanuTanu さん) に返信
> Send MessageというソフトのLIST部でグループ選択をVB.NETからAPI使用し操作したいのですが、
> クラス:SysListView32

(1) "Send Message" というソフトウェアにある ListView を、VB.NET からグループ選択し、操作したい
(2) SendMessage API を VB から呼び出して、他のソフトの ListView のグループを選択したい

1 の意味かと思いましたが、2 の意味なのでしょうか。

だとすれば SendMessage に拘らず、
Accessibility.IAccessible インターフェイス(参照設定:Accessibility)
あるいは
System.Windows.Automation.AutomationElement クラス(参照設定:UIAutoamtionClient)
で対処できないでしょうか。

どういう操作を望むのかにもよりますが…。
引用返信 編集キー/
■91700 / inTopicNo.11)  Re[2]: IP Messengerを操作する方法について
□投稿者/ TanuTanu (41回)-(2019/07/22(Mon) 16:06:05)
TanuTanu さんの Web サイト
PANG2 様、とっちゃん 様、魔界の仮面弁士 様

ありがとうございます。

とても難しいという事が解りました。

親切に教えて頂き感謝致します。

また、解らない事がありましたら宜しくお願いいたします。

引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ