4
Windows 7에서 기본 재생 장치를 변경하는 작은 응용 프로그램을 만들고 싶습니다. 유일한 해결책은 Sound Applet과 상호 작용하는 것입니다. 나는 장치 이름을 가진 SysListView32 창 핸들을 얻는 데 성공했지만 ListView에서 텍스트를 가져올 수 없습니다.다른 창에서 List List 항목보기
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 핸들 ++ A가 스파이 체크 ... 맞습니다. 문제가있는 곳을 확인하기 위해 수행해야하는 테스트는 무엇입니까? 그게 도움이된다면 나는 모든 대본을 줄 수있다.
그래, 나는 똑같은 것을 시도했다 – Sp3ct3R
@ Sp3ct3R : 문자열 인코딩은 어떨까요? PtrToStringAuti 대신 PtrToStringUni/PtrToStringAnsi를 사용할 수 있습니까? –
다른 문자가 있지만 해독 할 수는 없습니다. 나는 원래의 게시물 에서처럼 LWM_GETITEMTEXTW와 LWM_GETITEMW를 시도했다. 답장을 보내 주셔서 감사합니다. – Sp3ct3R