2012-10-18 3 views
1

내 응용 프로그램에서 "작업 표시 줄에 고정", "시작 메뉴에 고정", "작업 표시 줄에서 고정 해제"및 "시작 메뉴에서 고정 해제"기능을 제공해야합니다 프레임 워크 3.5). 이 코드는 잘 작동작업 표시 줄 및 시작 메뉴에서 고정/고정 해제

Dim verbs As FolderItemVerbs = link.Verbs() 
For i As Integer = 0 To verbs.Count - 1 
    Dim verb As FolderItemVerb = verbs.Item(i) 
    Dim verbName As String = verb.Name.Replace("&", String.Empty) 
    If (verbName.Equals("pin to taskbar")) Or (verbName.Equals("unpin from taskbar")) Then 
    ‘If (verbName.Equals("Pin to Start Menu")) Or (verbName.Equals("Unpin from Start Menu")) Then 
    verb.DoIt() 
    End If 
Next 

하지만 내 경우에는 내 응용 프로그램은 널리 세상이 너무 다른 로케일 설정 (다른 언어)로 응용 프로그램을 실행하는 모든 분산되어 현재 나는 아래의 코드를 사용하여 기능을 달성 매우 일반적입니다. 위의 코드에는 모든 언어 (예 : 프랑스어, 독일어 등)에서 작동하지 않는다는 제한이 있습니다. 언어 독립적 인 고정 및 고정 해제 기능을 구현하는 방법을 알려주십시오.

+2

을 나는 전혀 그것을 할 수 있습니다 놀랍군요. http://blogs.msdn.com/b/oldnewthing/archive/2003/09/03/54760.aspx – SSS

+0

죄송합니다. 말씀 하시려는 것을 이해할 수 없습니다. – Abdul

+1

Microsoft는 프로그래밍 방식 핀/고정 해제를 적극적으로 권장하지 않습니다. 그것은 사용자가 수동으로 수행하기위한 것입니다. – SSS

답변

0

의견에서 언급했듯이 이렇게해서는 안됩니다.

운영체제에 액세스 할 수있는 권한이 없지만 레지스트리에서 문자열을 찾아야합니다. 그렇지 않으면 쉽게 리소스에있을 수 있습니다.

그것은 작동
0

,이 시도 :

[DllImport("kernel32.dll")] 
    private static extern IntPtr LoadLibrary(string dllName); 
    [DllImport("user32.dll", CharSet = CharSet.Auto)] 
    static extern int LoadString(IntPtr hInstance, uint uID, StringBuilder lpBuffer, int nBufferMax); 

    int MAX_PATH = 255; 
    var actionIndex = pin ? 5386 : 5387; // 5386 is the DLL index for"Pin to Tas&kbar", ref. http://www.win7dll.info/shell32_dll.html 
    StringBuilder szPinToStartLocalized = new StringBuilder(MAX_PATH); 
    IntPtr hShell32 = LoadLibrary("Shell32.dll"); 
    LoadString(hShell32, (uint)actionIndex, szPinToStartLocalized, MAX_PATH); 
    string localizedVerb = szPinToStartLocalized.ToString(); 

If (verbName.Equals(localizedVerb)) Or (verbName.Equals(localizedVerb)) Then