GetFileVersionInfo获取版本信息时,返回成功,但不能显示,为什么呢
时间:2010-11-30
来源:互联网
string.rc
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define ICO_MAIN 0x1000 //图标
#define DLG_MAIN 1
#define IDC_INFO 101
#define IDC_FILE 102
#define IDC_STC 103
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN ICON "Main.ico"
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN DIALOG 138, 123, 400, 400
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "查看PE文件版本信息"
FONT 9, "宋体"
{
EDITTEXT IDC_INFO, 5, 5, 220, 110, ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP
LTEXT "", IDC_FILE, 5, 123, 165, 8
DEFPUSHBUTTON "选择文件(&B)", IDOK, 175, 120, 50, 14
CONTROL "IDC_STC",IDC_STC,"Static",0x50000000,200,200,58,35
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
string.asm
.386
.model flat, stdcall
option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include version.inc
includelib version.lib
DLG_MAIN equ 100
IDC_S equ 101
IDC_S1 equ 102
IDC_S2 equ 103
IDC_STC equ 104
.data
hinstance dd ?
string db 128 dup (?)
sts1 db '12.exe',0
root db '\',0
buffer VS_FIXEDFILEINFO <12,89>
.code
_proct proc uses ebx edi esi hwnd,wmsg,wparam,lparam
LOCAL @lpbuffer,@dwlen
mov eax,wmsg
.if eax==WM_CLOSE
invoke EndDialog,hwnd,NULL
.elseif eax==WM_COMMAND
invoke GetFileVersionInfo,addr sts1,NULL,sizeof string,addr string
invoke VerQueryValue,addr string,addr root,addr buffer,addr @dwlen
invoke SetDlgItemInt,hwnd,IDC_STC,buffer.dwFileVersionMS,FALSE
.else
mov eax, FALSE
ret
.endif
mov eax,TRUE
ret
_proct endp
start:
invoke GetModuleHandle,NULL
mov hinstance,eax
invoke DialogBoxParam,hinstance,DLG_MAIN,NULL,offset _proct,NULL
invoke ExitProcess,NULL
end start
我测试时
invoke GetFileVersionInfo,addr sts1,NULL,sizeof string,addr string
invoke VerQueryValue,addr string,addr root,addr buffer,addr @dwlen
这2句 eax都返回1,表示成功,但为什么就不能用
invoke SetDlgItemInt,hwnd,IDC_STC,buffer.dwFileVersionMS,FALSE
显示呢.
已确定12.exe有相关版本信息了.
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#include <resource.h>
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define ICO_MAIN 0x1000 //图标
#define DLG_MAIN 1
#define IDC_INFO 101
#define IDC_FILE 102
#define IDC_STC 103
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN ICON "Main.ico"
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DLG_MAIN DIALOG 138, 123, 400, 400
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "查看PE文件版本信息"
FONT 9, "宋体"
{
EDITTEXT IDC_INFO, 5, 5, 220, 110, ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_READONLY | WS_BORDER | WS_VSCROLL | WS_TABSTOP
LTEXT "", IDC_FILE, 5, 123, 165, 8
DEFPUSHBUTTON "选择文件(&B)", IDOK, 175, 120, 50, 14
CONTROL "IDC_STC",IDC_STC,"Static",0x50000000,200,200,58,35
}
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
string.asm
.386
.model flat, stdcall
option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include version.inc
includelib version.lib
DLG_MAIN equ 100
IDC_S equ 101
IDC_S1 equ 102
IDC_S2 equ 103
IDC_STC equ 104
.data
hinstance dd ?
string db 128 dup (?)
sts1 db '12.exe',0
root db '\',0
buffer VS_FIXEDFILEINFO <12,89>
.code
_proct proc uses ebx edi esi hwnd,wmsg,wparam,lparam
LOCAL @lpbuffer,@dwlen
mov eax,wmsg
.if eax==WM_CLOSE
invoke EndDialog,hwnd,NULL
.elseif eax==WM_COMMAND
invoke GetFileVersionInfo,addr sts1,NULL,sizeof string,addr string
invoke VerQueryValue,addr string,addr root,addr buffer,addr @dwlen
invoke SetDlgItemInt,hwnd,IDC_STC,buffer.dwFileVersionMS,FALSE
.else
mov eax, FALSE
ret
.endif
mov eax,TRUE
ret
_proct endp
start:
invoke GetModuleHandle,NULL
mov hinstance,eax
invoke DialogBoxParam,hinstance,DLG_MAIN,NULL,offset _proct,NULL
invoke ExitProcess,NULL
end start
我测试时
invoke GetFileVersionInfo,addr sts1,NULL,sizeof string,addr string
invoke VerQueryValue,addr string,addr root,addr buffer,addr @dwlen
这2句 eax都返回1,表示成功,但为什么就不能用
invoke SetDlgItemInt,hwnd,IDC_STC,buffer.dwFileVersionMS,FALSE
显示呢.
已确定12.exe有相关版本信息了.
作者: MSOKD 发布时间: 2010-11-30
其中主要的代码很少,很多都是一些定义值.
大家帮看一下
大家帮看一下
作者: MSOKD 发布时间: 2010-11-30
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28