Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2012, 19:11   #11
stdio
Форумчанин
 
Аватар для stdio
 
Регистрация: 14.02.2012
Сообщений: 105
По умолчанию

да не имеет, но я именно его хотел переделать так как он мне больше других понятен, я так понимаю в main() вырезать надо всё кроме Hide и вставить что то типа

hhook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc ,0, 0);


и написать подпрограмму

LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{

KBDLLHOOKSTRUCT* pkbs = (KBDLLHOOKSTRUCT*) lParam;
if (WM_KEYDOWN==wParam)
//
//
return CallNextHookEx(hhook, nCode, wParam, lParam);
}
и пожалуй можно вырезать подпрограмму сохранения наших буковок в txt

а ещё для глобального хука нужен DLL так везде описано

я в этих хуках совсем ни чё не понял, если есть пример очень простой и хорошо описанный скиньте пожалуйста
stdio вне форума Ответить с цитированием
Старый 26.02.2012, 22:32   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а ещё для глобального хука нужен DLL так везде описано
Если память не изменяет для хуков типа WH_JOURNALRECORD и WH_JOURNALPLAYBACK не обязательно в ДЛЛ...
Насчет установки хука, тоже напишу по памяти из старых попыток похакерствовать.
Хук ставил и снимал в главной процедуре перед прослушиванием очереди сообщений.
Код:
	hhook=SetWindowsHookEx(WH_JOURNALPLAYBACK,proc,hInstance,0);		
	// Цикл основного сообщения:
	while (GetMessage(&msg, NULL, 0, 0))
	{
		if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
	}
	UnhookWindowsHookEx(hhook);
А сама функция обработки хука выглядит примерно так:
Код:
LRESULT CALLBACK proc(int nCode, WPARAM wParam, LPARAM lParam){
	if(nCode==HC_GETNEXT){
		EVENTMSG* lp=(EVENTMSG*)lParam;
		if( lp->message==WM_KEYDOWN) MessageBox(GetForegroundWindow(),L"123",L"456",0);
	}
return CallNextHookEx(hhook, nCode, wParam, lParam);
}
Правда тут одна маленькая загвоздка - я этот код забросил давным давно и более не интересовался хуками, так что с первого раза может не получиться.
Если тут будут спецы по Си в Винде пусть подкорректируют.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.02.2012, 23:18   #13
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Цитата:
а ещё для глобального хука нужен DLL так везде описано
WH_KEYBOARD_LL, WH_MOUSE_LL не требуют dll для установки хука в global scope. Я это уже предлагал ТС, но он не продолжил тему, а полез писать какой-то батник.
EUGY вне форума Ответить с цитированием
Старый 27.02.2012, 01:19   #14
stdio
Форумчанин
 
Аватар для stdio
 
Регистрация: 14.02.2012
Сообщений: 105
По умолчанию

Завтра буду пробовать опять. Да действительно EUGY предлагал двинутся в этом направлении, а тему я не продолжил так как занялся изучением этого вопроса(уже не удобно было задавать вопросы, надежда разобраться дальше самому ещё оставалась) и к настоящему моменту пришёл в тупик)))) план с батником у меня был ещё задуман когда я даже не знал о существование хуков( сейчас хоть знаю, и то уже прогресс)))
stdio вне форума Ответить с цитированием
Старый 27.02.2012, 09:59   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
план с батником у меня был ещё задуман когда я даже не знал о существование хуков
Смотрю этот план неплохо тебя нагреб
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.02.2012, 15:51   #16
stdio
Форумчанин
 
Аватар для stdio
 
Регистрация: 14.02.2012
Сообщений: 105
По умолчанию

грубо вот такой у меня получается шаблон, в каком направлении теперь двигаться?

Код:
// hooknew.cpp: главный файл проекта.

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#define  _WIN32_WINNT 0x0501

HHOOK hhook = NULL;

using namespace System;
//using namespace System.Runtime.InteropServices;

LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{

	//KBDLLHOOKSTRUCT *pkbs = (KBDLLHOOKSTRUCT*) lParam;
	if(nCode < 0)
	{
    return CallNextHookEx(hhook, nCode, wParam, lParam);
	}

	if (WM_KEYDOWN==wParam)
	{
		//int vkCode = Marshal.ReadInt32(lParam);
		char C[255];
		wsprintf(C,"нажата клавиша с кодом %s \n", wParam/*pkbs->vkCode*/);
		OutputDebugString(C);
	}
	return CallNextHookEx(hhook, nCode, wParam, lParam);
}


