Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Несколько вопросов

9.6K
24 сентября 2007 года
m@k$
74 / / 27.02.2007
Люди, помогите. У меня есть несколько вопросов. Напишите плиз кто че знает
1. Как создать "дочернее" окно и как потом сохранить то, что там ввели в переменную
2. У меня есть окно, а как внутри добавить кнопку или что-то подобное(текст и т.п.)
3. Как в окне вывести время (системное)
4. Как создать ярлыки внутри окна (чтобы при нажатии на ярлык открывался файл, ну как обычно)
5. Как внутри окна создать закладки, при нажатии которых менялись эти ярлыки
6. Как програмно заблокировать ctrl+alt+f4 и ctrl+alt+del
7. Как заблокировать нажатие ctrl+alt+del в blockinput()
8. Почему на других кампах не запускаются мои приложения(про это поподробнее)
268
24 сентября 2007 года
Михаил
587 / / 25.06.2005
Цитата: m@k$
Люди, помогите. У меня есть несколько вопросов. Напишите плиз кто че знает
1. Как создать "дочернее" окно и как потом сохранить то, что там ввели в переменную
2. У меня есть окно, а как внутри добавить кнопку или что-то подобное(текст и т.п.)
3. Как в окне вывести время (системное)
4. Как создать ярлыки внутри окна (чтобы при нажатии на ярлык открывался файл, ну как обычно)
5. Как внутри окна создать закладки, при нажатии которых менялись эти ярлыки
6. Как програмно заблокировать ctrl+alt+f4 и ctrl+alt+del
7. Как заблокировать нажатие ctrl+alt+del в blockinput()
8. Почему на других кампах не запускаются мои приложения(про это поподробнее)



1. Дочерние и вообще окна создаются при помощи CreateWindow и CreateWindowEx. Вводить можно в окно класса EDIT, чтобы получить что введено нужно послать сообщение WM_GETTEXT
2. CreateWindow, CreateWindowEx. Классы BUTTON, STATIC
3. Получить время, либо встроенными инструментами либо API функцией GetLocalTime.
4. Обрабатывать события входа/выхода мыши в/с клиентской области ярлыка.
8. А разве они должны запускаться?

9.6K
25 сентября 2007 года
m@k$
74 / / 27.02.2007
Я извиняюсь конечно, но я не совсем понял 4. Просто для меня програмирование больше как хобби, поэтому я не очень шарю.В 4 вообще ничего не понял. И маленькая просьба дальше чуть чуть поподробнее пожалуйста. 1,2,3 попробую, спс. А насчет
Цитата:
8. А разве они должны запускаться?

а как иначе? Как то ж делают программы, другие люди их скачивают, устанавливают, используют. Или С++ - это только для себя???

261
25 сентября 2007 года
ahilles
1.5K / / 03.11.2005
Цитата: m@k$

8. Почему на других кампах не запускаются мои приложения(про это поподробнее)


ты лучше сам расскажи поподробнее, что за приложение. Может оно юзает какие нибудь базы данных или может оно .NET либо может использует какие нибудь DLL которых нет на других машинах

9.6K
26 сентября 2007 года
m@k$
74 / / 27.02.2007
Я могу принести на форум. Вам нужен только сам экзешник или весь проэкт?Просто нет дома инета, приходится выкручиваться...
268
26 сентября 2007 года
Михаил
587 / / 25.06.2005
лучше конечно исходник
367
26 сентября 2007 года
Meatcoins
303 / / 18.01.2006
Цитата:

6. Как програмно заблокировать ctrl+alt+f4 и ctrl+alt+del


Можно поставить Hook на ZwCreateThread, а потом проверять, если это taskmng.exe, то получаем его Id, потом вызываем OpenProcess с Id и с флагом TERMINATE_PROCESS, получаем его handle, а потом делаем ему TerminateProcess.
Мне кажется это как вариант вполне подойдёт.
А Alt-Ctr-F4 аналогично, только Hook, наверное, будем ставить на TerminateProcess. Если это наш процесс, то просто не вызываем эту функцию или возвращаем код ошибки.
Как ставить Hook написано в какой-то статье на wasm.ru.

Код:
LibMain proc instance:DWORD,reason:DWORD,unused:DWORD
    .if reason == DLL_PROCESS_ATTACH
      push instance
      pop hInstance    
      call SetGlobalHook
      call SetHook
      mov eax, TRUE
    .elseif reason == DLL_PROCESS_DETACH
      call Unhook                  
    .elseif reason == DLL_THREAD_ATTACH
    .elseif reason == DLL_THREAD_DETACH
    .endif
    ret
