Окно поверх всех окон - 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"); }
}