前提・実現したいこと
画像のもどき辞典3を他の言葉に変えたいのですが、どうすればいいでしょうか?
ビジュアルスタジオで出力したexeファイルのツールチップの表示です。
補足情報(FW/ツールのバージョンなど)
Microsoft Visual Studio Community 2019
Version 16.8.3
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
「C# .NET5.0」でのやり方を「C# .NET Framework4.8」でやる方法を別解として書いておきます。
- ソリューションエクスプローラーのプロジェクトを右クリック>プロパティ
- アセンブリ名を変更(下図では「aiueo」に変更)
- アセンブリ情報ボタンを押して、タイトルを変更(下図では「何でもOK」に変更)
- リビルドして、EXEをタスクバーにピン留めすると「何でもOK」とツールチップに表示される
実行中のツールチップについての追記
実行中のツールチップが制御できないじゃんって事でちょっと調べました。
※Microsoft.WindowsAPICodePack-Shellを使えばプログレスバーやアイコンのオーバーレイなんかはできるんだけど、何故かツールチップは無い
- 下記コードを「TaskbarAPI.cs」みたいな感じで追加(コピペ元)
C#
1using System; 2using System.Runtime.InteropServices; 3 4namespace TeraTaskBarTooltip { 5 internal enum HResult { 6 Ok = 0x0000 7 8 // Add more constants here, if necessary 9 } 10 11 public enum TaskbarProgressBarStatus { 12 NoProgress = 0, 13 Indeterminate = 0x1, 14 Normal = 0x2, 15 Error = 0x4, 16 Paused = 0x8 17 } 18 19 internal enum ThumbButtonMask { 20 Bitmap = 0x1, 21 Icon = 0x2, 22 Tooltip = 0x4, 23 THB_FLAGS = 0x8 24 } 25 26 [Flags] 27 internal enum ThumbButtonOptions { 28 Enabled = 0x00000000, 29 Disabled = 0x00000001, 30 DismissOnClick = 0x00000002, 31 NoBackground = 0x00000004, 32 Hidden = 0x00000008, 33 NonInteractive = 0x00000010 34 } 35 36 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] 37 internal struct ThumbButton { 38 /// 39 /// WPARAM value for a THUMBBUTTON being clicked. 40 /// 41 internal const int Clicked = 0x1800; 42 43 [MarshalAs(UnmanagedType.U4)] 44 internal ThumbButtonMask Mask; 45 internal uint Id; 46 internal uint Bitmap; 47 internal IntPtr Icon; 48 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] 49 internal string Tip; 50 [MarshalAs(UnmanagedType.U4)] 51 internal ThumbButtonOptions Flags; 52 } 53 54 internal enum SetTabPropertiesOption { 55 None = 0x0, 56 UseAppThumbnailAlways = 0x1, 57 UseAppThumbnailWhenActive = 0x2, 58 UseAppPeekAlways = 0x4, 59 UseAppPeekWhenActive = 0x8 60 } 61 62 // using System.Runtime.InteropServices 63 [ComImportAttribute()] 64 [GuidAttribute("c43dc798-95d1-4bea-9030-bb99e2983a1a")] 65 [InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)] 66 internal interface ITaskbarList4 { 67 // ITaskbarList 68 [PreserveSig] 69 void HrInit(); 70 [PreserveSig] 71 void AddTab(IntPtr hwnd); 72 [PreserveSig] 73 void DeleteTab(IntPtr hwnd); 74 [PreserveSig] 75 void ActivateTab(IntPtr hwnd); 76 [PreserveSig] 77 void SetActiveAlt(IntPtr hwnd); 78 79 // ITaskbarList2 80 [PreserveSig] 81 void MarkFullscreenWindow( 82 IntPtr hwnd, 83 [MarshalAs(UnmanagedType.Bool)] bool fFullscreen); 84 85 // ITaskbarList3 86 [PreserveSig] 87 void SetProgressValue(IntPtr hwnd, UInt64 ullCompleted, UInt64 ullTotal); 88 [PreserveSig] 89 void SetProgressState(IntPtr hwnd, TaskbarProgressBarStatus tbpFlags); 90 [PreserveSig] 91 void RegisterTab(IntPtr hwndTab, IntPtr hwndMDI); 92 [PreserveSig] 93 void UnregisterTab(IntPtr hwndTab); 94 [PreserveSig] 95 void SetTabOrder(IntPtr hwndTab, IntPtr hwndInsertBefore); 96 [PreserveSig] 97 void SetTabActive(IntPtr hwndTab, IntPtr hwndInsertBefore, uint dwReserved); 98 [PreserveSig] 99 HResult ThumbBarAddButtons( 100 IntPtr hwnd, 101 uint cButtons, 102 [MarshalAs(UnmanagedType.LPArray)] ThumbButton[] pButtons); 103 [PreserveSig] 104 HResult ThumbBarUpdateButtons( 105 IntPtr hwnd, 106 uint cButtons, 107 [MarshalAs(UnmanagedType.LPArray)] ThumbButton[] pButtons); 108 [PreserveSig] 109 void ThumbBarSetImageList(IntPtr hwnd, IntPtr himl); 110 [PreserveSig] 111 void SetOverlayIcon( 112 IntPtr hwnd, 113 IntPtr hIcon, 114 [MarshalAs(UnmanagedType.LPWStr)] string pszDescription); 115 [PreserveSig] 116 void SetThumbnailTooltip( 117 IntPtr hwnd, 118 [MarshalAs(UnmanagedType.LPWStr)] string pszTip); 119 [PreserveSig] 120 void SetThumbnailClip( 121 IntPtr hwnd, 122 IntPtr prcClip); 123 124 // ITaskbarList4 125 void SetTabProperties(IntPtr hwndTab, SetTabPropertiesOption stpFlags); 126 } 127 128 [GuidAttribute("56FDF344-FD6D-11d0-958A-006097C9A090")] 129 [ClassInterfaceAttribute(ClassInterfaceType.None)] 130 [ComImportAttribute()] 131 internal class CTaskbarList { } 132} 133
- 使い方(下記はコンソールアプリケーション)
C#
1using System; 2using System.Diagnostics; 3 4namespace TeraTaskBarTooltip { 5 class Program { 6 private static ITaskbarList4 _taskbarList; 7 static void Main(string[] args) { 8 _taskbarList= (ITaskbarList4)new CTaskbarList(); 9 _taskbarList.HrInit(); 10 11 _taskbarList.SetThumbnailTooltip(Process.GetCurrentProcess().MainWindowHandle, "何でも\nOK"); 12 13 Console.WriteLine("aiueo"); 14 Console.Read(); 15 } 16 } 17}
投稿2021/06/23 15:08
編集2021/06/24 15:44総合スコア437
0
ちょっと理由はわからないのですが、一応できたので回答として書いておきます。
※ここに記載するのは「C# .NET5.0」のやり方ですが、他の環境でも似たような感じじゃないかと思います。
- .csprojを編集
XML
1 <PropertyGroup> 2 … 3 <GenerateAssemblyTitleAttribute>false</GenerateAssemblyTitleAttribute> 4 </PropertyGroup>
- AssemblyInfo.csを追加してAssemblyTitleAttributeを設定
※.csprojで設定できないの?って思ったけどやり方がわからなかった
※これはコピペじゃなく、プロジェクト>追加>新しい項目>アセンブリ情報ファイルで作った奴にAssemblyTitle部分をコピペする感じで。
C#
1using System.Reflection; 2using System.Runtime.InteropServices; 3… 4[assembly: AssemblyTitle("何でもOK")]
- アセンブリ名をデフォルトの物から変更(これが謎。プロジェクト名と同じじゃダメ?)
これはEXEファイル名を直接でも、Visual Studioでいじっても良いのですが、変更する必要がある
変更しない場合はデフォルトのEXE名が優先されてツールチップに表示される
- この状態でタスクバーにピン留めするとAssemblyTitleの内容がツールチップに表示される
投稿2021/06/20 11:44
総合スコア437
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。