Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Как заблокировать мышь?

Автор: Crash86
Дата сообщения: 31.07.2003 17:44
Может кто знает, как заблокировать мышь под Win2K (код на VC++)?
Автор: OOSL
Дата сообщения: 31.07.2003 18:54
Что значит заблокировать?
Может просто курсор убрать
Или сообщения не обрабатывать
???
Автор: Crash86
Дата сообщения: 31.07.2003 19:08
Заблокировать ввод
Автор: OOSL
Дата сообщения: 31.07.2003 20:42
ввод в одно свое окно или ввод вообще?
Автор: EAS
Дата сообщения: 01.08.2003 03:38

Цитата:
Заблокировать ввод

Я думал вывод

Конкретизируй пожалуйста, ввод в 1) свое окно; 2)чужое окно; 3)вообще. С 1) имхо проблем не должно быть. 2) сложнее, в голову приходит только функция AttachThreadInput, но она только прицепляться к вводу; хуки - но на что? На PostMessage может. 3) IMHO дрова рубить или провод дергать
Автор: Shtorm
Дата сообщения: 01.08.2003 14:14
Как отключить мышу в winXP при работе с DoS программами? Если дёрнуть мышой, прога просто вылетает и естесно не сохраняет при етом никаких данных.
Автор: dneprcomp
Дата сообщения: 01.08.2003 23:22
Отключи мышь на время работы програмы.
Автор: aaabbbccc
Дата сообщения: 01.08.2003 23:27
The BlockInput function blocks keyboard and mouse input events from reaching applications.

Syntax
BOOL BlockInput(
BOOL fBlockIt
);

Parameters
fBlockIt
[in] Specifies the function's purpose. If this parameter is TRUE, keyboard and mouse input events are blocked. If this parameter is FALSE, keyboard and mouse events are unblocked. Note that only the thread that blocked input can successfully unblock input.

Return Value

If the function succeeds, the return value is nonzero.

If input is already blocked, the return value is zero. To get extended error information, call GetLastError.

The system will unblock input in the following cases:

* The thread that blocked input unexpectedly exits without calling BlockInput with fBlock set to FALSE. In this case, the system cleans up properly and re-enables input.
* Windows 95/98/Me: The system displays the Close Program/Fault dialog box. This can occur if the thread faults or if the user presses CTRL+ALT+DEL.
* Windows 2000/XP: The user presses CTRL+ALT+DEL or the system invokes the Hard System Error modal message box (for example, when a program faults or a device fails).

Function Information

Import library User32.lib
Minimum operating systems Windows 98, Windows 2000


http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/WinUI/WindowsUserInterface/UserInput/KeyboardInput/KeyboardInputReference/KeyboardInputFunctions/BlockInput.asp
Автор: Crash86
Дата сообщения: 02.08.2003 18:01
Спасибо! Теперь понял :)
Автор: Shtorm
Дата сообщения: 06.08.2003 11:06
dneprcomp

Цитата:
Отключи мышь на время работы програмы.

Каким образом? Чё-то типа скрипта надо или BATника.
ALL[
У кого какие предложения по этому поводу?
Автор: zorrack
Дата сообщения: 06.08.2003 13:31
Shtorm

Цитата:
Каким образом? Чё-то типа скрипта надо или BATника.

Да нет... просто выдернуть шнурок (наверное).
Автор: dneprcomp
Дата сообщения: 06.08.2003 19:28
zorrack
Правильно.
Shtorm
Если очень надо работать со старой програмой, то просто выдерни мышь.
После окончания работы Windows подхватит мышу сам. Особенно на Win2K.
Конечно мне не известна вся ситуация, но это IMHO наиболее простое и доступное решение.
И это совершенно серьезно. Без подколок. Зачем громоздить навески на систему и добиваться нестабильной работы? Или найти/написать заменитель этой програмы.
Автор: Shtorm
Дата сообщения: 07.08.2003 16:01
zorrack
dneprcomp

Цитата:
Да нет... просто выдернуть шнурок (наверное).

Это не серьёзно!
Да и к тому же мышь не хватается после её выдёргивания
Автор: dneprcomp
Дата сообщения: 07.08.2003 18:31
Shtorm
Ну извини. Обычно система мышу подхватывает. Я все время переключаю с одного компа на другой мышь и клавиатуру. И ничего, работает.
Скорее всего, твоя программа портит что-то в системе во время работы. А ты еще пытаешься сам что-то навесить...
Автор: sawamail
Дата сообщения: 08.08.2003 10:36
лучше не так

OSVERSIONINFO osver;
osver.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(&osver);
if(osver.dwPlatformId==VER_PLATFORM_WIN32_NT)
{
// Install the low-level keyboard & mouse hooks
m_hhkLowLevelKybd=SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,AfxGetInstanceHandle(),0);
m_hhkLowLevelMouse=SetWindowsHookEx(WH_MOUSE_LL ,LowLevelMouseProc,AfxGetInstanceHandle(),0);
}

..............................

а в обработчиках делай чё хочешь
например

LRESULT CALLBACK LowLevelKeyboardProc(int nCode,WPARAM wParam,LPARAM lParam)
{
BOOL fEatKeystroke = FALSE;

if(nCode==HC_ACTION)
{
switch (wParam)
{
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
case WM_KEYUP:
case WM_SYSKEYUP:

PKBDLLHOOKSTRUCT p =(PKBDLLHOOKSTRUCT)lParam;

if(p->vkCode=='R' && p->flags & LLKHF_ALTDOWN) Exit();

// мое или нет?
if(pDlg->m_hWnd!=::GetActiveWindow()) return 1;

if(p->vkCode==VK_LWIN || p->vkCode==VK_RWIN || p->vkCode==VK_APPS)
fEatKeystroke=TRUE;
else
fEatKeystroke=
((p->vkCode==VK_TAB) && ((p->flags & LLKHF_ALTDOWN)!=0)) ||
((p->vkCode==VK_ESCAPE) &&
((p->flags & LLKHF_ALTDOWN)!=0)) ||
((p->vkCode==VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0));

break;
}
}

return(fEatKeystroke ? 1 : CallNextHookEx(NULL,nCode,wParam,lParam));
}

LRESULT CALLBACK LowLevelMouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
BOOL fEatMouse=FALSE;

if(nCode==HC_ACTION)
{
switch (wParam)
{
case WM_LBUTTONDOWN:
case WM_LBUTTONUP:
case WM_RBUTTONDOWN:
case WM_RBUTTONUP:

PMSLLHOOKSTRUCT p =(PMSLLHOOKSTRUCT)lParam;

DWORD ID=::GetWindowThreadProcessId(pDlg->m_hWnd,NULL);
DWORD wID=::GetWindowThreadProcessId(::WindowFromPoint(p->pt),NULL);
// мое или нет

if(ID==wID)
{
pDlg->GetDlgItem(IDC_TITLE)->SetWindowText("Ты попал.");
}
else
{
fEatMouse=TRUE;
pDlg->GetDlgItem(IDC_TITLE)->SetWindowText("Ты не попал.");
}

break;
}
}

return(fEatMouse ? 1 : CallNextHookEx(NULL, nCode, wParam,lParam));
}
Автор: zorrack
Дата сообщения: 08.08.2003 12:27
sawamail
Супер! Один вопрос... Откуда брать pDlg
А также второй вопрос - а под 9x/Me подобный способ есть?
Автор: Monty
Дата сообщения: 08.08.2003 12:32
pDlg - любое созданное тобой окошко
Автор: sawamail
Дата сообщения: 08.08.2003 12:49
zorrack
Да pDlg это указатель на диалоговое окно. В принципе это не важно. В 9Х, Ме есть похожие функции (точно не помню наименование). Но есть принципиальное отличие. Если в NT твой хук ставиться в начало списка, то в 98 - в конец. Поэтому хрен чего запретишь. Если интересно - могу кинуть на мыло тестовый проектик (VC++ 6.0).

