나는 뒤로 선택하고 수정할 수있는 프로그램을 작성했습니다. WindowFromPoint()
을 사용하여 마우스 커서 아래의 창에 대한 핸들을 가져오고 그 위에 GetWindowText()
을 호출하여 창 제목을 가져옵니다. 이것은 잘 작동합니다.로컬 변수에 대한 포인터를 다른 프로세스에 전달하는 것은 가끔씩 작동합니다.
그런 다음 목록 컨트롤의 열 제목을 가져 오는 기능을 추가했습니다. 문제는 너비를 반환하는 GetColumnWidth()
과 달리 제목을 가져 오는 해당 함수가 없다는 것입니다. 대신 열 머리글의 제목을 얻으려면 GetColumn()
에 버퍼를 전달하여 제목을 채워야합니다. 따라서 LVCOLUMN
구조체의 pszText
멤버를 버퍼 포인터에 할당하고 구조체를 GetColumn()
으로 전달하면 다른 프로세스는 포인터를 자체 메모리 공간으로 해석합니다. 분명히 이것은 작동하지 않을 것입니다.
CodeProject article의 방법을 사용하여 해결했습니다. 그것은 훌륭하게 작동했습니다. 그러나 나는 아직도 왜 GetWindowText()
이 일을했는지 혼란 스럽다.
GetWindowText()
은 GetColumn()
과 동일하기 때문에 혼란 스럽습니다. 그것은 윈도우 제목을 반환하지 않습니다. 제목을 넣기위한 버퍼/변수가 필요합니다.
왜 다른 프로세스로 채워지는 변수를 다른 시나리오로 채우지 만 다른 시나리오에서는 사용할 수 없습니까?
// *lc points to a list-control in another process
int colwidth = lc->GetColumnWidth(col); //works correctly!
// local variables
CString colname = _T("");
LVCOLUMN col;
memset(&col, 0, sizeof(col));
col.mask=LVCF_TEXT;
col.cchTextMax=256;
col.pszText=colname.GetBuffer(256); // passing a pointer to local buffer
BOOL ret=lc.GetColumn(colnum, &col); // buffer is empty
colname.ReleaseBuffer();
유사 항목 : http://stackoverflow.com/questions/5688927/how-do-i-find-a-item-in-listview-control – marcinj
@luskan, 감사합니다! 나는 CodeProject에서이 방법을 사용했고 효과가 있었다. 나는 왜'GetWindowText()'가 작동하는지 궁금해하기 때문에 그 부분에 초점을 맞추기 위해 약간의 질문을 다시 써 보겠다. – Synetech