LibMain endp


Код:
MessageProc proc Code:DWORD,wParam:DWORD,lParam:DWORD
invoke CallNextHookEx,0h,dword ptr Code,dword ptr wParam,dword ptr lParam
mov eax,0h
ret
MessageProc endp


SetGlobalHookProc proc
invoke SetWindowsHookEx,WH_GETMESSAGE,offset MessageProc,dword ptr hInstance,0h
.if eax==0h
.else
mov dword ptr hook_handle,eax
.endif
invoke Sleep,INFINITE
ret
SetGlobalHookProc endp


SetGlobalHook proc
local TrId:DWORD
local hMutex:DWORD
invoke CreateMutex,0h,FALSE,$CTA0("SomeString")
.if eax!=0
invoke CreateThread,0h,0h,offset SetGlobalHookProc,0h,0h,addr TrId
.if eax==0h
.else
.endif
invoke CloseHandle,dword ptr hMutex
.endif
ret
SetGlobalHook endp


CreateMutex нужен, чтоб поставить Hook 1 раз.
В чём вся штука:
Если поставить такой Hook:
invoke SetWindowsHookEx,WH_GETMESSAGE,offset MessageProc,dword ptr hInstance,0h
То наша Dll будет прилепляться ко всем процессам с окнами, т.е. с PeekMessage и DispatchMessage.
Она будет получать DLL_PROCESS_ATTACH, после чего мы делаем перехват вышеприведённых функций, например, методом сплайсинга...

P.S.
Напиши как кнопки в окнах делать без MFC, если понял как...
9.6K
26 сентября 2007 года
m@k$
74 / / 27.02.2007
Только не говори что ТАКОЙ код ты смог написать, а кнопку сделать не можешь?! Ладно, если серьезно до конца так и не дошло. Понял, что надо делать CreateWindow, но у меня первый параметр выдает ошибку. Слушай, а знаешь ГДЕ надо писать код, чтобы он выполнялся только ПОСЛЕ ПОЛНОЙ загрузки программы?
367
26 сентября 2007 года
Meatcoins
303 / / 18.01.2006
Цитата:

Только не говори что ТАКОЙ код ты смог написать, а кнопку сделать не можешь?!


Почему-то об этом мало пишут или мне не попадается.
Мне 1 раз попалась книжка C++ для чайников. Вот там это было всё очень хорошо описано. Но только автора забыл и ничего похожего не нашёл ни в сети, ни в книжном магазине.
Да собственно, как-то я этим и не занимался слишком упорно...
Так не нашёл, отвлёкся, занялся чем-то другим и всё...
Спрашивал у друзей-программистов, а они сами не знают. Говорят, что да нафиг надо, лучше в Delphi или в Visual Studio 2005 всё графически нарисовать и всё... А кто-то вообщё на C# пересел и говорит, что в гробу видел теперь WinAPI.
Вот так... руки не доходят...

Вот я пытался кнопочку нарисовать хотя бы, но что-то пока не получилось... Как-то неправильно она рисуется...

Код:
.386

.model flat,stdcall
option casemap:none


WinMain proto :DWORD,:DWORD,:DWORD,:DWORD


             include E:\masm32\include\windows.inc
             include E:\masm32\include\kernel32.inc
             include E:\masm32\include\user32.inc
             include E:\masm32\include\advapi32.inc
             include E:\masm32\include\gdi32.inc
             includelib E:\masm32\lib\kernel32.lib
             includelib E:\masm32\lib\user32.lib
             includelib E:\masm32\lib\advapi32.lib
             includelib E:\masm32\lib\gdi32.lib
             include E:\masm32\macros\Strings.mac

.DATA
ClassName db "SimpleWinClass",0

AppName  db "Our First Window",0
OurText  db "Win32 assembly is great and easy!",0


.DATA?
hInstance HINSTANCE ?
CommandLine LPSTR ?


.CODE
start:
    invoke GetModuleHandle, NULL

    mov    hInstance,eax
    invoke GetCommandLine
    mov CommandLine,eax
    invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT

    invoke ExitProcess,eax

