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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

Alamer

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Abs62
Спасибо =)
Так и думал что их надо не через реестр вытаскивать как в задании написано

Всего записей: 65 | Зарегистр. 23-01-2006 | Отправлено: 17:19 04-11-2008
0x7FFFFFF0

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я правильно понимаю что если есть int 0x00005678 то в памяти он будет выглядеть как :
0x78560000 ?  
Вопрос номер два:  
Как можно получить адрес стека и сегмента данных?

Всего записей: 2 | Зарегистр. 06-11-2008 | Отправлено: 02:57 06-11-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
0x7FFFFFF0
1. для x86-архитектуры -- да...
 
2. можно и вот так, наверное:
Код:
 
  unsigned long stackAddr = 0;
  unsigned long dataAddr  = 0;
 
_asm {
     xor   eax, eax
     mov  ax, ds
     mov  dword ptr dataAddr, eax
 
     xor   eax, eax
     mov  ax, ss
     mov  dword ptr stackAddr, eax
}
  printf("data = %0.4X; stack = %0.4X\n", dataAddr, stackAddr);

пусть знатоки меня поправят...

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 16:37 06-11-2008
Lyrik

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

Цитата:
Как можно получить адрес стека и сегмента данных?

Желательно уточнять какой адрес нужно получить. Если виртуальный, то akaGM написал верно.  
 

Всего записей: 388 | Зарегистр. 04-04-2006 | Отправлено: 17:33 06-11-2008
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
0x7FFFFFF0, не правильно. В памяти оно будет (от младших адресов к старшим) 0x78, 0x56, 0x00, 0x00.

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 21:22 06-11-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Qraizer
эээ...
ты ж повторил его последовательность...
?
 
0x7FFFFFF0
в общем, работает такое правило:
 
"старший байт на старших адресах, старшее слово на старших адресах"

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 21:43 06-11-2008
Qraizer



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
akaGM, не в коем разе не повторил, только сделал акцент на расположении байт. То, как он это написал, в равной мере может относиться к неверному пониманию принципов байт-адресуемой памяти, размещению в памяти объектов с размером, превышающем минимальную адресуемую единицу (обычно байт, но не обязательно, я, к примеру, встречался с архитектурой, где адресуемой единицей было 16-битное слово, а не 8-битный байт) или непониманю 2-й системы счисления в целом и её отношения к реальной действительности в частности.

----------
Одни с годами умнеют, другие становятся старше.

Всего записей: 613 | Зарегистр. 08-08-2006 | Отправлено: 23:18 07-11-2008 | Исправлено: Qraizer, 23:20 07-11-2008
0x7FFFFFF0

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу прощения я забыл упомянуть что адрес стека нужно найти в памяти другого процесса... Я думаю о инжекте кода но ведь есть альтернатива ?

Всего записей: 2 | Зарегистр. 06-11-2008 | Отправлено: 03:21 08-11-2008
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Qraizer
не уловил я тонкостей, ну да ладно...
 
0x7FFFFFF0
тогда тебе к ассемблерщикам, а ещё лучше -- к вирусописателям/вирусологам...

Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 15:14 10-11-2008
Lyrik

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
0x7FFFFFF0
Инжект - это надежно и просто, так что юзай лучше его

Всего записей: 388 | Зарегистр. 04-04-2006 | Отправлено: 19:00 10-11-2008
vixel



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, как в трей загнать объект (текст или картинку),
размером больше одной иконки. Такое часто делают программы,
которые рисуют в трее часы с разными скинами.

Всего записей: 2 | Зарегистр. 24-07-2007 | Отправлено: 09:43 12-11-2008
ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vixel
http://delphisite.ru/faq/sistemnye-funktsii-i-winapi/windows/sistemnyi-trei читай там, я сделал простенькие часы, которые заменили стандартные.

----------
И создал Бог женщину... Существо получилось злобное, но забавное...

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 10:00 12-11-2008
ChiPnGo



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть юнит на делфи, который описывает класс и его окно.
При создании происходит RegisterClass(wndClass) для класса окна, но в wndClass нужно передавать указатель на WndProc (TWndClass.lpfnWndProc). А эта функция должна использовать поля конкретного объекта, поскольку нужно иметь возможность открывать много таких окон в одной программе.
 
Можно ли как-то вписать WndProc методом класса? (или еще как-то обойти)
Если адреса Вндпроцедур будут разными - то у них должны быть разные классы окна?
 
ПС Кроме этой функции есть еще и другие с подобной проблемой.

Всего записей: 149 | Зарегистр. 25-10-2008 | Отправлено: 22:27 12-11-2008
Abs62



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

Цитата:
Можно ли как-то вписать WndProc методом класса?

Нет, нельзя. Метод класса от обычной функции отличается тем, что в него кроме явно описанных параметров передаётся ещё один скрытый - указатель на экземпляр класса.  

Цитата:
(или еще как-то обойти)

Обойти можно. Записать указатель на класс в структуру окна через SetWindowLongPtr с параметром GWLP_USERDATA, а в оконной функции извлекать его через GetWindowLongPtr и вызывать нужные методы через него как через обычный указатель.

Цитата:
Если адреса Вндпроцедур будут разными - то у них должны быть разные классы окна?

Обычно одна оконная функция обслуживает все окна данного класса. Но при необходимости можно задать и другую оконную функцию для конкретного окна. С помощью SetWindowLongPtr с параметром GWLP_WNDPROC.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 23:36 12-11-2008 | Исправлено: Abs62, 23:38 12-11-2008
ChiPnGo



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Полезные функции.  А откуда их подгружать? В старых версиях заголовочных файлов такого нет.

Всего записей: 149 | Зарегистр. 25-10-2008 | Отправлено: 01:11 13-11-2008
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ChiPnGo
Если не предполагается создание 64-разрядного кода, можно использовать SetWindowLong/GetWindowLong.
Или добавить прототипы самому. См. здесь, например.


----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 01:48 13-11-2008
vserd

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

Цитата:
Можно ли как-то вписать WndProc методом класса? (или еще как-то обойти)  
Если адреса Вндпроцедур будут разными - то у них должны быть разные классы окна?  

Попробуй мой пост http://forum.ru-board.com/topic.cgi?forum=33&topic=5223  
В создании окон не пробовал, но в других местах срабатывает.
 
первоисточник: http://ifolder.ru/9050972 , в инете статьи уже на нахожу.

Всего записей: 2065 | Зарегистр. 08-05-2002 | Отправлено: 10:44 13-11-2008
lorents



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
помогите пожалуйста сделать такое
хочу сделать код сохранить файл и что бы была проверка на наличие если есть такой файл выдать диалоговое окно предупреждения  
 
 

Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 20:41 13-11-2008
Abs62



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
lorents
GetSaveFileName с установленным флагом OFN_OVERWRITEPROMPT.

----------
0 программистов ругал сердитый шеф
Потом уволил одного, и стало их FF

Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 21:30 13-11-2008
lorents



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Abs62
я извиняюсь, простоя я не на C++ программирую
вы уж извините, но если вам не очень трудно не могли бы написать пример на C++ с вызовом и проверки и с объяснением что к чему, очень надо, если вам не очень трудно напишите пожалуйста

Всего записей: 3297 | Зарегистр. 30-12-2007 | Отправлено: 22:20 13-11-2008 | Исправлено: lorents, 22:43 13-11-2008
Открыть новую тему     Написать ответ в эту тему

Страницы: 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