Данная функция пригодится тем, кто работает с другими приложениями, запущенными в Windows. Мне она пригодилась для отправки сообщений и контроля приложения стороннего разработчика.
public const int WM_SYSCOMMAND = 0x0112;
public const int SC_CLOSE = 0xF060;
[DllImport("user32.dll")]
public static extern int FindWindow(
string lpClassName, // class name
string lpWindowName // window name
);
[DllImport("user32.dll")]
public static extern int SendMessage(
int hWnd, // handle to destination window
uint Msg, // message
int wParam, // first message parameter
int lParam // second message parameter
);
[DllImport("user32.dll")]
public static extern int SetForegroundWindow(
int hWnd // handle to window
);
public const int GW_HWNDFIRST = 0;
public const int GW_HWNDLAST = 1;
public const int GW_HWNDNEXT = 2;
public const int GW_HWNDPREV = 3;
public const int GW_OWNER = 4;
public const int GW_CHILD = 5;
public delegate int EnumWindowsProcDelegate(int hWnd, int lParam);
[DllImport("user32")]
public static extern int EnumWindows(EnumWindowsProcDelegate lpEnumFunc, int lParam);
[DllImport("User32.Dll")]
public static extern void GetWindowText(int h, StringBuilder s, int nMaxCount);
[DllImport("user32", EntryPoint = "GetWindowLongA")]
public static extern int GetWindowLongPtr(int hwnd, int nIndex);
[DllImport("user32")]
public static extern int GetParent(int hwnd);
[DllImport("user32")]
public static extern int GetWindow(int hwnd, int wCmd);
[DllImport("user32")]
public static extern int IsWindowVisible(int hwnd);
[DllImport("user32")]
public static extern int GetDesktopWindow();
private void simpleButton2_Click(object sender, EventArgs e)
{
// Получаем дескриптор окна рабочего стола
int nDeshWndHandle = GetDesktopWindow();
// Получаем первое дочернее окно
int nChildHandle = GetWindow(nDeshWndHandle, GW_CHILD);
while (nChildHandle != 0)
{
//Если это дочернее окно то игнорировать.
if (nChildHandle == this.Handle.ToInt32())
{
nChildHandle = GetWindow(nChildHandle, GW_HWNDNEXT);
}
// Получаем только видимые окна
if (IsWindowVisible(nChildHandle) != 0)
{
StringBuilder sbTitle = new StringBuilder(1024);
// Читаем текст заголовка окна и добавляем в listBox
GetWindowText(nChildHandle, sbTitle, sbTitle.Capacity);
String sWinTitle = sbTitle.ToString();
{
if (sWinTitle.Length > 0)
{
listBoxControl1.Items.Add(sWinTitle);
}
}
}
// Переходим к следующему дочернему окну.
nChildHandle = GetWindow(nChildHandle, GW_HWNDNEXT);
}
}
Результат:
0.00 (0%) 0 votes










