Какой рейтинг вас больше интересует?
|
Главная / Главные темы / Тэг «schooten»
Мониторинг буфера обмена 2012-10-15 09:02:37
+ развернуть текст сохранённая копия
Обзор
ОС Windows поддерживает список, или цепь, приложений, которые обратились с просьбой получить уведомление, когда данные поступят в буфер обмена. Каждый раз, когда в буфере обмена изменяется данные, первое приложение в этой цепочке получает сообщение - WM_DRAWCLIPBOARD. Приложения могут запросить тип данных в буфере обмена, например RTF, ASCII текст, и так далее. Так как нет управляемых (. NET) API для добавления приложения в цепочку, чтобы получать уведомление об изменении буфера, вы должны использовать Win32 SetClipboardViewer. Вы должны знать некоторые общие правила при использовании этой функции.
• При вызове SetClipboardViewer, вам необходимо пройти дескриптор окна, которое будет получать сообщение WM_DRAWCLIPBOARD. SetClipboardViewer функция возвращает текущее первое приложение в цепочке. Ваше приложение должно хранить в классе членов, потому что каждое приложение которое получает сообщение WM_DRAWCLIPBOARD может отправить то же сообщение к следующему приложению в цепочке (через функцию SendMessage).
• WM_CHANGECBCHAIN. Поскольку каждое приложение, которое обрабатывает WM_DRAWCLIPBOARD, отвечает за отправку этого сообщения к следующему приложению в цепочке, оно также должно знать, когда изменилась цепь. Буфер обмена посылает сообщения WM_CHANGECBCHAIN , когда приложение удалило себя из цепочки.
• При завершении работы необходимо удалить приложение из цепочки. Эта задача решается с помощью Win32ChangeClipboardChain функции, и это может быть сделано в любое время, буфер обмена мониторинга больше не нужен.
Для работы вам понадобится разместить компонент richTextBox. Так же в его свойствах ForeColor указать цвет Black!
Вот код приложения:
IntPtr nextClipboardViewer;
public Form1()
{
InitializeComponent();
nextClipboardViewer = (IntPtr)SetClipboardViewer((int)
this.Handle);
}
[DllImport("User32.dll")]
protected static extern int
SetClipboardViewer(int hWndNewViewer);
[DllImport("User32.dll", CharSet=CharSet.Auto)]
public static extern bool
ChangeClipboardChain(IntPtr hWndRemove,
IntPtr hWndNewNext);
[DllImport("user32.dll", CharSet=CharSet.Auto)]
public static extern int SendMessage(IntPtr hwnd,
int wMsg,
IntPtr wParam,
IntPtr lParam);
protected override void WndProc(ref System.Windows.Forms.Message m)
{
const int WM_DRAWCLIPBOARD = 0x308;
const int WM_CHANGECBCHAIN = 0x030D;
switch (m.Msg)
{
case WM_DRAWCLIPBOARD:
DisplayClipboardData();
SendMessage(nextClipboardViewer, m.Msg, m.WParam,
m.LParam);
break;
case WM_CHANGECBCHAIN:
if (m.WParam == nextClipboardViewer)
nextClipboardViewer = m.LParam;
else
SendMessage(nextClipboardViewer, m.Msg, m.WParam,
m.LParam);
break;
default:
base.WndProc(ref m);
break;
}
}
void DisplayClipboardData()
{
try
{
IDataObject iData = new DataObject();
iData = Clipboard.GetDataObject();
if (iData.GetDataPresent(DataFormats.Rtf))
richTextBox1.Rtf = (string)iData.GetData(DataFormats.Rtf);
else if (iData.GetDataPresent(DataFormats.Text))
richTextBox1.Text = (string)iData.GetData(DataFormats.Text);
else
richTextBox1.Text = "[Clipboard data is not RTF or ASCII Text]";
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
Так же вам необходимо в Form1.Designer.cs заменить функцию Dispose:
С:
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
НА:
protected override void Dispose(bool disposing)
{
ChangeClipboardChain(this.Handle, nextClipboardViewer);
if (disposing)
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose(disposing);
}
Скриншот получившегося приложения:
Тэги: application, form, system, window
System of a Down и друзья 2012-10-05 18:14:37
Дарон на Хэллоуин. Шаво с менеджером группы Бено. В самолете. Шоу в Чикаго. ...
+ развернуть текст сохранённая копия
Дарон на Хэллоуин. Шаво с менеджером группы Бено. В самолете. Шоу в Чикаго. Сын Шаво. Шаво с сыном.
Тэги: down, system, фото
Радикальное ускорение работы NetApp System Manager 2.x 2012-10-05 14:38:02
Если вы, как и я ранее, мучаетесь от совершенно запредельно ннизкой скорости работы NetApp System ...
+ развернуть текст сохранённая копия
Если вы, как и я ранее, мучаетесь от совершенно запредельно ннизкой скорости работы NetApp System Manager 2.x, основного ныне инструмента администрирования NetApp, то радикально ускорить его поможет вам способ, порекомендованный в нашем форуме (если вы еще не там – настоятельно приглашаю, ссылка в шапке блога): По видимому причина тормозов – в крайне кривом разрешении хостнейма в IP в Java при работе Read More......(read more)
Тэги: howto, manager, netapp, system, trick
О развитии проекта Марсоход 2012-10-03 20:37:00
+ развернуть текст сохранённая копия
Рассказ о возможностях новой платы разработчика Марсоход2
Тэги: altera, amber, arm, blog!, cpld, fpga, soc, system-on-chip, марсоход, плата, плис
Free CSS Framework for Responsive Webdesign 2012-09-11 17:25:53
Responsive web design continues to become more widely practiced. Because of that, as web developers ...
+ развернуть текст сохранённая копия
Responsive web design continues to become more widely practiced. Because of that, as web developers and designers, I have more tools and resources that make it easier for us to create responsive web...
[[ Das ist nur ein Auszug. Besuchen Sie meine Webseite, um Links, weitere Inhalte und mehr zu erhalten! ]]
Тэги: css, css3, design, framework, grid, less, responsive, system, titan, web
Главная / Главные темы / Тэг «schooten»
|
Взлеты Топ 5
Падения Топ 5
|