• 0

Using API's in a <object>::<action> format?


Question

I'm using .net, and I've been reading about some windows features on Microsofts site, how do I made use of stuff in a format like this:

  Microsoft said:
APIs:

ITaskbarList3::SetProgressState

ITaskbarList3::SetProgressValue

Do I need to add a reference or something? Is it part of Windows API?

NOTE: This is a Windows 7 Feature

Link to comment
https://www.neowin.net/forum/topic/716968-using-apis-in-a-objectaction-format/
Share on other sites

6 answers to this question

Recommended Posts

  • 0

The :: operator is not used in VB.NET to access namespace of type members. In VB.NET, along with C#, use the following:

ITaskbarList3.SetProgressState

, you also need to make sure you reference whatever libraries are required

  • 0

Ideally, you should wait for it to be officially added, but simply put ITaskbarList3 is a COM interface exposed by Explorer. SetProgressValue is a method of this interface. If you have the Windows 7 Beta SDK, it's defined in ShObjIdl.idl. You can rip the relevant parts out and put it in your own IDL. You then compile that with the MIDL compiler (midl /tlb tl.tlb tl.idl) and then convert that type library to an assembly with Tlbimp (tlbimp tl.tlb /out:TaskbarLib.dll). Finally, you add that assembly as a reference in your project.

Here is an example I did just now (note that I make no guarantees about the correctness of this code, and I would not use it in production code without careful auditing first):

[
   uuid(683BF642-E9CA-4124-BE43-67065B2FA653),
   version(1.0),
]
library TaskbarLib
{
[
	uuid(56FDF342-FD6D-11d0-958A-006097C9A090),
	object,
]
interface ITaskbarList : IUnknown 
{
	HRESULT _stdcall HrInit();

	HRESULT _stdcall AddTab([in] long hwnd);

	HRESULT _stdcall DeleteTab([in] long hwnd);

	HRESULT _stdcall ActivateTab([in] long hwnd);

	HRESULT _stdcall SetActivateAlt([in] long hwnd);
};

[
	uuid(602D4995-B13A-429b-A66E-1935E44F4317),
	object,
]
interface ITaskbarList2 : ITaskbarList
{
	HRESULT MarkFullscreenWindow(
		[in] long hwnd,
		[in] BOOL fFullscreen);
}

cpp_quote("#ifdef MIDL_PASS")
typedef IUnknown* HIMAGELIST;
typedef IUNknown* HICON;
cpp_quote("#endif")

cpp_quote("#include &lt;pshpack8.h&gt;")
typedef struct tagTHUMBBUTTON
{
	DWORD   dwMask;
	UINT	iId;
	UINT	iBitmap;
	HICON   hIcon;
	WCHAR   szTip[260];
	DWORD   dwFlags;
} THUMBBUTTON, *LPTHUMBBUTTON;
cpp_quote("#include &lt;poppack.h&gt;")

[
	uuid(ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf),
	object,
]
interface ITaskbarList3 : ITaskbarList2
{
	// Flags for Setting Taskbar Progress state
	typedef [v1_enum] enum TBPFLAG
	{
		TBPF_NOPROGRESS	 = 0x00000000,
		TBPF_INDETERMINATE  = 0x00000001,
		TBPF_NORMAL		 = 0x00000002,
		TBPF_ERROR		  = 0x00000004,
		TBPF_PAUSED		 = 0x00000008,
	} TBPFLAG;

	cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(TBPFLAG)")

	// Flags for SetTabActive
	typedef [v1_enum] enum TBATFLAG
	{
		TBATF_USEMDITHUMBNAIL   = 0x00000001,
		TBATF_USEMDILIVEPREVIEW = 0x00000002,
	} TBATFLAG;

	cpp_quote("DEFINE_ENUM_FLAG_OPERATORS(TBATFLAG)")

	HRESULT SetProgressValue(
		[in] long hwnd,
		[in] ULONGLONG ullCompleted,
		[in] ULONGLONG ullTotal);

	HRESULT SetProgressState(
		[in] long hwnd,
		[in] TBPFLAG tbpFlags);

	HRESULT RegisterTab(
		[in] long hwndTab,
		[in] HWND hwndMDI);

	HRESULT UnregisterTab(
		[in] long hwndTab);

	HRESULT SetTabOrder(
		[in] long hwndTab,
		[in] long hwndInsertBefore);

	HRESULT SetTabActive(
		[in] long hwndTab,
		[in] long hwndMDI,
		[in] TBATFLAG tbatFlags);

	HRESULT ThumbBarAddButtons(
		[in] long hwnd,
		[in] UINT cButtons,
		[in, size_is(cButtons)] LPTHUMBBUTTON pButton);

	HRESULT ThumbBarUpdateButtons(
		[in] long hwnd,
		[in] UINT cButtons,
		[in, size_is(cButtons)] LPTHUMBBUTTON pButton);

	HRESULT ThumbBarSetImageList(
		[in] long hwnd,
		[in] HIMAGELIST himl);

	HRESULT SetOverlayIcon(
		[in] long hwnd, 
		[in] HICON hIcon,
		[in, string] LPCWSTR pszDescription);

	HRESULT SetThumbnailTooltip(
		[in] long hwnd, 
		[in, string] LPCWSTR pszTip);

	HRESULT SetThumbnailClip(
		[in] long hwnd, 
		[in] RECT *prcClip);
}

[ uuid(56FDF344-FD6D-11d0-958A-006097C9A090) ] coclass TaskbarList { interface ITaskbarList3; }
};