WinMain proc hInst:HINSTANCE, hPrevInst:HINSTANCE, CmdLine:LPSTR,
CmdShow:DWORD

    LOCAL wc:WNDCLASSEX
    LOCAL msg:MSG
    LOCAL hwnd:HWND

    mov   wc.cbSize,SIZEOF WNDCLASSEX
    mov   wc.style, CS_HREDRAW or CS_VREDRAW
    mov   wc.lpfnWndProc, OFFSET WndProc
    mov   wc.cbClsExtra,NULL
    mov   wc.cbWndExtra,NULL
    push  hInst
    pop   wc.hInstance
    mov   wc.hbrBackground,COLOR_WINDOW+1
    mov   wc.lpszMenuName,NULL
    mov   wc.lpszClassName,OFFSET ClassName
    invoke LoadIcon,NULL,IDI_APPLICATION
    mov   wc.hIcon,eax
    mov   wc.hIconSm,eax
    invoke LoadCursor,NULL,IDC_ARROW
    mov   wc.hCursor,eax
    invoke RegisterClassEx, addr wc

    invoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
           WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\

           CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
           hInst,NULL

    mov   hwnd,eax
    invoke ShowWindow, hwnd,SW_SHOWNORMAL
    invoke UpdateWindow, hwnd
        .WHILE TRUE

               invoke GetMessage, ADDR msg,NULL,0,0
               .BREAK .IF (!eax)
               invoke TranslateMessage, ADDR msg
               invoke DispatchMessage, ADDR msg

        .ENDW
        mov     eax,msg.wParam
        ret
WinMain endp


WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    LOCAL hdc:HDC

    LOCAL ps:PAINTSTRUCT
    LOCAL rect:RECT
    .IF uMsg==WM_DESTROY
        invoke PostQuitMessage,NULL

    .ELSEIF uMsg==WM_PAINT
        invoke BeginPaint,hWnd, ADDR ps
        mov    hdc,eax
        invoke GetClientRect,hWnd, ADDR rect

        invoke DrawText, hdc,ADDR OurText,-1, ADDR rect, \
                DT_SINGLELINE or DT_CENTER or DT_VCENTER


invoke DrawText,dword ptr hdc,$CTA0("String",szStr),sizeof szStr-1,addr rect,DT_CENTER

lea esi,rect
assume esi:ptr RECT
mov dword ptr [esi].left,020h
mov dword ptr [esi].top,020h
mov dword ptr [esi].right,060h
mov dword ptr [esi].bottom,040h
assume esi:nothing

invoke DrawFrameControl,dword ptr hdc,addr rect,DFC_BUTTON,0h
.if eax==0h
invoke MessageBox,0h,$CTA0("Creating Button Error"),$CTA0("Error"),MB_OK
.endif

        invoke EndPaint,hWnd, ADDR ps
    .ELSE

        invoke DefWindowProc,hWnd,uMsg,wParam,lParam
        ret
    .ENDIF
    xor   eax, eax
    ret
WndProc endp
end start


А что на счёт ТАКОГО кода... то это я просто пример на wasm.ru с Delphi перевёл на Assembler и всё... Не люблю Delphi за громоздкость... и код там генерируется хрен знает как... А в Assembler'е всё понятно - что написал - то и есть!
Просто пока переводил понял суть всех этих хитрых манипуляций.
Зачем Mutex, зачем Hook ставить на WH_GETMESSAGE и т.д.
Там примерчик был типа, как стать невидимым для TaskManedger'а, но ведь можно же, поняв суть, сделать и что-то другое, сделать RegMonitor своими руками, замочить вирус, который вырубает комп, отслеживать создание файлов или скрыть файлы, чтоб твою фирму не оштрафовали за использование нелицензионных программ и т.д. и т.п.

Цитата:

Слушай, а знаешь ГДЕ надо писать код, чтобы он выполнялся только ПОСЛЕ ПОЛНОЙ загрузки программы?


Немного смысла не понял...
Я всегда думал, что вначале программа загружается, а потом уже исполняется её код, поэтому первая же команда исполняется после "полной" загрузки!

9.6K
28 сентября 2007 года
m@k$
74 / / 27.02.2007
Понимаешь, у меня окно графическое. И я хочу, чтобы сначала включилась прога, полностью загрузилась(появилась картинка) а через несколько сек начинал запускаться мой код. А у меня пока получается так что камп "виснет" секунды на 2(в это время исполняется весь код) а потом загружается окно и в нем картинка.
367
30 сентября 2007 года
Meatcoins
303 / / 18.01.2006
Вначале пишешь всё до CreateWindowEx, потом ShowWindow и UpdateWindow - вначале появляется окно!
А затем что-то типа call your_function, ну или вызов твоей функции.
Цитата:
А у меня пока получается так что камп "виснет" секунды на 2(в это время исполняется весь код) а потом загружается окно и в нем картинка.


