このコードでは、sendmessageを使用して別のアプリケーションのリストビューに対してすべてのアイテム(または項目番号3のコードを指定したアイテム)リストビューの項目ウィンドウハンドルを正常に取得して項目数を取得しましたが、setitemstateを使用すると、他のアプリケーションがエラーを表示して終了します(他のアプリケーションがあるので、このジョブをうまくやっていますが、そのソースコード)winAPIを使用して別のアプリケーションのlistViewにすべてのチェックを設定する
これは私のコードです:
if (windowName.Contains("Invite to Room")) {
IntPtr hwndChild0 = FindWindowEx(hWnd, IntPtr.Zero, "SysListView32", "");
int itemCount = SendMessage(hwndChild0, LVM_GETITEMCOUNT, IntPtr.Zero, IntPtr.Zero);
LV_ITEM lvItem = new LV_ITEM();
lvItem.Index = 3;
lvItem.SubIndex = 2;
lvItem.TextLength = 50;
lvItem.Mask = LVIF_STATE;
lvItem.State = LVIS_SELECTED;
lvItem.StateMask = LVIS_SELECTED;
SendMessage(hwndChild0, LVM_SETITEMSTATE, 3, IntPtr.Zero);
}
は、これが私のLV_ITEM構造であり、
public struct LV_ITEM
{
public uint Mask;
public int Index;
public int SubIndex;
public int State;
public IntPtr StateMask;
public string Text;
public int TextLength;
public int ImageIndex;
public IntPtr LParam;
}
、これは使用(のSendMessageとsetitemstate)の宣言です
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
public static extern int SendMessage(IntPtr hWnd, uint msg, IntPtr wParam, string lParam);
private const uint LVM_FIRST = 0x1000;
private const uint LVM_SETITEMSTATE = (LVM_FIRST + 43);
これで任意のヘルプ?
編集:
アプリケーションエラーが次のメッセージとログファイルがあります。
「スレッドからの読み取りまたはそれが適切なアクセス権を持っていない仮想アドレスに書き込みしようとしたの」
それはエラーを出してシャットダウンしても誰もいいことはしないと言われています。実際のエラーは何ですか? – MethodMan
エラーはありません。正しい動作をしていません。 – Flashi
エラーが発生していないかどうかを確認します。それがエラーを出すならば、どちらか?いいえ、「正しい行動をしていない」とは何ですか?より具体的にしてください。 – Gusman