я не могу установить прозрачность окна по его дескриптору в С#?

я пытаюсь установить прозрачность всех окон. У меня есть следующий код.

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);
        }

    }
}

ничего не происходит, когда я выполняю код.

Что случилось??


person Moon    schedule 13.08.2009    source источник


Ответы (3)


SetWindowLong принимает дескриптор окна (hWnd), но вместо этого вы передаете ему дескриптор процесса. Изменить все экземпляры

theprocess.Handle

to

theProcess.MainWindowHandle

После этого он работал на машине с Windows XP, на которой я его тестировал. Теперь мне придется изменить код, чтобы вернуть окна в нормальное состояние ;) К счастью, окно Visual Studio 2010 не пострадало.

person Thorarin    schedule 13.08.2009

Эта часть вашего кода: ^ WS_EX_LAYERED переворачивает бит WS_EX_LAYERED,

Я думаю, ты хочешь: | WS_EX_LAYERED

person Henk Holterman    schedule 13.08.2009

Вы пытались установить непрозрачность ?

this.Opacity = 0.50;
person Sam Harwell    schedule 13.08.2009
comment
Это установит непрозрачность только для текущего окна, а это не то, чего он пытается добиться. - person Thorarin; 13.08.2009