2011-09-28 8 views
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가 스파이 체크 ... 맞습니다. 문제가있는 곳을 확인하기 위해 수행해야하는 테스트는 무엇입니까? 그게 도움이된다면 나는 모든 대본을 줄 수있다.

답변

1

대신 LWM_GETITEMTEXTW를 사용해 보셨습니까?

+0

그래, 나는 똑같은 것을 시도했다 – Sp3ct3R

+0

@ Sp3ct3R : 문자열 인코딩은 어떨까요? PtrToStringAuti 대신 PtrToStringUni/PtrToStringAnsi를 사용할 수 있습니까? –

+0

다른 문자가 있지만 해독 할 수는 없습니다. 나는 원래의 게시물 에서처럼 LWM_GETITEMTEXTW와 LWM_GETITEMW를 시도했다. 답장을 보내 주셔서 감사합니다. – Sp3ct3R