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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2014, 21:04   #1
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
Печаль Я опять с Dll

В общем дело такое, я немного разобрался, и теперь мне не ясно одна небольшая деталь....
Вот у меня есть код Dll
Код:
var
  SysHook : HHook = 0;
  myFile : TextFile;
  le:string;
function SysMsgProc(code : integer; wParam : word; lParam : longint) : longint; stdcall;
begin
  if (GetAsyncKeyState(VK_F9) and GetAsyncKeyState(VK_F10)) <> 0 then
  begin
ShowMessage('Сработало!');
     AssignFile(myFile, '1.txt');
     Reset(myFile);
     Read(myFile, le);
     ShowMessage(le);
     CloseFile(myFile);


  end;
end;

Result := CallNextHookEx(SysHook, Code, wParam, lParam);
if code = HC_ACTION then
begin

procedure RunStopHook(State : Boolean) export; stdcall;
begin
  if State then
    SysHook := SetWindowsHookEx(WH_KeyBoard, @SysMsgProc, HInstance, 0)
  else
  begin
    UnHookWindowsHookEx(SysHook);
    SysHook := 0;
  end;
end;

exports RunStopHook name 'RunStopHook';

end.
Так вот. По идее, при нажатии на F9+F10 программа должна выдать 2 сообщения:
1) Сработало!
2) Читает
Так всё и происходит, до тех пор, пока я не сворачиваю программу в трей...
В этом случае, выходит только одно сообщение (Сработало!), я не пойму почему не работает...
И да, если программа из Трея выходит, всё равно выходит только одно сообщение....
Janger вне форума Ответить с цитированием
Старый 26.02.2014, 21:17   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

вы уже обработку ошибок внедрите и залогируйте в конце концов
eval вне форума Ответить с цитированием
Старый 26.02.2014, 21:20   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
GetAsyncKeyState
А зачем эта функция здесь? Вместо нее нужно проверять WParam, который и содержит виртуальный код нажатого.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.02.2014, 21:37   #4
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А зачем эта функция здесь? Вместо нее нужно проверять WParam, который и содержит виртуальный код нажатого.
Хм... А как мне в нём указать 2-е нажатые клавиши?
Janger вне форума Ответить с цитированием
Старый 26.02.2014, 21:58   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Одновременно нажатыми они никак не могут быть. Одновременно можно только с CTRL ALT SHIFT.
Я вообще удивляюсь что данный код работает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.02.2014, 22:14   #6
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Одновременно нажатыми они никак не могут быть. Одновременно можно только с CTRL ALT SHIFT.
??? С этим всё нормально.
Тут только одна большая проблема: dll грузится во все процессы, а текущая папка у всех разная, поэтому файл открыть не получается. С полным путём должно быть нормально.
Somebody вне форума Ответить с цитированием
Старый 26.02.2014, 22:20   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

пусть сам найдет ошибку, а то так и будет всегда

обработку исключений + логирование и изучать
eval вне форума Ответить с цитированием
Старый 27.02.2014, 00:16   #8
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
пусть сам найдет ошибку, а то так и будет всегда
Я конечно всё понимаю, но я уже много вариантов попробовал ... У меня мало что получилось, вот решил спросить.
Конечно я сам стараюсь сделать, но тут я уже не знал что ещё можно придумать

Цитата:
Сообщение от Somebody Посмотреть сообщение
??? С этим всё нормально.
Тут только одна большая проблема: dll грузится во все процессы, а текущая папка у всех разная, поэтому файл открыть не получается. С полным путём должно быть нормально.
Да, вы абсолютно правы! Всё работает теперь. Вы правы были.
Вот только,
Код:
ExtractFilePath(Application.ExeName)
не работает, я думаю понятно по какой причине
ОГРОМНОЕ вам СПАСИБО !!!

Последний раз редактировалось Stilet; 27.02.2014 в 09:17.
Janger вне форума Ответить с цитированием
Старый 27.02.2014, 02:10   #9
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,873
По умолчанию

Цитата:
Да, вы абсолютно правы! Всё работает теперь. Вы правы были.
Вот только,
ExtractFilePath(Application.ExeName )
не работает, я думаю понятно по какой причине
Во-первых Somebody нигде вроде не упоминал функцию ExtractFilePath и свойство ТApplication.ExeName. А если ты чего подумал увидев термин "текущая папка", то каждый думает в меру своей испорченности. Или своей малограмотности.
P.S.
Меня вот вообще просто коробит от словосочетания "текущая папка". Хучь убейте!
northener вне форума Ответить с цитированием
Старый 27.02.2014, 09:18   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
??? С этим всё нормально.
Хм... Спорить не буду, но всегда думал что клавиши только последовательно можно обработать в сообщениях.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Инструкция для сборки приложений на Qt в один exe без зависимостей от libstdc++-6.dll, libgcc_s_dw2-1.dll, Qt5Core.dll и т.д. 8Observer8 Qt и кроссплатформенное программирование С/С++ 12 25.06.2015 03:18
опять я опять мемо nyasha2013 Помощь студентам 2 19.05.2011 21:09
и всеже опять работа с dll Assemblerru C++ Builder 1 15.03.2010 20:55
Опять же DLL и массив LEKA Общие вопросы Delphi 1 09.05.2007 20:37