:: Не фоксом единым
Process RDP C#
Argon
Автор

Сообщений: 251
Дата регистрации: 06.02.2012
Доброго времени суток!

Столкнулся с проблемой вывода запущенной программы на передний план. Простые файлы .exe потоками высекаются без проблем, а вот с программами запущенными как *.rdp (с сервера) туговато.

например файл мояПрограмма.rdp запускает файл \\myServer\myPath\myProgramm.exe
Process id = 55555 (это к примеру)

второй файл чужаяПрограмма.rdp запускает файл \\myServer\elsePath\elseProgramm.exe
Process id в этом случае занимает место предыдущего сеанса и получает id = 55555

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

Process proc = Process.GetProcessById(знаю ид RDP);
// вывожу на передний план
[DllImport("user32.dll")]
static extern bool SetForegroundWindow(IntPtr hwnd);
// ну и вывод
SetForegroundWindow(proc.MainWindowHandle)

диспетчер задач как то группирует в себе две и более запущенных RDP сесиии, а вот как к ним достучаться пока не могу понять
Ratings: 0 negative/0 positive
Re: Process RDP C#
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
RDP это одна отдельная программа - и то что через неё ты запустил N сеансов не делает эти сеансы отдельными процессами. Это как открыть в ворде 2 документа и надеятся через PID-ы ими поуправлять.
Если так уж надо - ищи сами окна и их уже и выводи на передний план, хотя я и не вижу в этом какого-то особого смысла... Может быть надо просто какой-то менеджер использовать, типа RDCMan - там визуально все сессии в одном окне будут, и переключаться через список можно (равно как и подключаться прямо оттуда можно).


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Process RDP C#
Argon
Автор

Сообщений: 251
Дата регистрации: 06.02.2012
У меня есть написанное приложение со списком софта доступным определенным пользователям, что б не засорять рабочий стол множеством ярлыков. Для управления окнами я использую System.Diagnostics.Process,тем самым блокирую повторный запуск программ, и это прекрасно работало, до введения удаленного запуска(rdp). То что можно найти окно с сеансом, я прекрасно понимаю и нахожу его. Но, как только открывается 2 и более окон, у всех их идентификатор одинаковый... Диспетчер задач хранит все rdp сессии сгруппированными, одна строка и в подробностях есть указатели на все объекты. Но как вычислить уникальные процессы у меня не выходит. Возможно я использую не тот инструмент, но и наши и буржуйские форумы пишут только про System.Diagnostics.Process.....
Ratings: 0 negative/0 positive
Re: Process RDP C#
Argon
Автор

Сообщений: 251
Дата регистрации: 06.02.2012
Глубоко не копал, есть возможность получить список запущенных программ и в отдельном потоке проверять каждые N сек что запущено у пользователя
ссылку прилагаю stackoverflow.com нашел 2 одинаковые программы RDP (для них в конце наименования будет дописано (удаленный или remote)) то покажи сообщение и передай хендлер окна дублера на передний фон.
if (Regex.IsMatch(window.Value, "\\b(удаленный)\\b") || Regex.IsMatch(window.Value, "\\b(remote)\\b")) {
//code here....
//я создаю List<> с intPtr - handle и string для name
var _temp = tRDP.FirstOrDefault(x => x.Name == window.Value); // проверяю наличие записи
if (_temp == null)
{
tRDP.Add(new RDPList
{
Name = window.Value,
handle = window.Key
});
}
else {
MessageBox.Show($"Процесс {window.Value} используется более одного раза", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
SetForegroundWindow(_temp.handle);
}
}



Исправлено 1 раз(а). Последнее : Argon, 26.07.19 10:05
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 4 MikhsR  (Гостей: 3)

© 2000-2024 Fox Club 
Яндекс.Метрика