+ -
当前位置:首页 → 问答吧 → GetFileVersionInfo获取版本信息时,返回成功,但不能显示,为什么呢

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有相关版本信息了.

作者: MSOKD   发布时间: 2010-11-30

其中主要的代码很少,很多都是一些定义值.
大家帮看一下

作者: MSOKD   发布时间: 2010-11-30