Workaround: Clipboard History icon in the Taskbar

%3CLINGO-SUB%20id%3D%22lingo-sub-2156115%22%20slang%3D%22en-US%22%3EWorkaround%3A%20Clipboard%20History%20icon%20in%20the%20Taskbar%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2156115%22%20slang%3D%22en-US%22%3E%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22Spelunky_0-1614011147938.png%22%20style%3D%22width%3A%20999px%3B%22%3E%3CIMG%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F256518i700F686CBE595E1D%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22Spelunky_0-1614011147938.png%22%20alt%3D%22Spelunky_0-1614011147938.png%22%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EA%20video%20showing%20how%20the%20feature%20works%20can%20be%20seen%20here%3A%3C%2FP%3E%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fdrive.google.com%2Ffile%2Fd%2F1PTTP0SiFecaN2l4zne3LqS2i14JulXhk%2Fview%3Fusp%3Dsharing%22%20target%3D%22_self%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3EDownload%20at%20Google%20Drive%3C%2FA%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EIf%20you%20are%20interested%20in%20testing%20the%20software%2C%20I%20made%20it%20available%20for%20download%20on%20Google%20Drive%3A%3C%2FP%3E%3CP%3E%3CA%20href%3D%22https%3A%2F%2Fdrive.google.com%2Ffile%2Fd%2F1ggdz1Fstql3AWlc-kIOVxE7qusR2-VQa%2Fview%3Fusp%3Dsharing%22%20target%3D%22_self%22%20rel%3D%22nofollow%20noopener%20noreferrer%22%3EDownload%20the%20Software%20(Google%20Drive)%3C%2FA%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EThis%20is%20the%20code%3A%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-csharp%22%3E%3CCODE%3Eusing%20System%3B%0Ausing%20System.Runtime.InteropServices%3B%0Ausing%20System.Windows.Forms%3B%0A%0Anamespace%20ClipboardHistory%0A%7B%0A%20%20%20%20static%20class%20Program%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%5BDllImport(%22user32.dll%22)%5D%0A%0A%20%20%20%20%20%20%20%20private%20static%20extern%20void%20keybd_event(byte%20virtualKey%2C%20byte%20bScan%2C%20int%20dwFlags%2C%20int%20dwExtraInfo)%3B%0A%20%20%20%20%20%20%20%20private%20const%20int%20KEYEVENTF_EXTENDEDKEY%20%3D%201%3B%0A%20%20%20%20%20%20%20%20private%20const%20int%20KEYEVENTF_KEYUP%20%3D%202%3B%0A%20%20%20%20%20%20%20%20public%20static%20void%20DoKeyDown(Keys%20virtualKey)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20keybd_event((byte)virtualKey%2C%200%2C%20KEYEVENTF_EXTENDEDKEY%2C%200)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20public%20static%20void%20DoKeyUp(Keys%20virtualKey)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20keybd_event((byte)virtualKey%2C%200%2C%20KEYEVENTF_EXTENDEDKEY%20%7C%20KEYEVENTF_KEYUP%2C%200)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%0A%0A%20%20%20%20%20%20%20%20static%20void%20Main()%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20try%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20SendKeys.SendWait(%22%25%7BTab%7D%22)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20string%5B%5D%20args%20%3D%20Environment.GetCommandLineArgs()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20System.Threading.Thread.Sleep(Convert.ToInt32(args%5B1%5D))%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20DoKeyDown(Keys.LWin)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20DoKeyDown(Keys.V)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20DoKeyUp(Keys.LWin)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20DoKeyUp(Keys.V)%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Application.Exit()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20catch%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20MessageBox.Show(%22An%20error%20occurred%20and%20was%20handled%22%2C%20%22Warning%22%2C%20MessageBoxButtons.OK%2C%20MessageBoxIcon.Error)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Application.Exit()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%20%20%20%20%0A%20%20%20%20%7D%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EThe%20zip%20has%203%20files%20into%20a%20folder%3A%3C%2FP%3E%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22Spelunky_0-1614015963503.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3CIMG%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F256600i03FCF3BD536E6A23%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22Spelunky_0-1614015963503.png%22%20alt%3D%22Spelunky_0-1614015963503.png%22%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3EUnzip%20the%20folder%20anywhere%20in%20your%20computer.%3C%2FP%3E%3CP%3EDrag%20the%20shortcut%20to%20your%20taskbar.%20The%20shortcut%20already%20has%20an%20image%2C%20but%20if%20you%20don't%20like%20the%20one%20I%20chose%2C%20just%20download%20any%20other%20image%20in%20the%20ico%20format%20and%20change%20the%20shortcut%20image.%3C%2FP%3E%3CP%3EAfter%20the%20shortcut%20is%20on%20the%20taskbar%2C%20right%20click%20on%20it%20and%20choose%20Properties%3A%3C%2FP%3E%3CDIV%20class%3D%22mceNonEditable%20lia-copypaste-placeholder%22%3E%26nbsp%3B%3C%2FDIV%3E%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22Spelunky_3-1614016879878.png%22%20style%3D%22width%3A%20320px%3B%22%3E%3CIMG%20src%3D%22https%3A%2F%2Ftechcommunity.microsoft.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F256612i930622C785EE4AA3%2Fimage-dimensions%2F320x406%3Fv%3Dv2%22%20width%3D%22320%22%20height%3D%22406%22%20role%3D%22button%22%20title%3D%22Spelunky_3-1614016879878.png%22%20alt%3D%22Spelunky_3-1614016879878.png%22%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%3EThen%20set%20a%20value%20in%20milliseconds%20at%20the%20end%20of%20the%20command%20line.%20For%20me%2C%20with%20my%20notebook%20settings%2C%2015%20milliseconds%20is%20enough%2C%20but%20depending%20on%20your%20computer%E2%80%99s%20settings%20(whether%20it%E2%80%99s%20less%20or%20more%20powerful)%20you%20may%20need%20to%20increase%20this%20value%20to%2020%2C%2050%2C%20100%20etc.%20(any%20value%20can%20be%20entered%2C%20remembering%20that%201000%20milliseconds%20is%20equal%20to%201%20second).%20This%20is%20necessary%20because%20Clipboard%20History%20is%20not%20beeing%20calling%20natively%20by%20Windows%2C%20so%20there%20is%20a%20certain%20delay%20that%20can%20cause%20Clipboard%20History%20to%20not%20be%20displayed%20correctly%20when%20it%20is%20run%20with%20a%20workaround%20like%20this.%3C%2FP%3E%3C%2FLINGO-BODY%3E
Deleted
Not applicable