На чём пишешь?
С++ Builder?
Если вначале код исполняется, то значит просто с компилятором разберись.
Я ж не знаю как там у тебя.
Может быть у тебя компилятор сам окна рисует типа графически, а код окна тебе не показывает. А то, что ты пишешь выполняется почему-то до создания окна. Значит разберись с компилятором.
В Assembler'е всё понятно, что написал - то и будет и именно в такой последовательности!

9.6K
01 октября 2007 года
m@k$
74 / / 27.02.2007
Пишу в Visual Studio 2005. Кстати вот сам проэкт я не могу загрузить. Пишет, что размер сильно большойю. Че делать?
367
02 октября 2007 года
Meatcoins
303 / / 18.01.2006
Ну раз большой, то ладно...
А ты хотел исходник кинуть?
Видел я 2005 Studio. Там и C# и C++ есть...
Класная штука!
Но себе такой ещё не достал...
У меня есть только Microsoft Visual Studio C++ 6.0.

Короче, я вкладочку тебе сделаю. Глянешь там мой пример. Исходники прилагаются.

Обрати внимание на это:
(Может быть это как раз что нужно)
Код:
invoke CreateWindowEx,NULL,ADDR ClassName,ADDR AppName,\
           WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,\

           CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,\
           hInst,NULL

;Создаётся окно!

    mov   hwnd,eax
    invoke ShowWindow, hwnd,SW_SHOWNORMAL
    invoke UpdateWindow, hwnd

;Окно отображается!

call Some  ; Это некая функция, которая что-то делает!
;invoke CreateThread,0h,0h,offset Some,0h,0h,offset ThreadId


А это Some:
Код:
Some proc
xor ecx,ecx
        .WHILE ecx < 0FFED0000h
inc ecx
xor edx,edx
        .ENDW

invoke MessageBox,0h,$CTA0("Hello"),$CTA0("Hello"),MB_OK
;invoke ExitThread,0h
ret
Some endp

Ну, тут просто цикл, который время занимает!

Если запустишь это, то комп вначале создаст окно! (Как тебе надо!)
А потом висит! Это он в цикле висит!
Можно этот цикл в отдельный поток загнать вот так:
invoke CreateThread,0h,0h,offset Some,0h,0h,offset ThreadId
Который потом завершить вот так:
invoke ExitThread,0h

Вот и всё!
9.6K
02 октября 2007 года
m@k$
74 / / 27.02.2007
Ладно, попробую, спс. А как насчет BlockInput().Есть какие-нибудь варианты заблокировать в нем Ctrl+Alt+Del, чтоб не сбивался BlockInput()
367
03 октября 2007 года
Meatcoins
303 / / 18.01.2006
Пишем вот такую DLL'ку:
Код:
.486
      .model flat, stdcall
      option casemap :none

      include E:\masm32\include\windows.inc
      include E:\masm32\include\user32.inc
      include E:\masm32\include\kernel32.inc      
      includelib E:\masm32\lib\user32.lib
      includelib E:\masm32\lib\kernel32.lib
      include E:\masm32\macros\Strings.mac      
      include E:\masm32\include\w2k\ntstatus.inc
      include E:\masm32\include\w2k\native.inc
      include E:\masm32\include\w2k\ntdll.inc          
      includelib E:\masm32\lib\w2k\ntdll.lib

Minute equ 0EA60h

BYTES struc
    jmpcode     db  ?
            addrcode                       dd        ?
            retcode                         db        ?
BYTES ends


      .data?
        hInstance dd ?
       
        ZwAddr dd ?
       
        hook_handle dd ?
         
        old_bytes BYTES <>
        new_bytes BYTES <>
       

      .code

LibMain proc instance:DWORD,reason:DWORD,unused:DWORD
    .if reason == DLL_PROCESS_ATTACH

      push instance
      pop hInstance
     

                    call      SetGlobalHook
                    call      SetHook

         mov eax, TRUE
   
    .elseif reason == DLL_PROCESS_DETACH
                   call       Unhook                  
                   ;push instance
                                ;pop hInstance
                                ;mov eax, TRUE

                                ;mov eax,1h
    .elseif reason == DLL_THREAD_ATTACH
    .elseif reason == DLL_THREAD_DETACH
    .endif
    ret

LibMain endp





NewZwQuerySystemInformation proc ASystemInformationClass:DWORD,ASystemInformation:DWORD,ASystemInformationLength:DWORD,AReturnLength:DWORD
local rwbytes:DWORD
local myId:DWORD
local process_handle:DWORD
local dwMemAddr:DWORD


invoke WriteProcessMemory,INVALID_HANDLE_VALUE,dword ptr ZwAddr,offset old_bytes,6h,addr rwbytes
invoke ZwQuerySystemInformation,ASystemInformationClass,ASystemInformation,ASystemInformationLength,AReturnLength
push eax

invoke GetCurrentProcessId
mov myId,eax
invoke OpenProcess,PROCESS_TERMINATE,FALSE,myId
.if eax!=0h
mov process_handle,eax

invoke VirtualAlloc,0h,1000h,MEM_COMMIT,PAGE_READWRITE
mov dwMemAddr,eax

invoke GetModuleFileName,process_handle,dwMemAddr,1000h
invoke lstrlen,dwMemAddr
mov esi,dwMemAddr
add esi,eax

CTA0 "taskmng.exe",szTaskMngStr

invoke lstrlen,szTaskMngStr
sub esi,eax

invoke lstrcmp,esi,addr szTaskMngStr
.if eax==0h
invoke ExitProcess,0h
.endif

invoke CloseHandle,process_handle
invoke VirtualFree,dwMemAddr,1000h,MEM_DECOMMIT
.endif


invoke WriteProcessMemory,INVALID_HANDLE_VALUE,dword ptr ZwAddr,offset new_bytes,6h,addr rwbytes
pop eax
ret
NewZwQuerySystemInformation endp


SetHook proc
local rwbytes:DWORD
invoke GetModuleHandle,$CTA0("ntdll.dll")
invoke GetProcAddress,eax,$CTA0("ZwQuerySystemInformation")
mov dword ptr ZwAddr,eax
invoke ReadProcessMemory,INVALID_HANDLE_VALUE,dword ptr ZwAddr,offset old_bytes,6h,addr rwbytes
push esi
mov esi,offset new_bytes
assume esi:ptr BYTES
mov [esi].jmpcode,68h
mov [esi].addrcode,offset NewZwQuerySystemInformation
mov [esi].retcode,0C3h
assume esi:nothing
pop esi
invoke WriteProcessMemory,INVALID_HANDLE_VALUE,dword ptr ZwAddr,offset new_bytes,6h,addr rwbytes
ret
SetHook endp








MessageProc proc Code:DWORD,wParam:DWORD,lParam:DWORD
 invoke CallNextHookEx,0h,dword ptr Code,dword ptr wParam,dword ptr lParam
 mov eax,0h
ret
MessageProc endp


SetGlobalHookProc proc
invoke SetWindowsHookEx,WH_GETMESSAGE,offset MessageProc,dword ptr hInstance,0h
.if eax==0h
.else
mov dword ptr hook_handle,eax
.endif
invoke Sleep,INFINITE
ret
SetGlobalHookProc endp


SetGlobalHook proc
local TrId:DWORD
local hMutex:DWORD
invoke CreateMutex,0h,FALSE,$CTA0("SomeString")
.if eax!=0
invoke CreateThread,0h,0h,offset SetGlobalHookProc,0h,0h,addr TrId
.if eax==0h
.else
.endif
invoke CloseHandle,dword ptr hMutex
.endif
ret
SetGlobalHook endp


Unhook proc
local rwbytes:DWORD
invoke WriteProcessMemory,INVALID_HANDLE_VALUE,dword ptr ZwAddr,offset old_bytes,6h,addr rwbytes
ret
Unhook endp

end LibMain


Функция перехвата:
Код:
NewZwQuerySystemInformation proc ASystemInformationClass:DWORD,ASystemInformation:DWORD,ASystemInformationLength:DWORD,AReturnLength:DWORD
local rwbytes:DWORD
local myId:DWORD
local process_handle:DWORD
local dwMemAddr:DWORD


invoke WriteProcessMemory,INVALID_HANDLE_VALUE,dword ptr ZwAddr,offset old_bytes,6h,addr rwbytes
invoke ZwQuerySystemInformation,ASystemInformationClass,ASystemInformation,ASystemInformationLength,AReturnLength
push eax

;Получаем Id текущего процесса!
invoke GetCurrentProcessId
mov myId,eax

;Открываем этот процесс - получаем его Handle!
invoke OpenProcess,PROCESS_TERMINATE,FALSE,myId
.if eax!=0h
mov process_handle,eax

;Можно и без этого...
invoke VirtualAlloc,0h,1000h,MEM_COMMIT,PAGE_READWRITE
mov dwMemAddr,eax

;Определяем полный путь к процессу!
invoke GetModuleFileName,process_handle,dwMemAddr,1000h
invoke lstrlen,dwMemAddr
mov esi,dwMemAddr
add esi,eax

;Строчка для сравнения!
CTA0 "taskmng.exe",szTaskMngStr

;Получаем длинну этой строчки...
invoke lstrlen,szTaskMngStr
sub esi,eax

;Если строки равны, то значит это TaskMng.exe - значит мочим его
;просто тупым вызовом ExitProcess!

invoke lstrcmp,esi,addr szTaskMngStr
.if eax==0h
invoke ExitProcess,0h
.endif

invoke CloseHandle,process_handle
invoke VirtualFree,dwMemAddr,1000h,MEM_DECOMMIT
.endif


invoke WriteProcessMemory,INVALID_HANDLE_VALUE,dword ptr ZwAddr,offset new_bytes,6h,addr rwbytes
pop eax
ret
NewZwQuerySystemInformation endp


И ещё где-то тут ошибка у меня логическая:
Код:
invoke GetModuleFileName,process_handle,dwMemAddr,1000h
invoke lstrlen,dwMemAddr
mov esi,dwMemAddr
add esi,eax

;Строчка для сравнения!
CTA0 "taskmng.exe",szTaskMngStr

;Получаем длинну этой строчки...
invoke lstrlen,szTaskMngStr
sub esi,eax

;Если строки равны, то значит это TaskMng.exe - значит мочим его
;просто тупым вызовом ExitProcess!

invoke lstrcmp,esi,addr szTaskMngStr
.if eax==0h
invoke ExitProcess,0h
.endif

Короче работает, но некорректно как-то...
Суть, короче, такая, что ты получаешь строку исполняемого процесса и смотришь - taskmng.exe это или нет. Если это taskmng.exe, то надо его завершить!
Просто неохото было это отлаживать до конца...
Думаю, принцип понятен...
Может быть это то, что тебе надо...
9.6K
03 октября 2007 года
m@k$
74 / / 27.02.2007
Слушай, а ты пишешь на С++?Я не уверен, ато знаю только С++ и Паскаль... Если нет, можешь тоже самое, но на С++?
Зато я понял как делать кнопки без MFC!!!
Цитата:
//Сначала регистрируешь
HWND button;
//Вот сам код:
button = CreateWindow(
"BUTTON", // класс(в нашем случае кнопка)
"ДА! ДА! ДА!", // текст кнопки
WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,/* стили(посмотришь в MSDN) */
10, // х координата кнопки
10, // у координата кнопки
100, // ширина кнопки
100, // высота кнопки
hWnd, // в каком окне создавать эту кнопку
NULL, // Без меню
hInstance,//сам не понял че это такое
NULL); // тут тоже


Но зато я пока не понял как привязать кнопку к опр. дейст

Кстати, может проще пообщатся в асе? Если да, стучи 476415547

367
03 октября 2007 года
Meatcoins
303 / / 18.01.2006
На C++ пишу, но считаю, что Венец Творения - это то, что написано на Assembler'е! Так как нет ничего, что было бы быстрее Assembler'а!!!
Просто мне бы не очень охото было бы тупо переписывать это на C++ ещё...
Ещё чем мне нравится Assembler - это наличие отладчиков, типа Olly!
Хотя, надо отметить, что есть и встроенные отладчики как в Delphi, так и в C++...

На C++ это переписать можно...
Попробуй...
http://wasm.ru/print.php?article=apihook_1
Скачай ProcHide (10 кб) там архив.
Исходник на Delphi - с ним тебе возможно проще будет...


Цитата:

Но зато я пока не понял как привязать кнопку к опр. дейст


Это просто делается. Там где у тебя оконная фунция с параметрами: WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
LOCAL hdc:HDC
там есть длинный switch!
Вот как раз в нём и идёт обработка сообщений и от кнопок и т.д.

Асю можно, но не сегодня...


Кстати, спасибо за Кнопку!
Попробую разобраться на досуге!
А hInstance - это, кажется, что-то связанное с Handle'ом твоего процесса или это и есть Handle твоего процесса!

268
04 октября 2007 года
Михаил
587 / / 25.06.2005
автору: информацию про стандартные контролы можно найти в MSDN
367
04 октября 2007 года
Meatcoins
303 / / 18.01.2006
Всё-таки написал!
Глянь вкладочку!
Код:
.486
      .model flat, stdcall
      option casemap :none

      include E:\masm32\include\windows.inc
      include E:\masm32\include\user32.inc
      include E:\masm32\include\kernel32.inc      
      includelib E:\masm32\lib\user32.lib
      includelib E:\masm32\lib\kernel32.lib
      include E:\masm32\macros\Strings.mac      
      include E:\masm32\include\w2k\ntstatus.inc
      include E:\masm32\include\w2k\native.inc
      include E:\masm32\include\w2k\ntdll.inc          
      includelib E:\masm32\lib\w2k\ntdll.lib

