2009-08-13 2 views
2

Ich versuche, die Transparenz aller Fenster zu setzen. Ich habe folgenden Code.kann ich Transparenz eines Fensters nicht durch sein Handle in C# setzen?

public partial class Form1 : Form 
{ 
    [DllImport("user32.dll")] 
    static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong); 

    [DllImport("user32.dll")] 
    static extern int GetWindowLong(IntPtr hWnd, int nIndex); 

    [DllImport("user32.dll")] 
    static extern bool SetLayeredWindowAttributes(IntPtr hwnd, uint crKey, byte bAlpha, uint dwFlags); 

    public const int GWL_EXSTYLE = -20; 
    public const int WS_EX_LAYERED = 0x80000; 
    public const int LWA_ALPHA = 0x2; 

    public Form1() 
    { 
     InitializeComponent(); 
     this.Load += new EventHandler(Form1_Load); 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 
     Process[] processlist = Process.GetProcesses(); 

     foreach (Process theprocess in processlist) 
     { 
      SetWindowLong(theprocess.Handle, GWL_EXSTYLE, 
       GetWindowLong(theprocess.Handle, GWL_EXSTYLE)^WS_EX_LAYERED); 
      SetLayeredWindowAttributes(theprocess.Handle, 0, 128, LWA_ALPHA); 
     } 

    } 
} 

nichts geschieht, wenn ich den Code ausführe.

Was ist los ??

Antwort

5

SetWindowLong einen Fenstergriff (hWnd) nimmt, aber Sie‘ Übergeben Sie stattdessen einen Prozess behandeln. alle Instanzen ändern

zu

theProcess.MainWindowHandle 

Danach Wechsel arbeitete er auf der Windows XP-Maschine, die ich es getestet. Jetzt muss ich den Code ändern, um die Fenster wieder normal zu machen;) Zum Glück war das Visual Studio 2010 Fenster nicht betroffen.

+0

Genau das, was ich wollte !!! Vielen Dank – Moon

1

Haben Sie versucht Einstellung the Opacity?

this.Opacity = 0.50; 
+2

Das würde nur die Deckkraft für das aktuelle Fenster festlegen, was nicht das ist, was er zu erreichen versucht. – Thorarin

2

Dieser Teil des Codes:     ^ WS_EX_LAYERED   die WS_EX_LAYERED Bit Flips,

Ich glaube, Sie wollen:     | WS_EX_LAYERED

Verwandte Themen