//int save()
//{
	//char i;

		//FILE *fp;
		//fp=fopen("C:\\bykva.txt","a+");
        //fprintf(fp, "%с",i);
        //fclose (fp);
//}

int main()
{
	hhook = SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc ,0, 0);
	while (GetMessage(0,0,0,0));
	{
		//UnhookWindowsHookEx(hhook);
	}
	//save();
	
    
}

Последний раз редактировалось stdio; 27.02.2012 в 17:09.
stdio вне форума Ответить с цитированием
Старый 27.02.2012, 16:58   #17
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
в каком направлении теперь двигаться?
Проверить его. Работает? Значит заняться перекодировкой раскладок. Там по-моему прикол будет когда нужно определять какого языка буква нажата. Ровняется это функцией WIN API, вот только название ее запамятовал... Что-то с map связанное.

P.S.
Код:
	while (GetMessage(0,0,0,0));
	{
		UnhookWindowsHookEx(hhook);
	}
Неа... Чет мне эта реализация малость не нравится. Ты хук сразу с первой итерацией снимаешь, а это не хорошо.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.02.2012, 17:00   #18
stdio
Форумчанин
 
Аватар для stdio
 
Регистрация: 14.02.2012
Сообщений: 105
По умолчанию

не даже не думает работать)))

Предупреждение 1 warning C4005: _WIN32_WINNT: изменение макроопределения c:\Users\SEGO\documents\visual studio 2010\Projects\hooknew\hooknew\hookn ew.cpp 6 1 hooknew
Ошибка 2 error C2664: wsprintfW: невозможно преобразовать параметр 1 из "char [255]" в "LPWSTR" c:\Users\SEGO\documents\visual studio 2010\Projects\hooknew\hooknew\hookn ew.cpp 26 1 hooknew
Ошибка 3 error C2664: OutputDebugStringW: невозможно преобразовать параметр 1 из "char [255]" в "LPCWSTR" c:\Users\SEGO\documents\visual studio 2010\Projects\hooknew\hooknew\hookn ew.cpp 27 1 hooknew

Код:
	while (GetMessage(0,0,0,0));
	{
		UnhookWindowsHookEx(hhook);
	}

Неа... Чет мне эта реализация малость не нравится. Ты хук сразу с первой итерацией снимаешь, а это не хорошо.
закоментировал ))) плохо то что есть ошибки, я не могу его для отладки запустить, в режиме отладки я хоть могу понять что к чему кто куда

Последний раз редактировалось stdio; 27.02.2012 в 17:13.
stdio вне форума Ответить с цитированием
Старый 27.02.2012, 17:54   #19
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
wsprintfW: невозможно преобразовать параметр 1 из "char [255]" в "LPWSTR"
Угу.
Код:
wsprintf(C,L"нажата клавиша с кодом %s \n", wParam/*pkbs->vkCode*/);
Увидел? Аналогично на остальных.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.02.2012, 18:14   #20
stdio
Форумчанин
 
Аватар для stdio
 
Регистрация: 14.02.2012
Сообщений: 105
По умолчанию

Код:
wsprintf(C,L"нажата клавиша с кодом %s \n", wParam/*pkbs->vkCode*/);
Всё равно есть ошибки но уже 2 а не 3)))

а если сделать так то этих ошибок нету
Код:
sprintf(C,"нажата клавиша с кодом %s \n", wParam/*pkbs->vkCode*/);
но вот такая вот ошибка выскакивает

Ошибка 8 error c101008a: Failed to save the updated manifest to the file "Debug\SetWindowsHookEx.exe.embed.m anifest". 0@0<5B@ 7040= =525@=>. C:\Users\SEGO\Desktop\Projects\SetW indowsHookEx\SetWindowsHookEx\mt.ex e SetWindowsHookEx

ну 7 предупреждений что у меня не используются некоторые переменные не в счёт( мы их ещё займём делом)
ни чё же страшного нету что я в консоли(CLR) пишу?

Последний раз редактировалось stdio; 27.02.2012 в 18:28.
stdio вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод формул на язык програмирования (Pascal) spinogryz_ua Помощь студентам 7 16.01.2012 17:51
язык ассемблера nastya_m Помощь студентам 5 07.12.2011 13:15
Перевод программы на русский язык. shivo Фриланс 1 05.01.2011 15:20
помогите с написанием бат файла Aivar Помощь студентам 2 24.09.2008 22:58