📄 version.c
字号:
/*
Copyright 1994-2003 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
You may contact the author at:
mailto::camille@bluegrass.net
or by snail mail at:
David Lindauer
850 Washburn Ave Apt 99
Louisville, KY 40222
*/
#include <windows.h>
/*
* This basically pulls one of the version strings out of the stringtable block
* of the version resource.
*
* We are doing it out the long way for compatibility with wdosx
*/
static int strsize(short *str)
{
int count = 0;
while (*str++)
count++;
return count;
}
//-------------------------------------------------------------------------
int VersionString(char *buf, short *key, short *lang)
{
int rv = 0;
HMODULE handle = GetModuleHandle(0);
HRSRC rsrc = FindResource(handle, (LPCTSTR)1, RT_VERSION);
DWORD size = SizeofResource(handle, rsrc);
HGLOBAL global = LoadResource(handle, rsrc);
if (global)
{
char *s = LockResource(global);
if (s)
{
if (!memcmp(s + 6, L "VS_VERSION_INFO", 32))
{
char *block = s + 0x5c;
if (!memcmp(block + 6, L "StringFileInfo", 30))
{
int xsize;
block = block + 0x24;
while (memcmp(block + 6, lang, strsize(lang) *2+2))
{
block = block + *(short*)block;
if (block >= s + size)
goto done;
}
xsize = *(short*)block - 0x24;
block = block + strsize(lang) *2+2+6;
while (xsize > 0 && memcmp(block + 6, key, strsize(key) *2))
{
int len = *(short*)block;
if (len % 4)
len += 2;
xsize -= len;
block = block + len;
}
if (xsize)
{
short *aa;
int len = *(short*)(block + 2);
int len1 = 6+strsize(key) *2+2;
if (len1 % 4)
len1 += 2;
aa = block + len1;
while (len--)
{
*buf++ = *aa++;
}
*buf = 0;
rv = 1;
}
}
}
done:
}
FreeResource(global);
}
return rv;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -