Может кто знает, как заблокировать мышь под Win2K (код на VC++)?
» Как заблокировать мышь?
Что значит заблокировать?
Может просто курсор убрать
Или сообщения не обрабатывать
???
Может просто курсор убрать
Или сообщения не обрабатывать
???
Заблокировать ввод
ввод в одно свое окно или ввод вообще?
Цитата:
Заблокировать ввод
Я думал вывод
Конкретизируй пожалуйста, ввод в 1) свое окно; 2)чужое окно; 3)вообще. С 1) имхо проблем не должно быть. 2) сложнее, в голову приходит только функция AttachThreadInput, но она только прицепляться к вводу; хуки - но на что? На PostMessage может. 3) IMHO дрова рубить или провод дергать
Как отключить мышу в winXP при работе с DoS программами? Если дёрнуть мышой, прога просто вылетает и естесно не сохраняет при етом никаких данных.
Отключи мышь на время работы програмы.
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
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
Спасибо! Теперь понял :)
dneprcomp
Цитата:
Каким образом? Чё-то типа скрипта надо или BATника.
ALL[
У кого какие предложения по этому поводу?
Цитата:
Отключи мышь на время работы програмы.
Каким образом? Чё-то типа скрипта надо или BATника.
ALL[
У кого какие предложения по этому поводу?
Shtorm
Цитата:
Да нет... просто выдернуть шнурок (наверное).
Цитата:
Каким образом? Чё-то типа скрипта надо или BATника.
Да нет... просто выдернуть шнурок (наверное).
zorrack
Правильно.
Shtorm
Если очень надо работать со старой програмой, то просто выдерни мышь.
После окончания работы Windows подхватит мышу сам. Особенно на Win2K.
Конечно мне не известна вся ситуация, но это IMHO наиболее простое и доступное решение.
И это совершенно серьезно. Без подколок. Зачем громоздить навески на систему и добиваться нестабильной работы? Или найти/написать заменитель этой програмы.
Правильно.
Shtorm
Если очень надо работать со старой програмой, то просто выдерни мышь.
После окончания работы Windows подхватит мышу сам. Особенно на Win2K.
Конечно мне не известна вся ситуация, но это IMHO наиболее простое и доступное решение.
И это совершенно серьезно. Без подколок. Зачем громоздить навески на систему и добиваться нестабильной работы? Или найти/написать заменитель этой програмы.
zorrack
dneprcomp
Цитата:
Это не серьёзно!
Да и к тому же мышь не хватается после её выдёргивания
dneprcomp
Цитата:
Да нет... просто выдернуть шнурок (наверное).
Это не серьёзно!
Да и к тому же мышь не хватается после её выдёргивания
Shtorm
Ну извини. Обычно система мышу подхватывает. Я все время переключаю с одного компа на другой мышь и клавиатуру. И ничего, работает.
Скорее всего, твоя программа портит что-то в системе во время работы. А ты еще пытаешься сам что-то навесить...
Ну извини. Обычно система мышу подхватывает. Я все время переключаю с одного компа на другой мышь и клавиатуру. И ничего, работает.
Скорее всего, твоя программа портит что-то в системе во время работы. А ты еще пытаешься сам что-то навесить...
лучше не так
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));
}
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));
}
sawamail
Супер! Один вопрос... Откуда брать pDlg
А также второй вопрос - а под 9x/Me подобный способ есть?
Супер! Один вопрос... Откуда брать pDlg
А также второй вопрос - а под 9x/Me подобный способ есть?
pDlg - любое созданное тобой окошко
zorrack
Да pDlg это указатель на диалоговое окно. В принципе это не важно. В 9Х, Ме есть похожие функции (точно не помню наименование). Но есть принципиальное отличие. Если в NT твой хук ставиться в начало списка, то в 98 - в конец. Поэтому хрен чего запретишь. Если интересно - могу кинуть на мыло тестовый проектик (VC++ 6.0).
Добавлено
Кстати, проверяя, кто елозит мышку или клаву, можно отрубить Ctrl+Alt+Del. Вернее не само срабатывание, а возможность воспользоваться TaskManager'ом. Появится он то появиться, а сделать юзер нихрена не сможет.
Да pDlg это указатель на диалоговое окно. В принципе это не важно. В 9Х, Ме есть похожие функции (точно не помню наименование). Но есть принципиальное отличие. Если в NT твой хук ставиться в начало списка, то в 98 - в конец. Поэтому хрен чего запретишь. Если интересно - могу кинуть на мыло тестовый проектик (VC++ 6.0).
Добавлено
Кстати, проверяя, кто елозит мышку или клаву, можно отрубить Ctrl+Alt+Del. Вернее не само срабатывание, а возможность воспользоваться TaskManager'ом. Появится он то появиться, а сделать юзер нихрена не сможет.
dneprcomp
Цитата:
Да ничего она не портит, под вынЬ 2000 работает на ура, а под ХР вылетает к чертям после того как мышой двинешь.
sawamail
Цитата:
Мне это поможет?
Цитата:
Скорее всего, твоя программа портит что-то в системе во время работы. А ты еще пытаешься сам что-то навесить...
Да ничего она не портит, под вынЬ 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...
Мне это поможет?
Shtorm
данный метод позволяет получить полный контроль над мышью
а отключить ее можно в Device Manager
данный метод позволяет получить полный контроль над мышью
а отключить ее можно в Device Manager
Shtorm
Попробуй выбрать емуляцию Win95 или Win98 для этой програмы в свойствах(properties)
Добавлено
Это работает только для XP
Попробуй выбрать емуляцию Win95 или Win98 для этой програмы в свойствах(properties)
Добавлено
Это работает только для XP
Господа
есть одна задачка, в которой необходимо полностью на время работы
проги перехватить обработку данных с выхода мыши на себя
причем это надо делать во всех Виндах (95,...)
вопрос: как это можно сделать при написании проги в Delphi?
мышь может быть подключена к COM, PS/2 или USB портам
спасибо
есть одна задачка, в которой необходимо полностью на время работы
проги перехватить обработку данных с выхода мыши на себя
причем это надо делать во всех Виндах (95,...)
вопрос: как это можно сделать при написании проги в Delphi?
мышь может быть подключена к COM, PS/2 или USB портам
спасибо
хм.. а если заблокировать поток сообщений, связанных с мышью?
так ведь надо как раз обрабатывать поступающие с мыши импульсы перемещения
и что бы система при этом их не принимала за перемещения самой мыши
т.е. не реагировала на них
а вот как это сделать?
и что бы система при этом их не принимала за перемещения самой мыши
т.е. не реагировала на них
а вот как это сделать?
что значит "система не реагировала на перемещения мыши"?
вообще ее не видела
т.е. приложение ее видит и получает с нее данные (импульсы перемещения)
а система при этом думала, что мышь стоит на месте
т.е. возможно организовать общение приложения с мышью как с периферийным устройством получения данных, которое может быть подключено к разным портам COM, PS/2, USB? (я так думаю, что при этом придется сделать так, чтобы система думала, что вообще нет, или она не подвижна)
т.е. приложение ее видит и получает с нее данные (импульсы перемещения)
а система при этом думала, что мышь стоит на месте
т.е. возможно организовать общение приложения с мышью как с периферийным устройством получения данных, которое может быть подключено к разным портам COM, PS/2, USB? (я так думаю, что при этом придется сделать так, чтобы система думала, что вообще нет, или она не подвижна)
Что понимается под "системой" и "приложением". Если операционная система будет думать что мышь не двигается, то кто будет посылать сообщения о передвижении мыши приложениям?
система - ОС
приложение - какая-либо программа, которая обрабатывает импульсы, поступающие с мыши
как раз так и надо, чтобы во время запуска конкретной программы
ОС переставала реагировать на перемещения мыши
а видела ее только именно эта самая программа и реагировала на перемещения мыши
приложение - какая-либо программа, которая обрабатывает импульсы, поступающие с мыши
как раз так и надо, чтобы во время запуска конкретной программы
ОС переставала реагировать на перемещения мыши
а видела ее только именно эта самая программа и реагировала на перемещения мыши
vgugo
Только написав свой драйвер мыши.
Приложение не может видеть мышь если ее не видит система.
Подумай о иерархии...
Только написав свой драйвер мыши.
Приложение не может видеть мышь если ее не видит система.
Подумай о иерархии...
UncoNNecteD
вот-вот
а может кто-нибудь проконсультировать как эти самые драйвера пишутся
может какая-нибудь документация есть
ведь надо только на момент запуска конкретной программы отключать распознавание мыши ОС, а эта программа в это время должна свободно общаться с мышкой ???
вот-вот
а может кто-нибудь проконсультировать как эти самые драйвера пишутся
может какая-нибудь документация есть
ведь надо только на момент запуска конкретной программы отключать распознавание мыши ОС, а эта программа в это время должна свободно общаться с мышкой ???
Предыдущая тема: Язык Си Керниган, Ричи
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.