当前位置: 首页 > article >正文

win32汇编环境,加速键的应用示例

;运行效果

;win32汇编环境,加速键的应用示例
;加速键,就是按某个键,开启某个功能。不用鼠标点来点去的东西。
;直接抄进RadAsm可编译运行。重要部分加备注。
;下面为asm文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.386 
.model flat,stdcall 
option casemap:none 
include      windows.inc 
include      user32.inc
include      kernel32.inc 
 
includelib   user32.lib           
includelib   kernel32.lib 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WinMain proto :DWORD,:DWORD,:DWORD,:DWORD       

; Equ 等值定义
IDC_VALUEA01  equ 201     ;静态控件标识符 

IDA_MAIN      equ 2000
IDA_01        equ 2001  
IDA_02        equ 2002
IDA_03        equ 2003
IDA_04        equ 2004                                         
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.DATA                                   
ClassName   db "SimpleWinClass",0        
AppName     db "窗口程序的模版",0

szMsg       db "提示",0 
szA01       db "按下了 F1 键",0 
szA02       db "按下了 D 键 ",0
szA03       db "按下了 CTRL+ALT+B 键",0
szA04       db "按下了 ALT+F 键",0

szSTClassName       db "static",0                   ;静态控件类名    

szSTCaptionA01      db "按一下 F1 键试试",13,10,13,10
                    db "按一下 D 键试试[英文输入法状态下]",13,10,13,10
                    db "按一下 CTRL+ALT+B 键试试",13,10,13,10
                    db "按一下 ALT+F 键试试",0    

.DATA?                                  
hInstance HINSTANCE  ?                
CommandLine LPSTR    ?   

hID_VALUECA01  dd    ?                
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.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 
        
        LOCAL    @hAccelerator

        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  hInstance 
        pop   wc.hInstance 
        mov   wc.hbrBackground,COLOR_WINDOW 
        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    LoadAccelerators,hInstance,IDA_MAIN             ;加载加速键表
    mov   @hAccelerator,eax
        invoke RegisterClassEx, addr wc                              
        invoke CreateWindowEx,NULL, ADDR ClassName,ADDR AppName,WS_OVERLAPPEDWINDOW,100,100,400,280, NULL,NULL,hInst, NULL 
        mov   hwnd,eax 
        invoke ShowWindow, hwnd,CmdShow                              
         invoke UpdateWindow, hwnd                                    

        .while TRUE                                                   
                invoke GetMessage, ADDR msg,NULL,0,0 
                .break .if (!eax) 
                invoke    TranslateAccelerator,hwnd,@hAccelerator,addr msg   ;在消息循环中截取加速键,再进行转换发送到窗口函数中处理
                .if eax == 0                                               ;如果没有加速键的内容,则按原来的进行消息处理
                    invoke TranslateMessage, ADDR msg 
                        invoke DispatchMessage, ADDR msg 
                .endif
                
        .endw 
        mov     eax,msg.wParam                                         
        ret 
WinMain endp 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM 
        .if uMsg == WM_CREATE
            invoke CreateWindowEx,NULL,ADDR szSTClassName,ADDR szSTCaptionA01, WS_CHILD + WS_VISIBLE,80, 50, 250, 150,hWnd,IDC_VALUEA01,NULL,NULL    ;创建静态控件,用来显示刻度                                                             
                mov hID_VALUECA01,eax
        .elseif uMsg == WM_DESTROY                                           
                invoke PostQuitMessage,NULL 
        .elseif    uMsg ==    WM_COMMAND
                mov eax,wParam
                .if ax == IDA_01
                    invoke MessageBox,NULL,addr szA01,addr szMsg,MB_OK
                .elseif ax == IDA_02
                    invoke MessageBox,NULL,addr szA02,addr szMsg,MB_OK
                .elseif ax == IDA_03
                    invoke MessageBox,NULL,addr szA03,addr szMsg,MB_OK
                .elseif ax == IDA_04
                    invoke MessageBox,NULL,addr szA04,addr szMsg,MB_OK            
                .endif                                      
        .else 
                invoke DefWindowProc,hWnd,uMsg,wParam,lParam             
        ret 
    .endif 
    xor eax,eax 
    ret 
WndProc endp 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end start      

;以下是Rc资源文件的内容                                               

#include        <resource.h>

#define    IDA_MAIN 2000    //加速键
#define    IDA_01   2001
#define    IDA_02   2002
#define    IDA_03   2003
#define    IDA_04   2004

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IDA_MAIN    accelerators        ;这个是加速键表,前面用时可以加载进去
BEGIN
        VK_F1,    IDA_01,    VIRTKEY
        "D",    IDA_02,    VIRTKEY
        "B",    IDA_03,VIRTKEY,CONTROL,ALT
        "F",    IDA_04,VIRTKEY,ALT
END
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>


http://www.kler.cn/a/561679.html

相关文章:

  • 什么是AI agent技术,有哪些著名案例
  • Ubuntu+vscode+CGAL6.0库安装入门教程
  • 禾迈电力电子嵌入式面经和参考答案
  • mysql-5.7.43之主从复制配置详解实例
  • Ansible-03 docker安装-基于centos
  • 在线VS离线TTS(语音合成芯片)有哪些优势-AIOT智能语音产品方案
  • Hbase客户端API——语句大全
  • Solidity study
  • 二叉树-左叶子之和
  • hot100-二叉树
  • DeepSeek-DeepEP – 专为混合专家模型打造的高效专家并行通信库
  • [RH342]tcpdump
  • RPC 框架项目剖析
  • 微博的IP属地是随定位改的吗?深入解析
  • Python----数据分析(Numpy三:连接数组,分割数组,数组元素的添加和删除)
  • C++ | 面向对象 | 类
  • wifi5和wifi6,WiFi 2.4G、5G,五类网线和六类网线,4G和5G的区别
  • 嵌入式硬件篇---各种插头介绍
  • 华为交换机堆叠方法
  • Jmeter接口测试断言