2009-09-08 10 views
0

J'utilise le code ci-dessous pour fermer la fenêtre, en recherchant le nom de la fenêtre dans la barre des tâches. Mais dans un cas, ma fenêtre n'apparaîtra pas dans la barre des tâches. Dans ce cas, WM_Close n'a pas pu fermer la fenêtre. Quel est l'autre moyen de le faire en utilisant WM_Close ???Utilisation de WM_Close dans C#

void DaemonTerminamtionHook_KeyPressed(object sender, KeyPressedEventArgs e) 
    { 
     DaemonResult = MessageBox.Show("Are you sure, you want to Terminate Daemon?", "Terminate Daemon", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation); 

     if (DaemonResult == DialogResult.Yes) 
     { 
      //Free the resources of ShellBasics and terminate Daemon here. 
      IntPtr hWnd = FindWindowByCaption(IntPtr.Zero, "DAEMON TAB BAR"); 
      bool ret = CloseWindow(hWnd); 
     } 
    } 

    //WM_Close 
    [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)] 
    static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName); 

    [DllImport("user32.dll", CharSet = CharSet.Auto)] 
    static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); 

    static uint WM_CLOSE = 0x10; 

    static bool CloseWindow(IntPtr hWnd) 
    { 
     SendMessage(hWnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero); 
     return true; 
    } 

Maintenant, en utilisant le code ci-dessous ... Mais obtenir erreur dans

"IntPtr hWnd = PostMessage (IntPtr.Zero, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);" Où indiquer le nom de la fenêtre afin de fermer cela?


void DaemonTerminamtionHook_KeyPressed(object sender, KeyPressedEventArgs e) 
    { 
     DaemonResult = MessageBox.Show("Are you sure, you want to Terminate Daemon?", "Terminate Daemon", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation); 

     if (DaemonResult == DialogResult.Yes) 
     { 

      IntPtr hWnd = PostMessage(IntPtr.Zero, WM_CLOSE, IntPtr.Zero, IntPtr.Zero); 
      bool ret = CloseWindow(hWnd); 
     } 
    } 



    static uint WM_CLOSE = 0x10; 
    [return: MarshalAs(UnmanagedType.Bool)] 
    [DllImport("user32.dll", SetLastError = true)] 
    static extern bool PostMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam); 

    static bool CloseWindow(IntPtr hWnd) 
    { 
     bool returnValue = PostMessage(hWnd, WM_CLOSE, IntPtr.Zero, IntPtr.Zero); 
     if (!returnValue) 
      throw new Win32Exception(Marshal.GetLastWin32Error()); 
     return true; 
    } 

Répondre

1

Edit: Désolé mal interprété votre question. À la place, utilisez FindWindow/FindWindowEx.

+0

@Preet, Merci pour votre soutien. Pouvez-vous me dire comment passer le paramètre pour: void PostMessageSafe (HandleRef hWnd, uint msg, IntPtr wParam, IntPtr lParam) – Anuya

+0

@Preet, où passer le nom de la fenêtre ici? – Anuya

+0

@Preet, s'il vous plaît se référer au code mis à jour en haut, il donne quelques erreurs que les paramètres ne correspondent pas et s'il vous plaît dites-moi où fournir le nom de Windows afin de le fermer. – Anuya

Questions connexes