Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Nuget] Toolbar does not show button tooltip
#1
Hi, I'm using nuget with C# console. I have setup like the example:
 
Code:
Copy      Help
public class ToolbarRunner
{
    [AttributeUsage(AttributeTargets.Method)] class TriggersAttribute : Attribute { }
    [AttributeUsage(AttributeTargets.Method)] class ToolbarsAttribute : Attribute { }

    ActionTriggers Triggers { get; } = new();

    public void Run()
    {
        RunTriggersAndToolbars();
    }

    void RunTriggersAndToolbars()
    {
        void _TriggerOptions(bool toolbars)
        {
        }

        foreach (var mi in typeof(ToolbarRunner).GetMethods(BindingFlags.DeclaredOnly | BindingFlags.NonPublic | BindingFlags.Instance))
        {
            bool tb = mi.IsDefined(typeof(ToolbarsAttribute), false);
            if (!(tb || mi.IsDefined(typeof(TriggersAttribute), false))) continue;

            Triggers.ResetOptions();
            _TriggerOptions(toolbars: tb);
            if (tb) Triggers.Options.ThreadThis();

            try { mi.Invoke(this, null); }
            catch (TargetInvocationException ex) { print.it(ex.InnerException); return; }
        }

        //run triggers in other thread, to avoid blocking hooks when getting icons etc
        Triggers.RunThread();
    }

    [Toolbars]
    void Toolbar_Floating_Triggers()
    {
        Toolbar_Floating();
    }

    void Toolbar_Floating()
    {
        var t = new toolbar();
        if (t.FirstTime)
        {
        }

        t["Example|EEEEEEEEE"] = o => { print.it("button clicked"); };
        t["Text\a"] = o => { }; //this button always displays text. The above button never.
        t.Menu("Menu1", t =>
        {
            t["A"] = o => { };
            t["B|Tooltip3"] = o => { };
        });
        t.Separator();
        t["Text2\a|Tooltip2"] = o => { };

        t.Show();
    }
}
And in my Program of Console app:
 
Code:
Copy      Help
new Thread(() =>
{
    new ToolbarRunner().Run();
}).Start();

Console.ReadLine();
The toolbar shows at the top-left corner of screen, but when hover on the button, tooltip does not show.
Any idea for this?
My appreciate.
#2
Toolbar tooltips work when compiled with LibreAutomate, but by default don't work when compiled with Visual Studio.
Reason - missing or incorrect manifest, therefore the process uses the ancient common controls dll. Add to the project a manifest that tells to use common controls version 6. And specify it in project properties.

Also the manifest should set DPI awareness and supported OS.

If you have LibreAutomate installed, you can copy "default.exe.manifest" from its folder. Here its text:
 
Code:
Copy      Help
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
<assemblyIdentity
    version="1.0.0.0"
    processorArchitecture="*"
    name="Company.Product.Filename"
    type="win32"
/>
<description>File Description</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
            language="*"
        />
    </dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
        </requestedPrivileges>
    </security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!-- Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
      <!-- Windows 8.1 -->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
      <!-- Windows 10 -->
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
    </application>
</compatibility>
<asmv3:application>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
        <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
        <dpiAware>True/PM</dpiAware>
    </asmv3:windowsSettings>
    <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2011/WindowsSettings">
        <disableWindowFiltering>true</disableWindowFiltering>
    </asmv3:windowsSettings>
</asmv3:application>
</assembly>
#3
Brilliant. Thanks for your help.
Marked as solved then.


Forum Jump:


Users browsing this thread: 1 Guest(s)