Клава
Как можно добраться к клаве? Помогите плииииз, очень надо...
Смотри сюда http://delphiworld.narod.ru/_os_.html
Смотри сюда http://delphiworld.narod.ru/_os_.html
Это конечно всё замечательно, но мне бы на C++ (Visual Studio 7 .NET). С Дельфями не работал...
ничего не понимаю. Хотя бы номер аси оставил...
Как можно добраться к клаве?
ММмммм.... Какой глубокий вопрос. Подойти к столу, и коснуться рукой клавиатуры.
Конкретнее вопросы будут? Что сделать то надо?
ММмммм.... Какой глубокий вопрос. Подойти к столу, и коснуться рукой клавиатуры.
Конкретнее вопросы будут? Что сделать то надо?
Ммммм... какой отличный ответ... Конкретнее вопросы будут! Так вот надо чтоб прога работала так: нажал на кнопку - вызвалась функция, и в ней надо считать СКАН код (кот. идет с порта 60h)...
Ммммм... какой отличный ответ... Конкретнее вопросы будут! Так вот надо чтоб прога работала так: нажал на кнопку - вызвалась функция, и в ней надо считать СКАН код (кот. идет с порта 60h)...
Так, давай еще конкретнее:
1. ОС.
2. Глобально, или только на твою программу?
И если винды NT (что наиболее вероятно), то советую забыть про порты. Если конечно не драйвер пишешь. Нафига тебе они на Си?
Так, давай еще конкретнее:
1. ОС.
2. Глобально, или только на твою программу?
И если винды NT (что наиболее вероятно), то советую забыть про порты. Если конечно не драйвер пишешь. Нафига тебе они на Си?
ОС - WinXP...
короче мне нужно чтоб это так работало: нажимаешь кнопку например 1, считал скан код нажатия кнопки 1, нажал 2 (неотпуская 1), получил скан код 2, отпустил 1 скан код отпускания клавиши 1 (по хорошему это (скан код 1)+80h), нажал 2 - скан код отпускания 2... дрова влом писать на ASMe... кстати не знаешь где можно найти в инете DDK (Driver Developer (-ment) Kit) на халяву? (yandex'ы, rambler'ы, google'ы... не предлагать!)
А, что, WM_KEYUP и WM_KEYDOWN не катят?
Мож и катят... я просто раньше под ДОСом писал...
мож кинуть на мыло какую-нть маленькую прогу плиз?
[email]alektrik87@mail.ru[/email]
Решение банальное - читаем MSDN...
8)
Послал - лови...
Решение банальное - читаем MSDN...
8)
Конечно пасиб... но мне бы хук на клаву поставить... (не могу понять почему не работает)
Вот код:
#include "windows.h"
HHOOK hhkKbdHook = NULL;
LRESULT KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
DWORD dwData=40, dwBytesReturned;
HANDLE hFile=CreateFile("c:\\test.txt", GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, 0, NULL);
WriteFile(hFile, &dwData, 1, &dwBytesReturned, 0);
CloseHandle(hFile);
MessageBox(NULL, "Ok !!!", "Status", 0);
return CallNextHookEx(NULL,code,wParam,lParam);
}
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
MSG msg;
if (!(hhkKbdHook = SetWindowsHook(WH_KEYBOARD, (HOOKPROC)KeyboardProc)))
MessageBox(NULL,"zad","zad",MB_OK);
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
//Сюда дальше можно не смотреть
if (hhkKbdHook)
{
UnhookWindowsHook(WH_KEYBOARD, (HOOKPROC)KeyboardProc);
hhkKbdHook = NULL;
}
return 0;
}
По идее при нажатии клавиши в корневике на "c" должен создать файл "test.txt" и записать туда ASCII числа 40 и вывести месаг...
По идее при нажатии клавиши в корневике на "c" должен создать файл "test.txt" и записать туда ASCII числа 40 и вывести месаг...
По идее... По идее сперва учим матчасть, а потом - пишем код. А не наоборот.
Глобальные хуки (т.е. на всю систему) обязательно должны находиться в dll-ках. Т.е. ты пишешь функцию в dll-ке, загружаешь ее, и после этого ставишь хук на всю систему. Примерно надо сделать вот что:
DLL:
extern "C" __declspec(dllexport) LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam);
extern "C" __declspec(dllexport) void hwnd(HHOOK HwndHook);
HHOOK hHook;
HINSTANCE hInstance;
FARPROC KeybProc = (FARPROC)KeyboardProc;
int WINAPI DllEntryPoint(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved)
{
return 1;
}
__declspec(dllexport) LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam)
{
DWORD numb=0;
char buffer[10];
if((code == HC_ACTION)&&(!(HIWORD(lParam) & KF_UP)))
{
switch ((char)wParam)
{
//ЧТО-ТО ТУТ ДЕЛАЕМ С ПОЛУЧЕННЫМИ ДАННЫМИ
}
FlushFileBuffers(hDump);
CloseHandle(hDump);
}
return CallNextHookEx(hHook,code,wParam,lParam);
}
Главный модуль:
HWN hwn=NULL;
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
HMODULE dllhook = LoadLibrary("a.dll");
if(dllhook)
{
hwn = (HWN)GetProcAddress(dllhook,"_hwnd");
HOOKPROC hook = (HOOKPROC)GetProcAddress(dllhook, "KeyboardProc");
if(hwn && hook)
{
HHOOK hhook = SetWindowsHookEx(WH_KEYBOARD,hook,dllhook,0);
hwn(hhook);
Sleep(INFINITE);
}
}
FreeLibrary(dllhook);
return 0;
}
ЗЫ Код маленько кривой, т.к. писан был очень давно, но рабочий.
По идее... По идее сперва учим матчасть, а потом - пишем код. А не наоборот.
Глобальные хуки (т.е. на всю систему) обязательно должны находиться в dll-ках. Т.е. ты пишешь функцию в dll-ке, загружаешь ее, и после этого ставишь хук на всю систему.
Почему оба GetProcAddress возвращают 0 (код ошибки (GetLastError()) 7fh, у меня описания кодов ошибки нету). LoadLibrary нормально грузит DLL'ky. И зачем в DLL файле прототип функции hwnd без её описания? И почему при вызове функции для получения адреса функции hwnd стоит знак "нижнее подчеркивание", а для KeyboardProc его нету?
Почему оба GetProcAddress возвращают 0 (код ошибки (GetLastError()) 7fh, у меня описания кодов ошибки нету). LoadLibrary нормально грузит DLL'ky. И зачем в DLL файле прототип функции hwnd без её описания? И почему при вызове функции для получения адреса функции hwnd стоит знак "нижнее подчеркивание", а для KeyboardProc его нету?
Ты хочешь сам написать, или что бы за тебя написали? Если первое, то подскажу - ошибка твоя значит: "Не найдена указанная процедура". Почему? Подумай. Почитай все же литературу на эту тему.
Если хочешь, что бы за тебя написали, то могу написать, если тебе это так надо.
Ты хочешь сам написать, или что бы за тебя написали? Если первое, то подскажу - ошибка твоя значит: "Не найдена указанная процедура". Почему? Подумай. Почитай все же литературу на эту тему.
Если хочешь, что бы за тебя написали, то могу написать, если тебе это так надо.
Я хочу, чтоб мне помогли разобраться во всей этой мути... а для этого нужен нормальный исходник, с комментариями... если есть возможность кинь на почту (alektrik87@mail.ru) исходники и откомпилированный exe и dll (тока заархивируй)...лит-ры на эту тему у меня пока нет, так что выбор откуда познавать Программирование в Виндовз не велик...
Я хочу, чтоб мне помогли разобраться во всей этой мути... а для этого нужен нормальный исходник, с комментариями...
В чём пишешь? А то у каждой среды свои тонкости - надо знать чего выслать.
Если есть возможность - стучи в асю.
В чём пишешь? А то у каждой среды свои тонкости - надо знать чего выслать.
Если есть возможность - стучи в асю.
Пишу в Visual Studio 7 .NET (C++).
Ася - 258464925
Пишу в Visual Studio 7 .NET (C++).
Ася - 258464925
Дык есть у меня твоя аська - ты же ее в профиле указал. А проект - ща соберусь с духом и вышлю.