Я думаю, что необходимо будет использовать некоторый p/invoke:
[DllImport("User32.dll", CharSet=CharSet.Auto)]
public static extern IntPtr SetClipboardViewer(IntPtr hWndNewViewer);
Видят эта статья о том, как настроить монитор буфера обмена в c#
В основном, Вы регистрируете свое приложение как программу просмотра буфера обмена с помощью
_ClipboardViewerNext = SetClipboardViewer(this.Handle);
, и затем Вы получите эти WM_DRAWCLIPBOARD
сообщение, которое можно обработать путем переопределения WndProc
:
protected override void WndProc(ref Message m)
{
switch ((Win32.Msgs)m.Msg)
{
case Win32.Msgs.WM_DRAWCLIPBOARD:
// Handle clipboard changed
break;
// ...
}
}
(существует больше, чтобы быть сделанным; передающие вещи вдоль цепочки буфера обмена и нерегистрации Вашего представления, но можно получить это от статья )
Вы можете проверить это с помощью возвращаемого значения, которое дает вам ssh:
$ ssh -q user@downhost exit
$ echo $?
255
$ ssh -q user@uphost exit
$ echo $?
0
РЕДАКТИРОВАТЬ: Другой подход - использовать nmap (вам не нужны ключи или логин):
$ a=`nmap uphost -PN -p ssh | grep open`
$ b=`nmap downhost -PN -p ssh | grep open`
$ echo $a
22/tcp open ssh
$ echo $b
(empty string)
Но вы сообщение необходимо ввести с помощью команды grep (Nmap не использует возвращаемое значение, чтобы показать, был ли порт отфильтрован, закрыт или открыт).
EDIT2:
Если вас интересует фактическое состояние ssh-порта, вы можете заменить grep open
на egrep 'open | closed | filter'
:
$ nmap host -PN -p ssh | egrep 'open|closed|filtered'
Просто для завершения.
Мне кажется, вы пытаетесь решить не ту проблему. Разве вы не должны попытаться сделать демонов ssh более стабильными? Попробуйте запустить что-то вроде monit , которое проверит, запущен ли демон, и перезапустит его, если это не так (у вас будет время найти корень проблемы, стоящей за выключением sshd). Или с сетевым сервисом проблемы? Попробуйте посмотреть man ifup
. Whole Damn Thing просто хочет закрыть тебя? Что ж, это более серьезная проблема ... попробуйте просмотреть свои журналы (начните с системного журнала), чтобы найти сбои оборудования или службы, которые выключают ваш бокс (может быть, монитор температуры?).
Попробуйте:
echo quit | telnet IP 22 2>/dev/null | grep Connected