很 多 软 件 可 以 判 断 所 运 行 的 电 脑 类 型 而 自 动 做 不同 的 处 理。 如PhotoShop 5 可 以 探
测CPU 是 否 有MMX 支 持 而 调 用 不同 的 处 理 函 数,《 金 山 词 霸》 发 现 有MMX 支 持 会 产 生 半 透 明的
翻 译 提 示, 很 多 软 件 可 以 区 分Intel,Cyrix,AMD 的CPU...
---- 现 在, 且 让 我 细 细 道 来 如 何 让 你 在 自 己 的 程 序 中 取得CPU 信 息。
---- 主 要 可 利 用 CPUID 汇 编 指 令( 机 器 码:0FH A2H, 如 果 你 的编 译 器 不 支 持CPUID 指 令,
只 有 emit 机 器 码 了) 该 指 令 可 以 被如 下CPU 识 别
Intel 486 以 上 的CPU,
Cyrix M1 以 上 的CPU,
AMD Am486 以 上 的CPU
(1) 取CPU OEM 字 符 串, 判 断CPU 厂 商
先 让EAX=0, 再 调 用CPUID
Inel 的CPU 将 返 回:
EBX:756E6547H 'Genu'
EDX:49656E69H 'ineI'
ECX:6C65746EH 'ntel'
EBX,EDX,ECX 将 连 成"GenuineIntel", 真 正 的Intel。
Cyrix 的CPU 将 返 回:
EBX:43797269H
EDX:78496E73H
ECX:74656164H
"CyrixInstead","Cyrix 来 代 替"。
AMD 的CPU 将 返 回:
EBX:41757468H
EDX:656E7469H
ECX:63414D44H
"AuthenticAMD", 可 信 的AMD。
---- 在Windows98 中, 用 右 键 单 击" 我 的 电 脑", 选 择" 属 性- 常规" 在 计 算 机 描 述 处 就 可 看
见CPU OEM 字 符 串。
(2)CPU 到 底 是 几86, 是 否 支 持MMX
先 让EAX=1, 再 调 用CPUID
EAX 的 8 到11 位 就 表 明 是 几86
3 - 386
4 - i486
5 - Pentium
6 - Pentium Pro Pentium II
2 - Dual Processors
EDX 的 第0 位: 有 无FPU
EDX 的 第23 位:CPU 是 否 支 持IA MMX, 很 重 要 啊!如 果 你 想 用 那57 条 新 增 的 指 令, 先 检 查 这
一 位 吧, 否 则 就等 着 看Windows 的" 该 程 序 执 行 了 非 法 指 令, 将 被 关 闭" 吧。
(3) 专 门 检 测 是 否P6 架 构
先 让EAX=1, 再 调 用CPUID
如 果AL=1, 就 是Pentium Pro 或Pentium II
(4) 专 门 检 测AMD 的CPU 信 息
先 让EAX=80000001H, 再 调 用CPUID
如 果EAX=51H, 是AMD K5
如 果EAX=66H, 是K6
EDX 第0 位: 是 否 有FPU
EDX 第23 位,CPU 是 否 支 持MMX,
程 序 如 下: 是C++Builder 的 控 制 台 程 序, 可 以 给 出 你 的" 心" 的 信 息。 如 果 把 这 个 技 术 用 于
DLL 中, 便 可 以 使VB 程 序 也 知道" 心" 的 信 息。
file://------CPUID Instruction Demo Program------------
#include < conio.h >
#include < iostream.h >
#pragma hdrstop
file://------------------------------------------------
#pragma inline
#pragma argsused
int main(int argc, char **argv)
{
char OEMString[13];
int iEAXValue,iEBXValue,iECXValue,iEDXValue;
_asm {
mov eax,0
cpuid
mov DWORD PTR OEMString,ebx
mov DWORD PTR OEMString+4,edx
mov DWORD PTR OEMString+8,ecx
mov BYTE PTR OEMString+12,0
}
cout< < "This CPU 's OEM String is:"< < OEMString< < endl;
_asm {
mov eax,1
cpuid
mov iEAXValue,eax
mov iEBXValue,ebx
mov iECXValue,ecx
mov iEDXValue,edx
}
if(iEDXValue&0x800000)
cout < < "This is MMX CPU"< < endl;
else
cout < < "None MMX Support."< < endl;
int iCPUFamily=(0xf00 & iEAXValue) > >8;
cout < < "CPU Family is:"< < iCPUFamily< < endl;
_asm{
mov eax,2
CPUID
}
if(_AL==1)
cout < < "Pentium Pro or Pentium II Found";
getch();
return 0;
}
ShowMessage("Could not MakeCurrent");
请问如何用ENTER键进行焦点转移,?
1 在Windows 环 境 下, 要 使 一 个 控 件 取 得 焦 点, 可 在 该 控 件 上 用 鼠 标 单 击 一 下,
或 按Tab 键 将 焦 点 移 至 该 控 件 上。 这 种 控 制 焦 点 切 换 的 方 法 有 时 不 符 合 用 户
的 习 惯。 就 图 一 而 言, 用 户 就 希 望 用Enter 键, 控 制 焦 点 由Edit1 切 换 到Edit2。
要 实 现 这 样 的 功 能 需 借 助WinAPI 函 数SendMessage 来 完 成。 方 法 是:
先 设Form1 的KeyPreview 属 性 为true, 然 后 在Form1 的OnKeyPress 事 件 中 加 入 如 下 的 代 码。
这 样, 用 户 就 可 以 通 过 按Enter, 键 控 制 焦 点 按 定 义 好 的Taborder 顺 序 来 移 动 了 !
void __fastcall TForm1::
FormKeyPress(TObject *Sender, char &Key)
{
if(Key==VK_RETURN)
{
SendMessage(this- >Handle,WM_NEXTDLGCTL,0,0);
Key=0;
}
}
2 在edit1的OnKeyPress(event)中加入
if(Key==VK_RETURN)Edit3->SetFocus();
网络蚂蚁的窗口消失??
Timer->Intrval=10;
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
Form1->Width-=20;
Form1->Height-=20;
if(Form1->Width==108&&Form1->Height==27)
{Form1->Close ();}
Form1->Top+=10;
Form1->Left+=10;}
(2)TDateTime t1;
Form1->Caption="今天是:"+DateToStr(Date())+"现在时间是:"+TimeToStr(Time());
(3) AnsiString S;
S = "";
if (SelectDirectory("Select Directory", "", S))
SetPath(S);
(4) AnsiString S;
InputQuery("标题","提示",s);
窗口背景
public:
Graphics::TBitmap *bitmap;
file://---------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
bitmap=new Graphics::TBitmap;
bitmap->LoadFromFile("Arc.bmp");
}
file://---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
int x,y;
y=0;
while(y<Height)
{x=0;
while(x<Width)
{Canvas->Draw (x,y,bitmap);
x=x+bitmap->Width ;
}
y=y+bitmap->Height ;
}
}
如何把JPG文件转成BMP文件???
先用TImage控件 Image1->Picture->LoadFromFile(你的Jpeg文件)
然后
Graphics::TBitmap*tmp=new Graphics::TBitmap();
tmp->Assign(Image1->Picture->Graphic);
tmp->SaveToFile(FileName);
文件读取写入
int i=0;
char sn[]="123";
if(!FileExists("aaa.txt"))
{
i=FileCreate("aaa.txt");
FileWrite(i,sn,strlen(sn));
FileClose(i); ShowMessage("ok");}
{char buf[3];
AnsiString str;
int i;
i=FileOpen("d://aaa.txt",fmOpenReadWrite);