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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.12.2009, 16:59   #1
Xatr
Форумчанин
 
Аватар для Xatr
 
Регистрация: 17.09.2008
Сообщений: 349
Вопрос [masm32] GetCurrentDirectoryA

Есть форма (CreateWindowEx), в ней есть CheckBox и Button. При нажатии на кнопку, создаётся раздел в реестре (RegCreateKeyEx) и в этом разделе создаётся ключ (RegSetValueEx), значение которого - путь, в котором лежит exe (GetCurrentDirectoryA). После чего выполняется функция RegCloseKey. Это всё работает.
Проблема в том, что после выполнения функции GetCurrentDirectoryA, функция:
Код:
invoke SendMessage,am,BM_GETCHECK,0,0
в любом случае возвращает 0, даже, когда флажок установлен.
Часть кода, создание checkbox:
Код:
invoke CreateWindowEx,0,ADDR s,ADDR w,WM_VISIBLE or WM_CHILD or BS_AUTOCHECKBOX or WS_TABSTOP,265,237,182,13,at,0,au,0
mov am,eax
прописывание в реестре:
Код:
invoke RegOpenKeyEx,HKEY_CURRENT_USER,addr f,0,KEY_ALL_ACCESS,addr d
cmp eax,0
je r
invoke RegCreateKeyEx,HKEY_CURRENT_USER,addr f,0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,0,addr d,0
invoke GetCurrentDirectoryA,MAX_PATH,addr o
mov o[eax],92
inc eax
invoke RegSetValueEx,d,addr p,0,REG_SZ,addr o,eax
invoke RegSetValueEx,d,addr g,0,REG_SZ,addr j,2
invoke RegSetValueEx,d,addr k,0,REG_SZ,addr l,17
invoke RegSetValueEx,d,addr m,0,REG_SZ,addr n,6
invoke RegCloseKey,addr d
;конец прописывания
r:
invoke SendMessage,am,BM_GETCHECK,0,0
cmp eax,0
je exit
invoke RegOpenKeyEx,HKEY_CURRENT_USER,addr f,0,KEY_ALL_ACCESS,addr d
invoke RegSetValueEx,d,addr ak,0,REG_SZ,addr ao,1
invoke RegCloseKey,addr d
если чем помог, поставьте отзыв на весы
Xatr вне форума Ответить с цитированием
Старый 03.12.2009, 18:52   #2
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

Return Value

The return value from a button created with the BS_AUTOCHECKBOX, BS_AUTORADIOBUTTON, BS_AUTO3STATE, BS_CHECKBOX, BS_RADIOBUTTON, or BS_3STATE style can be one of the following.

BST_CHECKED Button is checked.
BST_INDETERMINATE Button is grayed, indicating an indeterminate state (applies only if the button has the BS_3STATE or BS_AUTO3STATE style).
BST_UNCHECKED Button is cleared


Remarks

If the button has a style other than those listed, the return value is zero.

проверяй код, комп не ошибается
Д'якон вне форума Ответить с цитированием
Старый 03.12.2009, 19:18   #3
Xatr
Форумчанин
 
Аватар для Xatr
 
Регистрация: 17.09.2008
Сообщений: 349
По умолчанию

Весь прикол в том, что когда я убираю GetCurrentDirectoryA, всё прекрасно работает. Когда CheckBox отмечен, в eax - 1, когда не отмечен, eax - 0.
Но, когда добавляю GetCurrentDirectoryA, отмечаю CheckBox или не отмечаю, в eax - 0.
Даже, когда SendMessage ставил выше GetCurrentDirectoryA в коде - работало только при первом нажатии на кнопку, при втором нажатии (и предварительном удалении раздела в реестре) - уже не добавляет.
если чем помог, поставьте отзыв на весы

Последний раз редактировалось Xatr; 03.12.2009 в 19:25.
Xatr вне форума Ответить с цитированием
Старый 03.12.2009, 20:06   #4
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

Выложи сорсы полностью
Д'якон вне форума Ответить с цитированием
Старый 04.12.2009, 17:52   #5
Xatr
Форумчанин
 
Аватар для Xatr
 
Регистрация: 17.09.2008
Сообщений: 349
По умолчанию

Весь мой код:
Вложения
Тип файла: rar prog.rar (1.7 Кб, 20 просмотров)
если чем помог, поставьте отзыв на весы
Xatr вне форума Ответить с цитированием
Старый 04.12.2009, 19:04   #6
Д'якон
Форумчанин
 
Регистрация: 05.12.2007
Сообщений: 236
По умолчанию

1.Код написан ужасно!!!!!!!!!!!!!!! Я даже когда начинал изучать ассемблер так не писал.
2. Это прикол? .ELSEIF e==111h;WM_COMMAND )))))
3. Проблема в том что портится хэндл окна - он забивается текстом
4. Ты смотрел в отладчике?
5. Вот твоя причина:

o db 0
am dd 0

и ты о используешь как:
invoke GetCurrentDirectoryA,MAX_PATH,addr o

Ты в о помещаешь путь, под который ты отвел 1 байт. Естно он забъет все близлежащие переменные

P/S/ Пользуйся диалогами - не страдай фигней.

что это за обозначение переменных? черт ногу сломит

au dd ?
h dd 0 ;буквы в кнопках не жирные
d dd 0
o db 0
am dd 0
zz dd 0
.const
a db "prog",0
b db "static",0
f db "SOFTWARE\121",0
g db "InstallLang",0
j db "ru",0
k db "Install",0
l db "1111",0
m db "InstallVers",0
n db "1.6.01",0
p db "InstallPath",0
q db "5464",0
s db "button",0
t db "Запустить",0
u db "1.exe",0
w db "Больше не показывать это окно",0
v db "121",34,0
x db "212",0
y db "333",0
z db "444",0
aa db "555",0
ab db "666",0
ac db "777",0
ad db "open",0
ae db "c1",0
af db "t854",0
ag db "c2",0
aj db "986",0
ai db "c3",0
ak db "hide",0
ao db "1",0
Д'якон вне форума Ответить с цитированием
Старый 07.12.2009, 16:14   #7
Xatr
Форумчанин
 
Аватар для Xatr
 
Регистрация: 17.09.2008
Сообщений: 349
По умолчанию

Я уже сам нашёл ошибку. Проблема была в
Код:
o db 0
А нужно было массивом символов.
А константы со значением "111", "222" и т. д. к функции отношения не имеют, поэтому и с такими значениями.
У меня остался 1 вопрос. Как прочитать значение ключа из реестра, который был создан после функции "SendMessage..."? Какие параметры писать в функции RegQueryValueEx?
если чем помог, поставьте отзыв на весы

Последний раз редактировалось Xatr; 07.12.2009 в 19:21.
Xatr вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MASM32, начало Delffinn Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 12 19.07.2012 19:09
masm32 v9. не линкует программу Alcash Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 7 23.06.2008 09:57
Random на MASM32 Ulex Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 02.05.2008 16:00
DirectX на masm32 Ulex Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 10.03.2008 23:05