Spelunky_0-1614011147938.png

 

A video showing how the feature works can be seen here:

Download at Google Drive 

 

If you are interested in testing the software, I made it available for download on Google Drive:

Download the Software (Google Drive) 

 

This is the code:

 

 

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace ClipboardHistory
{
    static class Program
    {
        [DllImport("user32.dll")]

        private static extern void keybd_event(byte virtualKey, byte bScan, int dwFlags, int dwExtraInfo);
        private const int KEYEVENTF_EXTENDEDKEY = 1;
        private const int KEYEVENTF_KEYUP = 2;
        public static void DoKeyDown(Keys virtualKey)
        {
            keybd_event((byte)virtualKey, 0, KEYEVENTF_EXTENDEDKEY, 0);
        }

        public static void DoKeyUp(Keys virtualKey)
        {
            keybd_event((byte)virtualKey, 0, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
        }



        static void Main()
        {
            try
            {
                SendKeys.SendWait("%{Tab}");

                string[] args = Environment.GetCommandLineArgs();
                System.Threading.Thread.Sleep(Convert.ToInt32(args[1]));

                DoKeyDown(Keys.LWin);
                DoKeyDown(Keys.V);
                DoKeyUp(Keys.LWin);
                DoKeyUp(Keys.V);

                Application.Exit();
            }            
            catch
            {
                MessageBox.Show("An error occurred and was handled", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Error);
                Application.Exit();
            }
        }    
    }
}

 

 

 

The zip has 3 files into a folder:

Spelunky_0-1614015963503.png

 

Unzip the folder anywhere in your computer.

Drag the shortcut to your taskbar. The shortcut already has an image, but if you don't like the one I chose, just download any other image in the ico format and change the shortcut image.

After the shortcut is on the taskbar, right click on it and choose Properties:

 

Spelunky_3-1614016879878.png

Then set a value in milliseconds at the end of the command line. For me, with my notebook settings, 15 milliseconds is enough, but depending on your computer’s settings (whether it’s less or more powerful) you may need to increase this value to 20, 50, 100 etc. (any value can be entered, remembering that 1000 milliseconds is equal to 1 second). This is necessary because Clipboard History is not beeing calling natively by Windows, so there is a certain delay that can cause Clipboard History to not be displayed correctly when it is run with a workaround like this.

0 Replies