한 번에 하나씩 선택한 항목 만 허용하는 ListView에서 항목을 선택하는 방법

StackOverflow https://stackoverflow.com/questions/1081979

  •  22-08-2019
  •  | 
  •  

문제

외부 ListView에서 항목을 선택하려고했지만 선택한 여러 항목을 허용하는 ListView 와만 작동하는 것 같습니다.

HANDLE process=OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ|PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, 0xC30); 

LVITEM lvi;

LVITEM* _lvi=(LVITEM*)VirtualAllocEx(process, NULL, sizeof(LVITEM), MEM_COMMIT, PAGE_READWRITE); 

 lvi.state = LVIS_FOCUSED | LVIS_SELECTED;
 lvi.stateMask = LVIS_FOCUSED | LVIS_SELECTED;
 lvi.mask = LVIF_STATE;

 WriteProcessMemory(process, _lvi, &lvi, sizeof(LVITEM), NULL); 
 int abc = ::SendMessage((HWND)0x00080D6A, LVM_SETITEMSTATE, (WPARAM)0, (LPARAM)_lvi); 
 VirtualFreeEx(process, _lvi, 0, MEM_RELEASE);
도움이 되었습니까?

해결책

귀하의 코드는 유효한 것처럼 보이고 작동해야합니다. 내 GUI 응용 프로그램 자체 내에서 내부적으로 테스트 했으므로 실제 프로세스 외부에서 액세스하려는 시도 일 것입니다. 나는 당신이 ListView의 HWND를 하드 코딩했음을 알았습니다. 또한 메시지를 전한 후 즉시 가상 메모리를 출시한다는 사실에주의를 기울일 것입니다. 전송 된 메시지가 ListView Message Pump에 게시 될 예정입니다 (HWND가 정확하다고 가정). 그것은 즉시 처리되지 않을 수 있으며, 그때까지 LVITEM의 기억을 이미 공개 한 것 같습니다. GUI 내부에서 내부적으로 시도해보십시오. 그 일이 작동하는지 확인하십시오. 그런 다음이 접근 방식으로 돌아가서 적절한 디버그 포인트를 설정하는 것이 좋습니다 (GUI 내에서 다른 사람이라면 ListView로 간단한 대화를 만들어) 메시지가 적절하게 수신되고 메모리가 유효한지 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top