Форум: "WinAPI";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
ВнизСтранности с хуком Найти похожие ветки
← →
Jack (2003-12-10 17:57) [0]Здравствуйте!
Для разминки писал программу управления Winamp`ом с помощью "горячих" клавиш.
В исполняемом модуле загружал DLL, искал Winamp,ставил глобальный хук на клавиатуру и отслеживал разные клавиши и посылал сообщения Winamp`у.
Странность заключается в том, что если прятал главное окно (сворачивл или ShowWindow(hWindow,SW_HIDE)), хук работал, но Winamp не получал сообщения. Начал разбираться и обнаружил, что если главное окно невидимо или теряло фокус, то переменная hWinamp, описание которой находится в DLL, становилась равной 0. Востанавливал окно или передавал ему фокус - hWinamp получало значение хендла Winampa.
В DLL был следующий код:
var flags: array[0..9] of boolean;
hWinamp: THandle;
...
Когда поменял исходный код:
var hWinamp: THandle;
flags: array[0..9] of boolean;
...
то все заработало нормально. Может кто-нибудь объяснить что происходило с переменными?
← →
Юрий Зотов (2003-12-11 17:35) [1]С переменными не происходило ничего. Происходило где-то в другом месте. Например, hWinamp Вы определяете через FindWindow, но в первом случае делали это в Exe, а во втором - перенесли в сам хук. Тогда описанное Вами поведение как раз очень даже возможно.
И есть серьезное подозрение, что CallNextHookEx у Вас не работает.
← →
LOX (2003-12-11 18:37) [2]Делай так:
Play:
h:= FindWindow("Winamp v1.x" ,nil);
if h <>0 then
SendMessage(h,WM_COMMAND , 40045 , 0)
else
Label1.Caption := "Ненайден Winamp!";
-----------
stop:
h:= FindWindow("Winamp v1.x" ,nil);
if h <>0 then
SendMessage(h,WM_COMMAND , 40047 , 0)
else
Label1.Caption := "Ненайден Winamp!";
...
40045 - кнопка плей, 40046 - пауза, а дальше непомню.
← →
Jack (2003-12-16 15:20) [3]... Происходило где-то в другом месте. Например, hWinamp Вы определяете через FindWindow, но в первом случае делали это в Exe, а во втором - перенесли в сам хук. Тогда описанное Вами поведение как раз очень даже возможно.
В том то и дело, что Winamp искался при инициализации DLL.
Для отладки перед посылкой сообщения Winamp`у выводил MessageBox, в котором выводил hWinamp.
Так вот, если главное окно не в фокусе, MessageBox показывал hWinamp=0. Когда главное окно становилось активным, hWinamp был не 0, и все сообщения принимались нормально(громкость, сл.трек, пауза...).
Когда в описании глобальных (для DLL) переменных поменял местами описание массива и hWinamp, то программа работала без глюков.
← →
StAL (2003-12-16 19:28) [4]Сохраняйте hWinamp и hHook в проецируемом в память файле
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.02.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.032 c