Добавлено
Кстати, проверяя, кто елозит мышку или клаву, можно отрубить Ctrl+Alt+Del. Вернее не само срабатывание, а возможность воспользоваться TaskManager'ом. Появится он то появиться, а сделать юзер нихрена не сможет.
Автор: Shtorm
Дата сообщения: 09.08.2003 11:40
dneprcomp

Цитата:
Скорее всего, твоя программа портит что-то в системе во время работы. А ты еще пытаешься сам что-то навесить...

Да ничего она не портит, под вынЬ 2000 работает на ура, а под ХР вылетает к чертям после того как мышой двинешь.

sawamail

Цитата:
...OSVERSIONINFO osver;
osver.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);
GetVersionEx(&osver);
if(osver.dwPlatformId==VER_PLATFORM_WIN32_NT)
{
// Install the low-level keyboard & mouse hooks
m_hhkLowLevelKybd...

Мне это поможет?
Автор: sawamail
Дата сообщения: 11.08.2003 10:33
Shtorm
данный метод позволяет получить полный контроль над мышью
а отключить ее можно в Device Manager
Автор: dneprcomp
Дата сообщения: 11.08.2003 21:09
Shtorm
Попробуй выбрать емуляцию Win95 или Win98 для этой програмы в свойствах(properties)

Добавлено
Это работает только для XP
Автор: vgugo
Дата сообщения: 03.10.2003 12:17
Господа


есть одна задачка, в которой необходимо полностью на время работы
проги перехватить обработку данных с выхода мыши на себя
причем это надо делать во всех Виндах (95,...)

вопрос: как это можно сделать при написании проги в Delphi?

мышь может быть подключена к COM, PS/2 или USB портам

спасибо
Автор: Sleepwalker
Дата сообщения: 03.10.2003 13:18
хм.. а если заблокировать поток сообщений, связанных с мышью?
Автор: vgugo
Дата сообщения: 03.10.2003 13:52
так ведь надо как раз обрабатывать поступающие с мыши импульсы перемещения
и что бы система при этом их не принимала за перемещения самой мыши
т.е. не реагировала на них

а вот как это сделать?


Автор: Sleepwalker
Дата сообщения: 03.10.2003 14:19
что значит "система не реагировала на перемещения мыши"?
Автор: vgugo
Дата сообщения: 03.10.2003 14:41
вообще ее не видела
т.е. приложение ее видит и получает с нее данные (импульсы перемещения)
а система при этом думала, что мышь стоит на месте

т.е. возможно организовать общение приложения с мышью как с периферийным устройством получения данных, которое может быть подключено к разным портам COM, PS/2, USB? (я так думаю, что при этом придется сделать так, чтобы система думала, что вообще нет, или она не подвижна)

Автор: FuzzyLogic
Дата сообщения: 03.10.2003 15:58
Что понимается под "системой" и "приложением". Если операционная система будет думать что мышь не двигается, то кто будет посылать сообщения о передвижении мыши приложениям?
Автор: vgugo
Дата сообщения: 03.10.2003 17:01
система - ОС
приложение - какая-либо программа, которая обрабатывает импульсы, поступающие с мыши

как раз так и надо, чтобы во время запуска конкретной программы
ОС переставала реагировать на перемещения мыши
а видела ее только именно эта самая программа и реагировала на перемещения мыши
Автор: UncoNNecteD
Дата сообщения: 04.10.2003 09:17
vgugo
Только написав свой драйвер мыши.
Приложение не может видеть мышь если ее не видит система.
Подумай о иерархии...
Автор: vgugo
Дата сообщения: 04.10.2003 11:29
UncoNNecteD
вот-вот
а может кто-нибудь проконсультировать как эти самые драйвера пишутся
может какая-нибудь документация есть
ведь надо только на момент запуска конкретной программы отключать распознавание мыши ОС, а эта программа в это время должна свободно общаться с мышкой ???


Страницы: 12

Предыдущая тема: Язык Си Керниган, Ричи


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.