Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование с использованием WinAPI

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dan2k5

Цитата:
В первый столбец item добавляется, а во второй нет  

И не будет так добавляться. Ибо в MSDN английским по белому написано:
 
You cannot use ListView_InsertItem or LVM_INSERTITEM to insert subitems. The iSubItem member of the LVITEM structure must be zero. See LVM_SETITEM for information on setting subitems.
 
 

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 20:13 03-02-2006
Sept



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Здорова всем кого не видел, может мне оказать помошь добрейший человек изо всех сдешних добряков? Вобщем хочу НАУЧИТСЯ создавать формы и кнопочки на них при помоши winapi

Всего записей: 40 | Зарегистр. 08-02-2006 | Отправлено: 15:17 10-02-2006
XPEHOMETP

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Проблема в чем: кроме форм и кнопочек еще нужна так называемая оконная функция, в которую Windows посылают сообщения, что такая-то кнопочка нажата, или что форму наглый юзер хочет закрыть, кликнув по крестику в углу. Или что надо пререрисовать всю форму, если на нее вдруг налезло окно другой проги, а потом его убрали. То есть формы и кнопочки - не самое страшное, даже в виде ресурса можно присобачить, а вот обработка системных сообщений - это морока. И даже самый добрый из всех добряков этому так запросто не научит.

Всего записей: 2485 | Зарегистр. 21-06-2005 | Отправлено: 15:33 10-02-2006 | Исправлено: XPEHOMETP, 15:41 10-02-2006
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sept
Берёшь книжку Ч. Петцольда "Программирование под Windows" и разбираешься потихоньку. Для начала - самое то.

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 19:31 10-02-2006
Sept



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Abs62
XPEHOMETP
сеньк вери мач, почитаю на досуге, а мона примерчики несложные на мыльце?

Всего записей: 40 | Зарегистр. 08-02-2006 | Отправлено: 18:48 11-02-2006
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sept
А примерчики там же, в книге. Начиная с "Hello, Windows".

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 19:29 11-02-2006
Sept



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ссылка есть?

Всего записей: 40 | Зарегистр. 08-02-2006 | Отправлено: 19:33 11-02-2006
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sept
Угу. Тут должна лежать.
Кстати, на этом сайте ещё и другие хорошие книжки есть.

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 19:45 11-02-2006
Sept



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
большой сеньк за сайтик, полезненько будет его must'нуть read'нуть....

Всего записей: 40 | Зарегистр. 08-02-2006 | Отправлено: 19:48 11-02-2006
dan2k5



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пишу программу для клавиатуры, она обрабатывает дополнительные кнопки
play, stop, pause, volume down, volume up, www, email etc.
Реализовано все это с помощью хуков. Проблема вот в чем - на некоторые кнопки уже windows навесила свои программы, например, при нажатии на кнопку www запускается браузер, как сделать так, чтобы windows не обрабатывала эти кнопки?

Всего записей: 191 | Зарегистр. 14-06-2005 | Отправлено: 21:31 11-02-2006
Sept



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
найди прогу для полноценного мониторинга системы, удали браузер и посмотри, что винда, а главное куда пишет... на мой взгляд это реально осуществить

Всего записей: 40 | Зарегистр. 08-02-2006 | Отправлено: 22:09 11-02-2006
dan2k5



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sept
 
Нееее, твой способ мне не подходит.
Как быть тогда с кнопками volume up и volume down.
Windows изменяет громкость на 4 пункта, а мне надо, например, на 2?

Всего записей: 191 | Зарегистр. 14-06-2005 | Отправлено: 22:42 11-02-2006
Mindless



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dan2k5
ну насколько я помню, в процедуре обработки хука ызывается дальше цепочка хуков обычно, так ты её просто не вызывай. Вроде так.

Всего записей: 32 | Зарегистр. 31-10-2004 | Отправлено: 01:35 12-02-2006
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dan2k5
А какой хук вешаешь? WH_SHELL или WH_CALLWNDPROC?

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 02:07 12-02-2006
dan2k5



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
WH_KEYBOARD_LL
 
Mindless
Не катит, уже пробовал.
 
вот кусок моего кода:
написан правда на ассемблере, но используюся все те же API-функции.
 
LowLevelKeyboardProc proc nCode:DWORD, wParam:WPARAM, lParam:LPARAM
 
    cmp nCode, 0                            ;если nCode < 0, то вызываем CallNextHookEx
    jl q
    
    mov esi, lParam
    assume esi: ptr KBDLLHOOKSTRUCT
 
    mov eax, [esi].flags
    cmp al, 1                                ;если 1 то клавиша отпущена, 0 - нажата
    je q
 
    mov eax, [esi].vkCode
    shl eax, 8                                ;в ax заношу virtual-key code
    mov ebx, [esi].scanCode
    mov al, bl                                ;в al заношу hardware scan code
    
    assume esi: nothing
 
    .if eax == 0ff23h
        lea eax, [lpFile]
        invoke ShellExecute, NULL, offset szOpen, eax, NULL, NULL, SW_SHOW
    .endif
 