Minute equ 0EA60h

BYTES struc
    jmpcode     db  ?
            addrcode                       dd        ?
            retcode                         db        ?
BYTES ends


      .data?
        hInstance dd ?
       
        ZwAddr dd ?
       
        hook_handle dd ?
         
        old_bytes BYTES <>
        new_bytes BYTES <>
       

      .code

LibMain proc instance:DWORD,reason:DWORD,unused:DWORD
    .if reason == DLL_PROCESS_ATTACH

      push instance
      pop hInstance
     

                    call      SetGlobalHook
                    call      SetHook

         mov eax, TRUE
   
    .elseif reason == DLL_PROCESS_DETACH
                   call       Unhook                  
                   ;push instance
                                ;pop hInstance
                                ;mov eax, TRUE

                                ;mov eax,1h
    .elseif reason == DLL_THREAD_ATTACH
    .elseif reason == DLL_THREAD_DETACH
    .endif
    ret

LibMain endp

comment @
LibMain proc instance:DWORD,reason:DWORD,unused:DWORD
    mov al,1
    ret 12
LibMain endp
@

My proc
call SetGlobalHook
call SetHook
ret
My endp



NewZwQuerySystemInformation proc ASystemInformationClass:DWORD,ASystemInformation:DWORD,ASystemInformationLength:DWORD,AReturnLength:DWORD
local rwbytes:DWORD
local myId:DWORD
local process_handle:DWORD
local dwMemAddr:DWORD
invoke WriteProcessMemory,INVALID_HANDLE_VALUE,dword ptr ZwAddr,offset old_bytes,6h,addr rwbytes
invoke ZwQuerySystemInformation,ASystemInformationClass,ASystemInformation,ASystemInformationLength,AReturnLength
pusha
invoke VirtualAlloc,0h,1000h,MEM_COMMIT,PAGE_READWRITE
mov dwMemAddr,eax
invoke GetModuleHandle,0h
invoke GetModuleFileName,eax,dwMemAddr,1000h
mov esi,dwMemAddr
add esi,eax
CTA0 "taskmgr.exe",szTaskMngStr
mov eax,sizeof szTaskMngStr-1
sub esi,eax
;invoke lstrcmpi,esi,offset szTaskMngStr
mov ecx,sizeof szTaskMngStr-1
mov edi,offset szTaskMngStr
repe cmpsb
.if ecx==0h
invoke ExitProcess,0h
.endif
invoke VirtualFree,dwMemAddr,1000h,MEM_DECOMMIT
invoke WriteProcessMemory,INVALID_HANDLE_VALUE,dword ptr ZwAddr,offset new_bytes,6h,addr rwbytes
popa
ret
NewZwQuerySystemInformation endp



SetHook proc
local rwbytes:DWORD
invoke GetModuleHandle,$CTA0("ntdll.dll")
invoke GetProcAddress,eax,$CTA0("ZwQuerySystemInformation")
mov dword ptr ZwAddr,eax
invoke ReadProcessMemory,INVALID_HANDLE_VALUE,dword ptr ZwAddr,offset old_bytes,6h,addr rwbytes
push esi
mov esi,offset new_bytes
assume esi:ptr BYTES
mov [esi].jmpcode,68h
mov [esi].addrcode,offset NewZwQuerySystemInformation
mov [esi].retcode,0C3h
assume esi:nothing
pop esi
invoke WriteProcessMemory,INVALID_HANDLE_VALUE,dword ptr ZwAddr,offset new_bytes,6h,addr rwbytes
ret
SetHook endp








MessageProc proc Code:DWORD,wParam:DWORD,lParam:DWORD
invoke CallNextHookEx,0h,dword ptr Code,dword ptr wParam,dword ptr lParam
mov eax,0h
ret
MessageProc endp


SetGlobalHookProc proc

invoke SetWindowsHookEx,WH_GETMESSAGE,offset MessageProc,dword ptr hInstance,0h
.if eax==0h
.else
mov dword ptr hook_handle,eax
.endif
invoke Sleep,INFINITE
ret
SetGlobalHookProc endp


SetGlobalHook proc
local TrId:DWORD
local hMutex:DWORD
invoke CreateMutex,0h,FALSE,$CTA0("MyString")
.if eax!=0

invoke CreateThread,0h,0h,offset SetGlobalHookProc,0h,0h,addr TrId
.if eax==0h
.else
.endif
invoke CloseHandle,dword ptr hMutex
.endif
ret
SetGlobalHook endp


