2016-05-26 1 views
1

私のVB.Netアプリケーションでは、私はプログレスバーとして、アプリケーションのタスクバーアイコンを使用することができます次のコードがあります。メインフォームではなくダイアログボックスでタスクバーの進行状況を設定できますか?

Public Sub setTaskbarProgress(ByVal upTo As Integer, ByVal outOfTotal As Integer, ByVal stateType As TaskbarProgressBarState) 
If TaskbarManager.IsPlatformSupported Then 
     If stateType = Nothing Then stateType = TaskbarProgressBarState.Normal 
     Dim tbm As TaskbarManager = TaskbarManager.Instance 
     tbm.SetProgressValue(upTo, outOfTotal) 
     If upTo = 0 And outOfTotal = 100 Then 
      tbm.SetProgressState(TaskbarProgressBarState.NoProgress) 
     Else 
      tbm.SetProgressState(stateType) 
     End If 
    End If 
End Sub 

私はこの機能を拡張したい、理想的には4番目のパラメータを持っています。プログレスバー(Taskbar.SetProgressValueとTaskBar.SetProgressState)は常にメインフォームに適用されるのではなく、私のプロジェクトで特定のサブフォームまたはダイアログボックスに適用されたように

Public Sub setTaskbarProgress(ByVal upTo As Integer, 
ByVal outOfTotal As Integer, ByVal stateType As TaskbarProgressBarState, _ 
ByRef target As Form) 

「TaskbarManager」のどのウィンドウを実際に適用するかを指定する方法はありますか?私はそれをどのように「目標」に与えるのか分かりませんか? Windowsはこれを許可していますか?任意の点を歓迎するでしょう。

+0

ダイアログがハンドル(タスク)とタスクバーの存在(おそらくそうですが、そうではありません)がある限り、Windowsは気にしません。 – RoyalPotato

+0

ありがとう、それは良いニュースです。ダイアログボックスには、ShowInTaskbar = Trueというプロパティがあり、独自のタスクバーが存在します。しかし、どのように私は関連するダイアログボックスのハンドルをTaskbarManagerに送りますか?私は何かが足りない。 –

+0

WindowsAPICodePackを使用していますか? – RoyalPotato

答えて

0

まあ、どんな場合でもそうすることができますが、あなたが提供したコードには、完全なアクセス権を持っている場合と同じではないため、ソースコードに必要な変更を行うかどうかは、公式WindowsAPICodePack C#コードのVB.NET変換であるか、他の人によるカスタムラッパーであるかは明確ではありません。

とにかく、TaskbarManager.Instanceメンバーparticullaryあなたが持つことができるコードは、ITaskbarListインタフェース、probablly ITaskbarList4(すべて)のいずれかを実装する必要があり、これはあなたがITaskbarList::SetProgressValueを呼び出すためにラッパーを手直しすることができるはずです意味しますメソッドは、ダイアログのターゲットウィンドウハンドルを渡します。

あなたがITaskbarList定義を必要とすることができるいくつかの理由で、私はVB.NETに時間前にそれを翻訳した場合Additionaly

''' <remarks> 
    ''' <see href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd562040(v=vs.85).aspx"/> 
    ''' </remarks> 
    <ComImport> 
    <InterfaceType(ComInterfaceType.InterfaceIsIUnknown)> 
    <Guid("C43DC798-95D1-4BEA-9030-BB99E2983A1A")> 
    Public Interface ITaskbarList4 

#Region " ITaskbarList " 

     <PreserveSig> 
     Sub HrInit() 

     <PreserveSig> 
     Sub AddTab(ByVal hwnd As IntPtr) 

     <PreserveSig> 
     Sub DeleteTab(ByVal hwnd As IntPtr) 

     <PreserveSig> 
     Sub ActivateTab(ByVal hwnd As IntPtr) 

     <PreserveSig> 
     Sub SetActiveAlt(ByVal hwnd As IntPtr) 

#End Region 

#Region " ITaskbarList2 " 

     <PreserveSig> 
     Sub MarkFullscreenWindow(ByVal hwnd As IntPtr, <MarshalAs(UnmanagedType.Bool)> ByVal fFullscreen As Boolean) 

#End Region 

#Region " ITaskbarList3 " 

     <PreserveSig> 
     Sub SetProgressValue(ByVal hwnd As IntPtr, ByVal ullCompleted As UInt64, ByVal ullTotal As UInt64) 

     <PreserveSig> 
     Sub SetProgressState(ByVal hwnd As IntPtr, ByVal tbpFlags As TaskbarProgressBarState) 

     <PreserveSig> 
     Sub RegisterTab(ByVal hwndTab As IntPtr, ByVal hwndMdi As IntPtr) 

     <PreserveSig> 
     Sub UnregisterTab(ByVal hwndTab As IntPtr) 

     <PreserveSig> 
     Sub SetTabOrder(ByVal hwndTab As IntPtr, ByVal hwndInsertBefore As IntPtr) 

     <PreserveSig> 
     Sub SetTabActive(ByVal hwndTab As IntPtr, ByVal hwndInsertBefore As IntPtr, ByVal dwReserved As UInteger) 

     <PreserveSig> 
     Function Fake1() As HResult 
     ' Function ThumbBarAddButtons(byval hwnd As IntPtr, byval cButtons As UInteger, <MarshalAs(UnmanagedType.LPArray)> byval pButtons As ThumbButton()) As HResult 

     <PreserveSig> 
     Function Fake2() As HResult 
     ' Function ThumbBarUpdateButtons(byval hwnd As IntPtr, byval cButtons As UInteger, <MarshalAs(UnmanagedType.LPArray)> byval pButtons As ThumbButton()) As HResult 

     <PreserveSig> 
     Sub Fake3() 
     ' Sub ThumbBarSetImageList(byval hwnd As IntPtr, byval himl As IntPtr) 

     <PreserveSig> 
     Sub SetOverlayIcon(ByVal hwnd As IntPtr, ByVal hIcon As IntPtr, <MarshalAs(UnmanagedType.LPWStr)> ByVal pszDescription As String) 

     <PreserveSig> 
     Sub SetThumbnailTooltip(ByVal hwnd As IntPtr, <MarshalAs(UnmanagedType.LPWStr)> ByVal pszTip As String) 

     <PreserveSig> 
     Sub SetThumbnailClip(ByVal hwnd As IntPtr, ByVal prcClip As IntPtr) 

#End Region 

#Region " ITaskbarList4 " 

     Sub Fake4() 
     ' Sub SetTabProperties(byval hwndTab As IntPtr, byval stpFlags As SetTabPropertiesOption) 

#End Region 

    End Interface 

(私が使用していたしません「フェイク」という名前のいくつかのメソッドを無視して)

''' <remarks> 
''' <see href="http://msdn.microsoft.com/en-us/library/windows/desktop/dd391697%28v=vs.85%29.aspx"/> 
''' </remarks> 
Public Enum TaskbarProgressBarState 
    NoProgress = 0 
    Indeterminate = &H1 
    Normal = &H2 
    [Error] = &H4 
    Paused = &H8 
End Enum 
+0

「公式のWindowsAPICodePack C#コードのVB.NET変換であるかどうかは不明です」またはバイナリ形式。 .dllを参照しています。 – RoyalPotato

+0

私はちょうどDLLを参照している、私は 'フードの下に'行っていないか、サードパーティのラッパーを使用しています。私が正しく覚えていれば、ここからパックをダウンロードしました:[link] https://www.nuget.org/packages/WindowsAPICodePack-Core [/ link] @ElektroStudios –

関連する問題