4
我想創建一個應用程序來更改Windows 7中的默認播放設備。唯一的解決方案是與聲音小程序進行交互。我成功地獲得了具有設備名稱但無法從ListView中獲取文本的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手柄是正確的......間諜一查++。 我需要執行哪些測試來檢查問題出在哪裏?如果有幫助,我可以給你所有的腳本。
是的,我試過..相同的東西 – Sp3ct3R
@ Sp3ct3R:比字符串編碼?你可以嘗試使用PtrToStringUni/PtrToStringAnsi而不是PtrToStringAuto嗎? –
還有另一個字符,但不可辨認。我曾嘗試使用LWM_GETITEMTEXTW和LWM_GETITEMW,就像在我的原始帖子中一樣。感謝回覆。 – Sp3ct3R