5

Windows 7 のデフォルトの再生デバイスを変更する小さなアプリケーションを作成したいと考えています。唯一の解決策は、サウンド アプレットを操作することでした。デバイス名を持つ SysListView32 ウィンドウへのハンドルを取得することに成功しましたが、ListView からテキストを取得できません。

これは使用されるコードです:

IntPtr sListView = (window handle received from another function)
LVITEM lvi = new LVITEM();
lvi.mask = LVIF_TEXT;
lvi.cchTextMax = 1024;
lvi.iItem = 0; // i tried with a loop trought all the items
lvi.iSubItem = 0;
lvi.pszText = Marshal.AllocHGlobal(1024);

IntPtr ptrLvi = Marshal.AllocHGlobal(Marshal.SizeOf(lvi));
Marshal.StructureToPtr(lvi, ptrLvi, false);

SendMessage(sListView, (int)WinMesages.LVM_GETITEMW, IntPtr.Zero, ptrLvi);

string strLvi = Marshal.PtrToStringAuto(lvi.pszText);

結果 (strLvi) はいくつかの漢字です。スクリプトの何が問題になっていますか?

UPDATE : LVITEM 構造体は次のとおりです。

private struct LVITEM
{
    public uint mask;
    public int iItem;
    public int iSubItem;
    public uint state;
    public uint stateMask;
    public IntPtr pszText;
    public int cchTextMax;
    public int iImage;
    public IntPtr lParam;
}

sLIstView ハンドルは正しいです... チェックインされた spy++ です。問題の場所を確認するには、どのようなテストを実行する必要がありますか? それが助けになるなら、私はあなたにすべてのスクリプトを与えることができます.

4

1 に答える 1

1

代わりに LWM_GETITEMTEXTW を使用してみましたか?

于 2011-09-30T11:16:20.643 に答える