Окно поверх всех окон - C#
Формулировка задачи:
Пишу программу против винлокеров добавил свой диспетчер задач, разблокирование ключей реестра.Но есть одна проблема окно просто не работает так-как винлокер поверх этого окна и я не могу переключиться поэтому мне надо сделать окно поверх всех окон.
P.S TopMost = true не работает.Для тестирования использовал приватный винлокер на delphi.Помогите плиз.
upppppppp
upuupupuupp
Решение задачи: «Окно поверх всех окон»
textual
Листинг программы
static class Data { public static IntPtr hdw1 { get; set; } } public class WindowWrapper { [DllImport("user32.dll", SetLastError = true)] static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount); [DllImport("user32.dll", SetLastError = true)] static extern int GetWindowTextLength(IntPtr hWnd); [DllImport("user32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] static extern bool IsWindowVisible(IntPtr hWnd); public IntPtr Handle { get; private set; } public string Title { get { return GetWindowText(Handle); } } public bool IsVisible { get { return IsWindowVisible(Handle); } } public WindowWrapper(IntPtr hWnd) { Handle = hWnd; } string GetWindowText(IntPtr hWnd) { int len = GetWindowTextLength(hWnd) + 1; StringBuilder sb = new StringBuilder(len); len = GetWindowText(hWnd, sb, len); return sb.ToString(0, len); } public override string ToString() { var title = Title; return string.IsNullOrEmpty(title) ? "HWND: 0x" + Handle.ToString("X") : title; } } delegate bool EnumWindowsProc(IntPtr hWnd, IntPtr lParam); [DllImport("user32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] static extern bool EnumWindows(EnumWindowsProc lpEnumFunc, IntPtr lParam); [DllImport("user32.dll", SetLastError = true)] private static extern bool SetForegroundWindow(IntPtr hWnd); [DllImport("user32.dll", SetLastError = true)] static extern bool ShowWindow(IntPtr hWnd, uint nCmdShow); const uint SW_SHOWNORMAL = 0x1; const uint SW_HIDE = 0x0; private void RefreshWindowList1() { listBox1.Items.Clear(); EnumWindows((hWnd, lParam) => { var wnd = new WindowWrapper(hWnd); if (!wnd.IsVisible && !string.IsNullOrEmpty(wnd.Title)) { listBox1.Items.Add(wnd); } return true; }, IntPtr.Zero); } private void btnSearch_Click(object sender, EventArgs e) { RefreshWindowList1(); } private void listBox1_MouseClick(object sender, MouseEventArgs e) { Data.hdw1 = (listBox1.SelectedItem as WindowWrapper).Handle; } private void button1_Click(object sender, EventArgs e) { try { ShowWindow(Data.hdw1, SW_HIDE); RefreshWindowList1(); } catch { MessageBox.Show("Окно не найдено", "Error"); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д