To use it, you would do something like

using TaskbarLib;

TaskbarList tl3 = new TaskbarList();
tl3.HrInit();
tl3.SetProgressValue((int)this.Handle, 50, 100);

I've included the version I compiled as an attachment, but remember that it comes with no warranties of any kind.

TaskbarLib.zipFetching info...

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • HomeBank 5.9.2 by Razvan Serea HomeBank is a free software (as in "free speech" and also as in "free beer") that will assist you to manage your personal accounting. It is designed to easy to use and be able to analyse your personal finance and budget in detail using powerful filtering tools and beautiful charts. If you are looking for a completely free and easy application to manage your personal accounting, budget, finance then HomeBank should be the software of choice. HomeBank also benefits of more than 19 years of user experience and feedback, and is translated by its users in around 56 languages. Highlights: Cross platform, supports GNU/Linux, Microsoft Windows, Mac OS X Import easily from Intuit Quicken, Microsoft Money or other software Import bank account statements (OFX, QIF, CSV, QFX) Duplicate transaction detection Automatic cheque numbering Various account types : Bank, Cash, Asset, Credit card, Liability Scheduled transaction Category split Internal transfer Month/Annual budget Dynamic powerful reports with charts Automatic category/payee assignment Vehicule cost HomeBank 5.9.2 fixes: bugfix: #2112135 scheduled with limitation don't stop and goes erroneous data bugfix: #2111663 variable scope issue in ui-assign.c bugfix: #2111359 remind status not synced in transfers Download: HomeBank 5.9.2 | 20.2 MB (Open Source) Download: 3rd party packages (macOSX. Ubuntu...etc) View: HomeBank Website | Support | Features | Screenshot Get alerted to all of our Software updates on Twitter at @NeowinSoftware
    • How long until the Windows 11 hating bots come and say that Windows 11 committed atrocities against their family and their dog?
    • If you never consented to cookies (required), and you're blocking ad domains and you never see ads on Neowin (despite whitelisting) wouldn't you agree the adblock popup notice is doing what it is supposed to do?
    • It's just exactly what it looks like. The facial polygon count is low and rigid, and the background appears heavily blurred. You can clearly see jagged edges around the car window as it exits the tunnel. The character animations feel like they're from 2010. The Xbox Series S has performance similar to an RX 570 or GTX 1660, which is disappointing and contributes to holding back game development. The Switch GPU is roughly on par with a 2050 or 3050, which is even worse. Developers have often discussed the challenges and limitations of developing for outdated/low end hardware, noting how it can hold back progress. This isn't a new issue. I am sure we will hear about the "Challenges" they had to overcome here and sacrifices that had to be made for compatibility with the outdated/low end hardware.
  • Recent Achievements

    • Week One Done
      jbatch earned a badge
      Week One Done
    • First Post
      Yianis earned a badge
      First Post
    • Rookie
      GTRoberts went up a rank
      Rookie
    • First Post
      James courage Tabla earned a badge
      First Post
    • Reacting Well
      James courage Tabla earned a badge
      Reacting Well
  • Popular Contributors

    1. 1
      +primortal
      400
    2. 2
      +FloatingFatMan
      178
    3. 3
      snowy owl
      171
    4. 4
      ATLien_0
      169
    5. 5
      Xenon
      134
  • Tell a friend

    Love Neowin? Tell a friend!