Unhook proc
;invoke MessageBox,0h,$CTA0("Goodbuy"),$CTA0("Goodbuy"),MB_OK
local rwbytes:DWORD
invoke WriteProcessMemory,INVALID_HANDLE_VALUE,dword ptr ZwAddr,offset old_bytes,6h,addr rwbytes
ret
Unhook endp

end LibMain
367
04 октября 2007 года
Meatcoins
303 / / 18.01.2006
У себя можешь сделать просто:
 
Код:
invoke LoadLibrary,$CTA0("hi.dll")
9.6K
08 октября 2007 года
m@k$
74 / / 27.02.2007
Огромное спс!
Только вот новых парочку вопросов:
1. Как использовать функцию Opacity. Только в MSDN не посылать, там я уже был :) До меня не дошло.
2. Использование кнопки
button = CreateWindow("BUTTON","ДА! ДА! ДА!",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,500,75,100,50,hWnd,NULL, hInstance,NULL);
где switch?
или switch в LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)?
Тогда какой case? case WM_BUTTON или как?
367
08 октября 2007 года
Meatcoins
303 / / 18.01.2006
А что это за функция такая?
Первый раз слышу?
Opacity?

switch в LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)

Именно там!!!
Наверное case WM_BUTTON...
Точно не знаю сам пока...
Пока этим не занимался ещё...
Но хотел бы...
9.6K
11 октября 2007 года
m@k$
74 / / 27.02.2007
Opacity - это функция, делающее окно прозрачным на опр. кол-во процентов. А как ее использовать я не врубаю...
268
11 октября 2007 года
Михаил
587 / / 25.06.2005
откуда она то?
9.6K
11 октября 2007 года
m@k$
74 / / 27.02.2007
Я не помню где увидел, потом смотрел в MSDN, попробовал запустить, а мне выдает какую-то ошибку. Какую, не помню. Люди, попробуйте, может у вас че нить получится, напишите кусок кода...
367
11 октября 2007 года
Meatcoins
303 / / 18.01.2006
http://forum.codenet.ru/showthread.php?t=39499

[quote=HexEdit]
Как сделать окно прозрачным?

Код:
SetWindowLong(hWnd, GWL_EX_STYLE,
GetWindowLong(hWnd, GWL_EX_STYLE) or WS_EX_LAYERED);
SetLayeredWindowAttributes(hWnd, 0, <прозрачность_1..255>, LWA_ALPHA);
Прозрачность:
0 - полностью прозрачно, клики проходят сквозь
1 - полностью прозрачно, клики проходят на окно
255 - не прозрачно
Примечание:
Работает только с Win2000. С этой функцией на предыдущих версиях программа не запустится.
[/quote]

Нашёл прямо тут!
9.6K
11 октября 2007 года
m@k$
74 / / 27.02.2007
Ой, спасибо. Тогда объясните плиз различие между этим и Opacity? И что лучше использовать?
367
11 октября 2007 года
Meatcoins
303 / / 18.01.2006
Opacity переводится как Непрозрачность.
Таким образом, делаем вывод, что скорее всего это Свойство.
Свойства - это некие упрощения, которые дарят нам Дельфиноподобные языки высокого уровня, отгораживая нас от вызова реальных API!
Думаю, что без разницы, что использовать, свойство или API-функцию - эффект должен быть тот же самый!
Вопрос в том, поддерживает ли это Свойство компилятор?
Если нет, то надо использовать API!
Например, в Delphi вообще ничего писать не надо - там есть свойства AlphaBlend и AlphaBlendValue, которые редактируются в инспекторе объектов. И всё!
1.9K
16 октября 2007 года
max_dark
256 / / 11.11.2005
2. Использование кнопки
Код:
// Создаем кнопку
HWND button = CreateWindow("BUTTON","ДА! ДА! ДА!",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,500,75,100,50,hWnd,NULL, hInstance,NULL);
// Устанавливаем ее индефикатор
SetWindowLong(button,GWL_ID,1);

/*
.....
*/
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
    switch(message) {
        case WM_COMMAND: {
            switch(wParam) { // выбор по номеру кнопки
                case 1: {
                    MessageBox(hWnd,"La","La-La", ID_ICONINFORMATION);
                    }break;
            }
            } break;
/*
.....
*/
}
367
16 октября 2007 года
Meatcoins
303 / / 18.01.2006
SetWindowLong(button,GWL_ID,1);
Буду знать теперь как идентификатор кнопки установить!
А то я .if писал...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог