c # - Gå tilbage til startmenuen efter at have lukket win-formularprogrammet i Windows 10-tablet-tilstand

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har en winform-applikation (C #), som jeg kører på en Windows-tablet, der kører i tablet-tilstand. Når jeg lukker programmet, går skærmen til skrivebordet, som i tablet-tilstand er bare proceslinjen med en blank skærm. Det er først, indtil du klikker på skærmen, at det trækker op i startmenuen.


Dette ser ud til at være i overensstemmelse med eventuelle winform applikationer, der kører i tablet-tilstand af en eller anden grund, men uanset om jeg gerne vil finde en måde at blot hente startmenuen efter at have lukket applikationen.


Jeg har forsøgt at simulere et museklik, efter at programmet lukker med opkald (kredit til https://www.gamedev.net/topic/321029-how-to-imulate-a-mouse-click-in-c/): [[[3]


[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse\_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);

private const int MOUSEEVENTF\_LEFTDOWN = 0x02;    

private void Form1\_FormClosed(object sender, FormClosedEventArgs e)
{
    mouse\_event(MOUSEEVENTF\_LEFTDOWN | MOUSEEVENTF\_LEFTUP, X, Y, 0, 0);
}


men det virker ikke. Jeg har forsøgt at spille med indstillingerne på proceslinjen for at se om det kan løses via Windows uden held.


Er der nogen, der ved, hvordan man blot skal hente startmenuen efter at have lukket en winform-applikation efter kode eller ved indstillinger?

Bedste reference


Jeg har løst problemet med hjælp fra dette indlæg: SendKeys.Send og Windows Key


Det ligner snarere end at sende et museklik, sende en nøgle nede efterfulgt af en nøgle op af LWin-tasten gør tricket:


    [DllImport("user32.dll")]
    private static extern void keybd\_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

    private const int KEYEVENTF\_EXTENDEDKEY = 1;
    private const int KEYEVENTF\_KEYUP = 2;


    private void Form1\_FormClosed(object sender, FormClosedEventArgs e)
    {
         keybd\_event((byte)Keys.LWin, 0, KEYEVENTF\_EXTENDEDKEY, 0);
         keybd\_event((byte)Keys.LWin, 0, KEYEVENTF\_EXTENDEDKEY | KEYEVENTF\_KEYUP, 0);
    }


Selvfølgelig har denne kode brug for nogle ekstra checks for at sikre, at vi faktisk er i tablet-tilstand.