q:    invoke CallNextHookEx, hKbHook, nCode, wParam, lParam
    ret
LowLevelKeyboardProc endp

Всего записей: 191 | Зарегистр. 14-06-2005 | Отправлено: 10:07 12-02-2006 | Исправлено: dan2k5, 23:21 12-02-2006
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dan2k5

Цитата:
    mov eax, [esi].flags  
    cmp al, 1                                ;если 1 то клавиша отпущена, 0 - нажата  
    je q
 
 
1. Младший бит в flags - это не признак нажатия клавиши, это extended-key flag. Лучше пользуй константу LLKHF_UP - не прошибёшься.
2. Битовые поля проверяются не командой cmp, а командой test.
 

Цитата:
q:    invoke CallNextHookEx, hKbHook, nCode, wParam, lParam  
   ret  
 
 
Если ты передаёшь сообщение дальше по цепочке, не удивляйся, что его после тебя обрабатывает кто-то ещё. Ибо "If the hook procedure processed the message, it may return a nonzero value to prevent the system from passing the message to the rest of the hook chain or the target window procedure". (C) MSDN.
Обработал сам - верни (-1), дабы никто более посягал на обработку.
 
И ещё. Не упускай из виду следующее:

Цитата:
The hook procedure should process a message in less time than the data entry specified in the LowLevelHooksTimeout value in the following registry key:  
 
HKEY_CURRENT_USER\Control Panel\Desktop
 
The value is in milliseconds. If the hook procedure does not return during this interval, the system will pass the message to the next hook.
 
 
 
PS. А чем WH_SHELL не устраивает?

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 16:43 12-02-2006
react



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем !
 
 Помгоите решить проблемку. Я написал программу, которая автоматически нажимает на определенную кнопку в другой программе, все бы хорошо, только когда юзер делает Screen Lock моя програмка напрочь отказывается работать и ждет пока юзер разблокирует экран ...
 
Код выглядит примерно так:
 

Код:
 
 HWND saveButton = FindWindowEx(wnd, NULL, NULL, "&Save");
 SendMessage(saveButton, (UINT) BM_CLICK, (WPARAM) 0, (LPARAM) 0);  
 

 
 Вопрос в следующем: можно ли каким-то образом програмно нажать кнопку в другой  
 программе при заблокированном экране, если да то как ? Если кто-то сталкивался уже с  
 такой проблемой или знает примерные пути ее разрешения, помогите плиз, буду очень  
 признателен !!!
 
 Заранее огромное спасибо !

Всего записей: 773 | Зарегистр. 08-02-2002 | Отправлено: 19:05 12-02-2006
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
react
1. Можно вместо SendMessage использовать PostMessage - тогда твоя программа не заблокируется. Правда, и другая не отреагирует до снятия блокировки.
2. Можно попробовать сразу отослать BN_CLICKED родителю кнопки. Примерно так:

Код:
 
HWND saveButton = FindWindowEx(wnd, NULL, NULL, "&Save");  
HWND hParent=GetParent(saveButton);
WORD n=(WORD)GetDlgCtrlID(saveButton);
if(0!=n) {
  SendMessage(hParent,WM_COMMAND,MAKEWPARAM(n,BN_CLICKED),(LPARAM)saveButton);
}
 
 

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 21:13 12-02-2006
dan2k5



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
 

Цитата:
Лучше пользуй константу LLKHF_UP

Можешь объяснить, как? LLKHF_UP = 80h
 

Цитата:
Обработал сам - верни (-1), дабы никто более посягал на обработку.

Обработал, вернул -1, при нажатии на кнопку www работает мод код и все равно запускается браузер
 
С WH_SHELL попробую. Спасибо.

Всего записей: 191 | Зарегистр. 14-06-2005 | Отправлено: 23:19 12-02-2006
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dan2k5

Цитата:
Можешь объяснить, как? LLKHF_UP = 80h
 
Обыкновенно. Примерно так:

Код:
 
mov eax, [esi].flags
test eax,LLKHF_UP
jz KEY_WAS_PRESSED      ; 0 в 7 бите - клавиша нажата
...                                      ; Код, отрабатываемый при отпускания клавиши
jmp COMMON_CODE
KEY_WAS_PRESSED:
...                                      ; Код, отрабатываемый при нажатии клавиши
COMMON_CODE:
...                                      ; Код , отрабатываемый во всех случаях
 
 
Нужное добавить, лишнее убрать.
Остальные биты в flags обрабатываются примерно так же (если нужно).

Цитата:
Обработал, вернул -1, при нажатии на кнопку www работает мод код и все равно запускается браузер
 
Следующему хуку, надеюсь, не передаёшь управление в этом случае?
Проверь, срабатывает запуск браузера на нажатие кнопки, или на её отпускание. А то если ты отрабатываешь нажатие, а система реагирует на отпускание (ну, или наоборот), то так оно и будет.
Сама функция хука, разумеется, в DLL размещёна?

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 01:30 13-02-2006
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование с использованием WinAPI


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru