Какой рейтинг вас больше интересует?
|
Главная / Главные темы / Тэг «application»
Привязка окна приложения к краям экрана или блокируем перемещение приложения 2012-10-25 15:16:42
+ развернуть текст сохранённая копия
Тэги: application, form, window
Определяем место запуска приложения(сеть или локальная машина) 2012-10-23 12:53:53
... dir = new DirectoryInfo( Application.StartupPath);
return (from ...
+ развернуть текст сохранённая копия
Тэги: application, form, window
Блокируем все запущенные приложения кроме своего 2012-10-23 09:41:15
+ развернуть текст сохранённая копия
Данная функция позволяет реализовать блокировку всех запускаемых и запущенных приложений кроме вашего, мне данный код пригодился в реализации родительского контроля!
Для работы нам необходимо подключить следующее пространство имен:
using System.Runtime.InteropServices;
Подключаем функции GetDesktopWindow,GetWindow и EnableWindow из библиотеки user32.dll.
[DllImport("user32.dll", SetLastError = false)]
static extern IntPtr GetDesktopWindow();
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr GetWindow(IntPtr hWnd, GetWindow_Cmd uCmd);
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool EnableWindow(IntPtr hWnd, bool bEnable);
Объявляем необходимы нам флаги для прохода по приложениям
enum GetWindow_Cmd : uint
{
GW_HWNDFIRST = 0,
GW_HWNDLAST = 1,
GW_HWNDNEXT = 2,
GW_HWNDPREV = 3,
GW_OWNER = 4,
GW_CHILD = 5,
GW_ENABLEDPOPUP = 6
}
Ну и сама функция блокировки приложений:
private void button1_Click(object sender, EventArgs e)
{
//получаем первое дочернее окно Рабочего стола
IntPtr hwnd = GetWindow(GetDesktopWindow(), GetWindow_Cmd.GW_CHILD);
if (hwnd != IntPtr.Zero)
{
//перебираем все окна в системе
while (hwnd != IntPtr.Zero)
{
//проверка, что блокируем не свое окно
if (hwnd != this.Handle)
{
//блокируем окно
//(вид окна, как будто его блокирует диалоговое окно)
EnableWindow(hwnd, false);
}
//получаем хендл следующего окна
hwnd = GetWindow(hwnd, GetWindow_Cmd.GW_HWNDNEXT);
}
}
}
Указывая в EnableWindow(hwnd, false) true или false вы блокируете или разблокируете приложения!
Тэги: application, form, process, system, window
Мониторинг буфера обмена 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
iOS Human Interface Guidelines на русском языке 2012-09-27 16:44:41
...
+ развернуть текст сохранённая копия
Мои коллеги делают правку перевода iOS HIG с английского на русский языки. Когда они все закончат, выложат в интернет целиком, это будет самый полный перевод, самый качественный и самый свежий из ныне существующих.
Он не будет идеальным, но с вашей помощью мы можем сделать его лучше. Перевод имеет единую терминологию, что облегчает понимание Гайда целиком.
Пока идет правка перевода — главы Гайдлайна, по готовности, распространяются в форме рассылки. Когда закончим, то перевод руководства будет выложен целиком.
Подписаться на рассылку можно тут: http://guide.ramotion.com
После подписки первое письмо придет не сразу, скорей всего на следующий день.
Тэги: app, application, design, guideline, hig, interface, ios, iphone, pakhaliuk, ramotion, дизайн, интерфейс, разработка
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Главная / Главные темы / Тэг «application»
|
Взлеты Топ 5
Падения Топ 5
|