이것은 Taskbar 점프 목록에 대한 윈도즈 7 Taskbar 일련의 포스트의 두 번째 자리이다. 윈도즈를 위해 7 Taskbar – 점프를 점프 목록 2013 개 부분 1으로 발전시켜서 이전의 포스트에(서)우리는 Taskbar 점프 목록으로 구성된 요소를 제출했다: 목적지 또한 "명사와" 일로 부르는 것(또한" "동사"로 부르는 것)) 개발자로서 당신은 이들 요소 많은 양의 억제 수단을 가진다. 이 포스트에(서)우리는 Taskbar 점프 목록의 프로그램을 짤 때 당신이 이용할 수 있는 다른 APIs을 통해 걷는다.
우리가 시작하기 전에 매우 중요한 한 가지가 당신이 알아야 한다 있다. 최근 카테고리에(서)또는 다른 어떤 카테고리도(어떤 목적지도)에(서) "아이템"은 당신의 응용을 위해 레지스트리에(서)등록된 파일 트레이너를 가져야 한다. 이것이 당신의 응용이 그 특정한 파일형태를 위해 디폴트 트레이너임 에 틀림 없다는 것을 의미하지 않고 단지이다 그것은 당신의 응용이 당신이 점프 목록에(서)볼 수 있기를 원하는 파일이 있음에도 불구하고 등록된 트레이너를 가져야 한다는 것을 의미한다. 단지 따라서 "아이템"은 파일일 수 있다. 점프 목록에(서)아이템 중의 하나를 클릭함으로써 운영체제가 그것이 당신의 응용에 관련되어서 그 파일과 관련된 명령을 수행한다는 것을 기억해라. 당신이 파일 트레이너를 등록할 때 당신은 정의하고 어떻게이어라 응용을 위해 입력 파라미터를 지나가는지 또한 이 파일과 당신을 다루는 응용을 명시한다. 기억할 또다른 중요한 노트: 모든 아이템(파일)은 당신의 응용에 접근하기 쉽게 그리고 현지 하드 드라이브(위)에 다시 말해서 현지 2013이어야 한다. 따라서 우리는 점프 목록 목적지 사이의 각 모든 아이템이 파일 트레이너가 당신의 응용에(게)등록되면서 접근할 수 있고 현지 파일이라고 말할 수 있다.
우리가 다음 섹션에(서)설명해서 일단 당신이 당신의 파일 트레이너를 등록하면 운영체제는 실제로 당신이 끊임없이 당신의 모든 파일의 정보를 알아 내도록 도와 준다. 우리는 다음 포스트에(서)파일 트레이너 등록을 덮을 것이다.
1 2013 단계 사용 박스 창이 행동을 경험하고 이행하지 않는다.
부재중에 점프 목록이 SHAddToRecentDocs 기능을 통해 자동적으로 사는 파일에 기초를 둔 응용을 위해 최근 카테고리를 가지고 있다. 이 기능은 최근에 사용된 문서의 껍질의 목록에 사용된 "아이템" (파일)을 추가한다. 최근 문서의 그것의 목록을 업데이트하는 것 외에 껍질은 사용자의 최근 디렉토리에 지름길을 추가한다. 윈도즈 7 Taskbar은 그 목록과 최근 디렉토리를 이용하여 점프 목록에(서)최근 아이템의 목록에 산다.
당신의 응용의 파일형태가 등록된다면 윈도즈는 당신을 위해 또한 일을 할 수 있다. 윈도즈가 당신의 응용에 착수하기 전에 당신이 등록된 트레이너와 함께 double 파일형태를 클릭하는 언제든지 그것은 당신의 응용을 위하여 자동적으로 SHAddToRecentDocs을 부른다. 최근 윈도즈 목록에(서),이것은 결국 아이템을 최근 점프 목록 카테고리에 끼워넣는다. 공통적인 윈도즈 파일 대화(CFD)을 이용하여 우리의 응용을 통해 파일을 열 때 똑같은 자동 행동은 일어난다. 따라서 이것이 이용하기에 CFD이 윈도즈에(서)조망 timeframe을 소개한 또다른 좋은 이유이고 그것은 윈도즈 7 도서관 포스트를 가지고 위로 또한 빛에서 우리가 설명해서 도서관을 생각하는 활력 있는 역할을 한다.
상기한 케이스 둘 다는 당신이 등록된 트레이너와 파일이 최근 빈번한 목록과 관련된 응용 ID 카드를 가지는 케이스에(서)디폴트 윈도즈 행동을 이용한다. 당신이 COM API을 이용함으로써 명확하게 이 기능을 제거하지 않으면 두 케이스에(서)윈도즈는 자동적으로 아이템을 점프 목록에 끼워넣는다. 명백히 사용자는 또한 그들의 점프 목록에서 어떤 아이템도 제거할 옵션이 있다. 명쾌하게 점프 목록에서 아이템을 제거함으로써 당신은 그것을 우리가 아래 의논하는 별개의 아이템 목록에 끼워넣는다.
2 2013 단계는 당신의 자신의 카테고리를 만든다.
최근 빈번한 디폴트 카테고리가 당신의 응용의 필요한 것을 충족시키지 않는다면 당신의 자신의 맞춤식 카테고리를 만들 시간이다. 그렇게 하기 위해 당신은 ICustomDestinationList 인터페이스를 이용하여 맞춤식 목적지 목록을 만들어야 한다.
ICustomDestinationList은 응용이 맞춤식 점프 목록과 포함하는 목적지와 일을 제공하도록 허락하는 Taskbar에(서)디스플레이를 위해 방법을 보인다. 여기 우리가 아래 예에 쓰고 있는 방법이 있다:
- AppendCategory은 맞춤식 카테고리와 그것이 맞춤식 점프 목록에(서)포함을 위해 가지고 있는 목적지를 정의한다.
- AppendKnownCategory은 빈번하거나 최근 카테고리가 점프 목록에 포함되어야 하는 것을 명시한다.
- BeginList은 맞춤식 점프 목록을 위해 건물 세션을 시작한다.
- CommitList은 BeginList에의 콜이 시작한 점프 목록이 완전하고 디스플레이의 준비가 되어 있다고 단언한다.
다음 코드 발췌가 "맞춤식 목록" 라고 불리는 새로운 맞춤식 목록을 만드는 방법을 알려 주고 그것에 약간의 아이템을 첨가한다:
void CreateJumpList()
{
ICustomDestinationList *pcdl;
HRESULT hr = CoCreateInstance(
CLSID_DestinationList,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&pcdl));
if (SUCCEEDED(hr))
{
//important to setup App Id for the Jump List
hr = pcdl->SetAppID(c_szAppID);
if (SUCCEEDED(hr))
{
UINT uMaxSlots;
IObjectArray *poaRemoved;
hr = pcdl->BeginList(
&uMaxSlots,
IID_PPV_ARGS(&poaRemoved));
if (SUCCEEDED(hr))
{
hr = _AddCategoryToList(pcdl, poaRemoved);
if (SUCCEEDED(hr))
{
pcdl->CommitList();
}
poaRemoved->Release();
}
}
}
}
여기에(서)당신은 우리가 기준이 된 COM 초기화 콜부터 시작했다는 것을 안다. 우리는 이것이 COM와 더불어 작용하는 기쁨이다 CoCreateInstance을 ICustomDestinationList 물건을 초기치에 맞추려고 전화한다. …당신이 목록에(게)아이템에 살기 시작하도록 허락하기 위해 다음에 우리는 응용 ID 카드를 놓았다.
BeginList 기능은 맞춤식 점프 목록을 위해 체격 세션을 시작했다. 이 기능은 주어진 점프 목록에(서)맞을 수 있는 아이템의 최고 숫자를 되돌려준다; 채무 불이행은 10이다. 당신은 되돌려주는 파라미터 out 그것 BeginList 이동 아이템 파라미터,IObjectArray *poaRemoved에 주목할 수 있다. 이것은 그의 현재 세션에(서)사용자가 점프 목록에서 제거한 특정한 어떤 아이템도 잡는다. 우리는 이 포스트에(서)나중에 별개의 아이템 목록을 의논한다.
다음에 우리는 맞춤식 카테고리로 아이템을 더하는 실제 작품을 하는 것 조력자를 기능, AddCategoryToList이라고 불렀다.
// This is the helper function that actually appends the items to a collection
// object HRESULT _AddCategoryToList(ICustomDestinationList *pcdl,
// IObjectArray *poaRemoved)
{
IObjectCollection *poc;
HRESULT hr = CoCreateInstance
(CLSID_EnumerableObjectCollection,
NULL,
CLSCTX_INPROC_SERVER,
IID_PPV_ARGS(&poc));
if (SUCCEEDED(hr))
{
for (UINT i = 0; i < ARRAYSIZE(c_rgpszFiles); i++)
{
IShellItem *psi;
if (SUCCEEDED(SHCreateItemInKnownFolder(
FOLDERID_Documents,
KF_FLAG_DEFAULT,
c_rgpszFiles[i],
IID_PPV_ARGS(&psi)))
)
{
if(!_IsItemInArray(psi, poaRemoved))
{
poc->AddObject(psi);
}
psi->Release();
}
}
IObjectArray *poa;
hr = poc->QueryInterface(IID_PPV_ARGS(&poa));
if (SUCCEEDED(hr))
{
pcdl->AppendCategory(L"Custom category", poa);
poa->Release();
}
poc->Release();
}
return hr;
}
우리가 이용하는 또다른 새로운 인터페이스는 IUnknown을 지지하는 물건의 컬렉션을 대표하는 IObjectCollection이다. 이 컬렉션에(게)우리는 IShellItems을 더한다. 우리가 점프 목록에 추가한 각 아이템(파일)은 IShellItem 타입에서 온다. 상기한 코드에(서)우리는 알려 진 폴더,문서 안에 존재하는 단 하나의 파일을 위해 껍질 아이템 물건을 만들었다. 우리가 실제로 컬렉션에 새로운 아이템을 추가했기 전에 그러나 우리는 사용자가 이미 그것을 제거했는지를 결정해야 했다. 사용자가 명쾌하게 점프 목록에서 아이템을 제거했다면 그 아이템이 AppID와 다시 관련된 별개의 아이템 목록에(서)있을 것이고 개발자로서 우리는 사용자의 요청을 존중하고 점프 목록에 그 아이템을 추가하는 것을 피하여야 한다. 우리는 이미 별개의 아이템의 목록,우리가 BeginList을 불렀을 때 우리가 얻은 IObjectArray *poaRemoved을 가진다. …우리가 새로운 목록의 창조를 시작했을 때 기능을 해라.
이 단계에(서)당신은 사용자가 안에 점프 목록을 볼 것으로 기대하는 껍질 아이템의 컬렉션을 가진다. 다음에 우리가 ICustomDestinationList 물건에 그 컬렉션을 추가했고 새로운 카테고리 거명된 "맞춤식 카테고리," pcdl >AppendCategory(리터" "맞춤식 카테고리," poa)을 만들었다;.
그렇게 지금 성공적으로 당신이 "맞춤식 카테고리" 라고 불리는 Taskbar에(서)새로운 카테고리를 만들었고 4 아이템과 더불어 그것에 살았다. 그러나 우리의 일을 아직 하지 않는다. CreateJumpList 기능에(서)최종적인 스텝은 CommitList을 BeginList을 부르는 것과 함께 시작한 "거래"를 끝내려고 전화하는 것이다. 단지 CommitList에의 우리의 콜 후에 새로운 카테고리와 새로운 아이템 이 전시된다. 깨끗이 될 별개의 아이템과 시작될 새로운 별개의 아이템 목록의 저장해 진 목록을 야기한다 CommitList을 부르기. ICustomDestinationList 인터페이스는 "업무적인 기본" 응용 프로그램 인터페이스를 제공한다.
새로운 다시 사람이 거주하게 된 목록의 안전한 카피가 완전하고 사용의 준비가 되어 있고 긍정적인 최종 사용자 경험을 확실하게 하기 위해 Taskbar이 해야 하는 유일한 오퍼레이션은 새로운 목록에 대한 포인터를 휘두르는 것이라는 것을 확인해라. 끝 결과는 보인다:
우리가 관리된 코드를 이용해서 똑같은 응용을 쓸 수 있는 Windows API 코드 팩을 이용하기.
일단 우리가 우리가 모든 Taskbar 요소와 더불어 똑같은 AppID을 이용하고 있다고 확신하면 우리는 다음 코드 발췌에 나타난 것과 같이 우리가 힘을 기울이고 있는 버튼을 위해 Taskbar 점프 목록의 실례를 만들 수 있다. 이 코드 발췌는 주요한 응용 창의 CTOR의 부분이다:
// Set the application specific id
Taskbar.AppId = appId;
// Retrieve the taskbar jump list
jumpList = Taskbar.JumpList;
category1 = new CustomCategory("Custom Category 1");
category2 = new CustomCategory("Custom Category 2");
// Add custom categories
jumpList.CustomCategories.Add(category1);
jumpList.CustomCategories.Add(category2);
// Default values for jump lists
comboBoxKnownCategoryType.SelectedItem = "Recent";
여기에(서)당신은 우리가 AppID을 AppId 자산(소유지)을 이용하게 만들었고 정적인 Taskbar.JumpList 자산(소유지)을 이용해서 Taskbar 점프 목록의 실례를 만들었다는 것을 알 수 있다. 우리는 맞춤식 카테고리 1와 맞춤식 카테고리 2이라고 명명되어서 또한 2 개 범주를 만든다. 다음에 우리는 점프 목록 맞춤식 카테고리 컨테이너에 이들 카테고리를 추가한다. 마지막으로 우리는 최근 이 Taskbar 점프 목록의 알려 진 카테고리를 놓았다. 이것은 자동적으로 위에 묘사하는 as 살 것이다.
우리가 맞춤식 카테고리를 세운 후에 약간의 내용을 그것에 넣을 시간이다. 단지 그렇게 하기 위해 우리는 JumpListCollection에 JumpListItem을 추가하기 위해 기능을 더하여라 불러야 한다. JumpListItemCollection은 IJumpListItem 아이템<IJumpListItem>을 잡는 일반적인 컬렉션이다. IJumpListItem 아이템은 네이티브 IShellItem을 위해 기본적으로 일종의 포장지이다.
// Specify path for shell item
string path = String.Format("{0}\\test{1}.txt",
executableFolder,
category1.JumpListItems.Count);
// Add shell item to custom category
category1.JumpListItems.Add(new JumpListItem(path));
IObjectCollection categoryContent =
(IObjectCollection)new CEnumerableObjectCollection();
// Add each link's shell representation to the object array
foreach (IJumpListItem link in category.JumpListItems)
categoryContent.AddObject(link.GetShellRepresentation());
// Add current category to destination list
HRESULT hr = customDestinationList.AppendCategory(
category.Name,
(IObjectArray)categoryContent);
그것이 쉽게 있을 수 있어서 윈도즈 7 Taskbar 기능으로 선택해라. 윈도즈가 당신을 위해 자동적으로 일 중 대부분을 수행하고 당신이 당신의 자신의 카테고리를 만들어야 한다면 그것은 또한 매우 쉽다.
당신이 점프 목록에 새로운 일을 어떻게 추가할 수 있다 다음 포스트에(서)우리는 파일 트레이너를 등록하는 방법을 설명할 것이다.
Yochay Kiriaty에 의하여 쓰이어 지는 것. 소스 웹사이트가 있고 더입니까 대단한 먹이를 읽는다.
노-코멘트.
더 많은 otherSoftware와 Sample 코드에 관한 기사와 창 7와 taskbar와 .Net와 개발자와 마이크로소프트를 읽어라.
- + Digg: 이 기사를 특별히 다뤄라
- + Del.icio.us: 이 물품 북마크
- + Furl: 이 물품 북마크















