2012-07-13 7 views
0

나는 작업 표시 줄에있는 것처럼 빠른 실행 항목을 순서대로 읽는 응용 프로그램을 작성하려고합니다. 및 각 항목에 단축키를 설정합니다. 윈도우 + 1이 모든 항목 IA 폴더를 찾을C# read syslistview32 items wintip을 통해 툴팁

(윈도우 7 등) 등 윈도우 + 2 번째 제 애플리케이션을 시작해야하지만이 폴더의 항목을 판독하는 경우, 전 해달라고 이 항목의 올바른 순서를 얻으십시오.

나는 두 가지 솔루션 (가) 올바른 순서 얻을 발견 - 첫 번째 레지스트리에서

항목이 발견되고 어디는 그들이 아니라 일반 텍스트, 위치 방법 저장. 나는 이것을 읽는 법을 모르고, 엔진을 리버스 할 수 없다.

두 번째 : winapi를 통해 작업 표시 줄에서 항목 설명을 읽을 수 있으므로 빠른 실행 폴더의 이름을 통해 (동일한 이름의 항목이없는 경우) 검색 할 수 있습니다. 빠른 실행 표시 줄은 목록보기 일뿐입니다 (syslistview32). via sendmessage 내가 항목을 계산하고 하나 (이 항목에 대한 가짜) 시작하지만, 도대체 내가 어떻게 툴팁을 읽을 수있어? 나는 많은 것을 봤지만, 모든 것을 시도했지만, 나는 그것을 달릴 수 없었다.

이 문제를 해결하기 위해 나에게 발췌 문장이 있기를 바랍니다. 빠른 실행 도구 모음에서 항목의 순서를 결정

환호

답변

0

프로그램 본질적으로 깨지기 쉬운 될 것입니다. 공개 된 API가 없습니다. 즉, 문서화되지 않은 구현 세부 정보에 대한 가정에 의존하는 코드를 깨고 향후 Windows 버전에서 변경 될 수 있음을 의미합니다.

그러나이 경우 Quick Launch 도구 모음이 더 이상 존재하지 않으므로 (또는 적어도 더 이상 아무도 사용하지 않기 때문에) 일반적으로이 특정 경우에 문제가 발생하지 않습니다. 빠른 실행 도구 모음을 사용하는 Windows의 마지막 버전은 Vista 였으므로 코드가 Vista 및 이전 버전과 호환되는지 확인하는 것이 좋습니다. 어쨌든 최신 버전에서는 작동하지 않습니다. 빠른 실행 도구 모음의 항목

위치는 다음 키의 레지스트리에 저장됩니다

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Streams\Desktop 

당신은 당신이 원하는대로 사용할 다음 구문 분석 및 해석, 거기에서 정보를 추출 할 수 있습니다 . 언급했듯이,이 정보는 일반 텍스트 형식으로 저장되지 않습니다. 셸에서로드 및 구문 분석이 매우 느리기 때문입니다. 이것은 문서화되지 않았기 때문에 고객이 사용하도록 설계되지 않았으므로 사용자 (또는 개발자)를 우호적으로 만드는 데 특별한 이점이 없었습니다. 중요한 것은 쉘에서 가장 효율적인 것이고, 내부 구조로부터 바이너리 정보를 저장하는 것이 확실한 선택입니다.

유용 할 수 있도록이 기능을 리버스 엔지니어링해야합니다. 내가가는 방법은 특정 순서의 빠른 실행 표시 줄에있는 몇 가지 항목으로 테스트 환경을 설정하고, 레지스트리에서 정보를 내보내고, 항목 중 하나를 이동하고, 업데이트 된 정보를에서 가져 오는 것입니다. 레지스트리에서 두 개의 내 보낸 레지스트리 파일을 비교하여 변경된 내용을 확인합니다. 패턴을 추론하는 데 필요한만큼 헹구고 반복하십시오. (실제로 왜 많은 개발자가 실제로 을 수행하는지 궁금해하게 만듭니다.은 Windows의 문서화되지 않은 측면을 리버스 엔지니어링하는 데 시간이 걸립니까?)

다른 옵션은 Spy ++를 사용하여 작업 표시 줄과 빠른 실행 도구 모음을 구현하는 창을 조사하는 것입니다. Windows 7 이전 버전의 시스템은 없지만 이미이 작업을 수행했음을 묻는 질문과 같이 들리며 빠른 실행 도구 모음이 표준 ListView를 사용하여 구현 된 것으로 확인되었습니다. 해당 창 이름 (및 조상 창 이름)을 알고 있으면 관심있는 창의 핸들을 얻기 위해 해당 창을 걸을 수 있습니다. 그러면 창에서 항목의 순서를 결정할 수 있습니다 마치 자신의 응용 프로그램에서 표준 ListView 인 것처럼.

ListView 컨트롤의 설명서는 here입니다. 올바른 방향으로 시작해야합니다. LVM_GETITEMTEXT message을 보내면 하위 항목 중 하나의 텍스트를 가져올 수 있습니다.

아마도 이것은 쉬운 방법 일 것입니다. 동일한주의 사항이 적용됩니다. 이후 버전의 Windows에서 해당 창의 이름이나 작업 표시 줄이 구현되는 방식을 변경하는 것이 없지만 빠른 실행 도구 모음이있는 Windows 버전 만 이미 릴리스되어 있으므로 변경 가능성은 거의 없습니다.) 큰 문제는 아닐 수도 있습니다.

그런 다음 Quick Launch 도구 모음의 진부한 점을 염두에두고 필자는이 노력이 개발자에게 투자 할 가치가있는 이유를 이해하려고 애 쓰고 있습니다.

또한이 프로그램을 모두 작성하고 설치 한 후에도 사용자가 빠른 실행 도구 모음에 새 항목을 추가하거나 기존 항목을 다시 정렬하면 어떻게되는지 고려하십시오. 당신의 유틸리티는 그것을 어떻게 알게되고 적절하게 키보드 단축키를 조정할 것입니까? 설치 관리자이 빠른 실행 도구 모음에서 항목을 추가/제거하면 어떻게됩니까?

+0

안녕하세요, 귀하의 답변에 감사드립니다. 나는 성공하지 못하고 리버스 엔지니어링을 시도했다. 나는 lvm_getitemtext 메시지를 보내야한다는 것을 알고 있습니다. 그러나 그것을 보내서 성공하지 못했을 것입니다. 아마도 내가 잘못했기 때문에 결코 유용한 내용을 다시 얻지 못했습니다. 하지만 내가 알고있는 핸들이 맞다. 왜냐하면 내가 아이템을 성공적으로 계산할 수 있었고 하나를 클릭해도 효과가 있었기 때문이다. – cyptus

+0

사용자가 새 항목을 추가 할 때마다 filesystemwatcher를 사용하여 빠른 실행 항목의 폴더를 볼 수 있습니다. 이벤트를 위해 chaning 할 때 registrywatcher가 유용 할 것입니다. 레지스트리 내용이 intime이되면 perfekt가됩니다. 그러나 나는 그렇게 생각하지 않는다. 또한 항목을 통해 모든 항목을 새로 고침 할 수 있습니다. 단축키를 누를 때마다 항목이 실행되므로 항상 올바른 순서로 표시됩니다. 또 다른 솔루션은 프로그램의 시작 부분에 모든 항목을 다시로드하는 것이고, 빠른 항목은 너무 자주 이동하지 않는다고 생각합니다. (그리고 새 이벤트를 추가하여 이벤트가 있음) – cyptus