|
コメントありがとうございます。
テレワーク中で気軽に他マシンで試せない状況なのですが、キャッシュの件もごもっともと思い、
新規プロジェクトからミニマムコードで試してみましたが、結果変わらずです・・・
以下の再現手順で行っていますが、何かお気づきの事がありましたら、アドバイスお願いします。
因みに、WindowsFormでUWPのAPIを利用する方法は、リンクのサイトを参考にしました。
https://codezine.jp/article/detail/10654?p=3
1.Visual Studio2019で新規プロジェクトを作成(.NET Framework 4.7.2)
2.参照設定で、以下の2ファイルを追加
C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.18362.0\Windows.winmd
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll
3.Windows.winmdのプロパティで「ローカルにコピー」をfalse
4.Resources.resxをダブルクリック→リソースの追加から新しいアイコンの追加(デフォルトのままでも標準exeアイコンと異なるのでそれを利用)
5.プロジェクトのプロパティで「アイコンとマニフェスト」のアイコンで4のアイコンを指定(Resources\Icon1.ico)
6.フォームにボタンを配置し、クリックイベントを作成
7.下記コードをForm1.csに記述して実行して、ボタンクリックすると、標準exeアイコンでタイムラインが作成されます。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Windows.ApplicationModel.UserActivities;
namespace TimeLineTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private static UserActivitySession gActivitySession = null; //現在のアクティビティセッション
private async void button1_Click(object sender, EventArgs e)
{
string DummyId = @"C:\test.txt";
// UserActivityChannel から UserActivity を生成する (登録済みなら取得になる)
UserActivityChannel MyActivityChannel = UserActivityChannel.GetDefault();
UserActivity MyActivity = await MyActivityChannel.GetOrCreateUserActivityAsync(DummyId);
// タイムラインから呼び出されるときのアクティベーション URI をセット
// (ただし、登録済みのアクティビティではセット済み。変更不要なのでセットしない)
if (MyActivity.State != UserActivityState.Published)
{
MyActivity.ActivationUri = new Uri(DummyId);
}
// タイムラインに表示される文字列をセット (タイムライン上での検索対象)
// (これも以前と同じでよければ、登録済みのアクティビティではセット不要)
MyActivity.VisualElements.DisplayText = "TestDisplayText";
MyActivity.VisualElements.AttributionDisplayText = "TestAttributionDisplayText";
MyActivity.VisualElements.Description = "Description";
// UserActivity を保存
await MyActivity.SaveAsync();
// 以前の gActivitySession があるなら破棄して、新しいセッションを保持
gActivitySession?.Dispose();
gActivitySession = MyActivity.CreateSession();
}
}
}
|