Une meilleure option consiste à utiliser App Services.
Un service d'application peut vous permettre de communiquer entre deux applications. Heureusement, il existe une extension UWP pour les applications de bureau qui peut vous aider à consommer le service d'application dans votre projet win32. Voici les étapes.
1. Installez UwpDesktop dans votre application Win32
Install-Package UwpDesktop
2. Créer un point de service App dans votre application Win32
private async void btnConfirm_Click(object sender, EventArgs e)
{
AppServiceConnection connection = new AppServiceConnection();
connection.AppServiceName = "CommunicationService";
connection.PackageFamilyName = Windows.ApplicationModel.Package.Current.Id.FamilyName;
var result = await connection.OpenAsync();
if (result == AppServiceConnectionStatus.Success)
{
ValueSet valueSet = new ValueSet();
valueSet.Add("name", txtName.Text);
var response = await connection.SendMessageAsync(valueSet);
if (response.Status == AppServiceResponseStatus.Success)
{
string responseMessage = response.Message["response"].ToString();
if (responseMessage == "success")
{
this.Hide();
}
}
}
}
Si votre fichier .exe fait partie du Projet UWP, votre Package.Current.Id.FamilyName
doit rediriger vers le PFN de l'UWP.
3. Créer de l'autre côté du canal dans l'application UWP
maintenant créer un service d'applications de base dans votre application UWP
AppServiceConnection connection = new AppServiceConnection();
connection.AppServiceName = "CommunicationService";
connection.PackageFamilyName = Windows.ApplicationModel.Package.Current.Id.FamilyName;
connection.RequestReceived += Connection_RequestReceived;
var result = await connection.OpenAsync();
4. demande de connexion poignée
Enfin, vous devez gérer la connexion entrante dans Connection_RequestReceived
private async void Connection_RequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args)
{
var deferral = args.GetDeferral();
string name = args.Request.Message["name"].ToString();
Result.Text = $"Hello {name}";
ValueSet valueSet = new ValueSet();
valueSet.Add("response", "success");
await args.Request.SendResponseAsync(valueSet);
deferral.Complete();
}
Bien que nous retournions uniquement valueSet
avec un seul élément, vous pouvez inclure d'autres éléments tels que des instructions ou des paramètres spécifiques dans le valueSet
. Ceux-ci seront disponibles pour vous en résultat au côté Win32.
Ceci est un exemple très simple réduite de blog MSDN officiel par l'équipe du centenaire trouvé ici:
https://blogs.msdn.microsoft.com/appconsult/2016/12/19/desktop-bridge-the-migrate-phase-invoking-a-win32-process-from-a-uwp-app/
Pour le rendre plus robuste, vous pouvez vous assurer que vous créez la connexion de service de l'application à la fin UWP seulement une fois que votre application Win32 est en place en utilisant AppServiceTriggerDetails
comme dans l'article de blog
Vous devrez également déclarer le service d'application dans Package.appxmanifest fichier
<Extensions>
<uap:Extension Category="windows.appService">
<uap:AppService Name="CommunicationService" />
</uap:Extension>
<desktop:Extension Category="windows.fullTrustProcess" Executable="Migrate.WindowsForms.exe" />
</Extensions>
Vous pouvez trouver l'échantillon du billet de blog ici:
https://github.com/qmatteoq/DesktopBridge/tree/master/6.%20Migrate
Bonne programmation. :)
accepté comme réponse car il se concentre sur ma question. – GIANGPZO