分享
 
 
 

用程序取得CPU信息

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

很 多 软 件 可 以 判 断 所 运 行 的 电 脑 类 型 而 自 动 做 不同 的 处 理。 如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);

FileRead(i,buf,3);

FileClose(i);

if(Edit1->Text==AnsiString(buf,3))

{ShowMessage("ok'");}

按键发声

#include <mmsystem.h>

AnsiString SoundFile="d:\\ding.wav";

sndPlaySound(SoundFile.c_str() ,SND_ASYNC);

怎么来使Win98休眠

SetSystemPowerState(true,true);

其中的第一个参数指定是休眠还是挂起(true :前者;false:后者)

第二个参数指定是否强制。

如 何 将 浮 点 数 转 成AnsiString同 时 控 制 其 只 保 留 两 位 小 数

FLOAT aa=9032.569;

AnsiString bb=FormatFloat("0.00",aa);

能否从AnsiString a="FF";把a转成10进制?

这样更简单: 前面补上16进制标志0x再转换,

AnsiString s="FF";

s="0x"+s;

int x=s.ToInt();

如何获取屏幕的分辨率?

系统自动定义了一个全局变量Screen,

可在程序任何地方用Screen->Height,Screen->Width获得当前屏幕分辨率。

谁知道动态数组怎样用

动态数组必须在程序运行期间动态改变大小。

用malloc():为指针分配空间和realloc():动态调整指针分配空间

配合实现。注意要包含stdlib.h。示例如下:

#include <stdio.h>

#include <alloc.h>

#include <string.h>

int main(void)

{

char *str;

str = (char *) malloc(10);

strcpy(str, "Hello");

printf("String is %s\n Address is %p\n", str, str);

str = (char *) realloc(str, 20);

printf("String is %s\n New address is %p\n", str, str);

free(str);

return 0; }

怎样显示随机数?

Timer->Interval = 150, 效果不错

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{ Label1->Caption = random(100);}

void __fastcall TForm1::Button1Click(TObject *Sender)

{Timer1->Enabled = ! Timer1->Enabled; }

不要用线程了, Timer占用很小, 不影响程序的响应。

如果要过一段时间停下来:(比如是 1分钟 = 60 秒 =60000ms = 400次*150ms/次

int TimeOut = 400;

file://Timer->Interval = 150, 效果不错

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

Label1->Caption = random(100);

if(--Timeout==0)

Timer1->Enabled = ! Timer1->Enabled;

}

Timer的最小分辨率是55ms也就是18.2次一秒,和8253/8254的频率一样。

最小间隔可以达到1ms

使用<mmsystem.h>的函数windows每隔20ms就要重新确认调用一次线程。

TQuery的参数设置

一、TQuery的参数设置

1. 在SQL属性中:Select * from 表名 where 字段名=:变量名

跟在“ : ”后面的是变量。这样写后,在参数属性中就可以修改该变量的数

据类型等。

2. 对变量的赋值:

Query1->Active=false;

Query1->Params->Items[0]->AsString=Edit1->Text;

Query1->Active=true;//查找符合变量的记录

3. 用DBGrid显示结果

DBGrid的DataSource与DataSource1连接,而DataSource1的DataSet与Tquery1

连接。

二、嵌入SQL语言

通过Query控件嵌入SQL语句建立的查询比Table更简单、更高效。

用一个简单的代码来说明如何建立查询程序:

例如,要建立一个检索表1中书名为book1的程序则在表单上放置

DBGrid,DataSource,Query三个控件加入以下代码:

DBGrid1-〉DataSource=DataSource1;

DataSource1-〉DataSet=Tqery1;

Query1-〉Close();

Query1-〉SQL-〉Clear();

Query1-〉SQL-〉Add(″Select * From 表 Where (书名=′book1′ ″);

Query1-〉ExecSQL();

Query-〉Active=true;

你就可以在生成的表格中看到所有名称为book1的记录。

窗口渐变背景色

TColor StartColor,EndColor;//全局变量

file://获得开始颜色

if(ColorDialog1->Execute ())

StartColor=ColorDialog1->Color;

file://获得结束颜色

if(ColorDialog1->Execute())

EndColor=ColorDialog1->Color;

float pwidth;

int redstart,greenstart,bluestart,redend,greenend,blueend;

float redinc,greeninc,blueinc;

pwidth=float(PaintBox1->Width);

file://通过Get(X)Value函数来获得开始的颜色的红,蓝,绿

redstart=GetRValue(StartColor);

greenstart=GetGValue(StartColor);

bluestart=GetBValue(StartColor);

file://通过Get(X)Value函数来获得结束的颜色的红,蓝,绿

redend=GetRValue(EndColor);

greenend=GetGValue(EndColor);

blueend=GetBValue(EndColor);

file://设置颜色变化率

redinc=(redend-redstart)/pwidth;

greeninc=(greenend-greenstart)/pwidth;

blueinc=(blueend-bluestart)/pwidth;

for(int i=0;i<PaintBox1->Width;i++)

{ file://定义画笔颜色

PaintBox1->Canvas->Pen->Color=TColor(RGB(redstart+int(redinc*i),greenstart+int(greeninc*i),bluestart+int(blueinc*i)));

file://移动画笔到

PaintBox1->Canvas->MoveTo(i,0);

file://由PanitBox1的上向下画

PaintBox1->Canvas->LineTo(i,PaintBox1->Height);

如何分别对DBGrid和SrtingGRid的行换背景色?

TForm1::DBGrid1DrawColumnCell( )

if(Column->Field->DataSet->RecNo%2)

{

DBGrid1->Canvas->Brush->Color=clYellow;

DBGrid1->Canvas->FillRect(Rect);

}

DrawText(DBGrid1->Canvas->Handle, Column->Field->Text.c_str(),-1,(RECT*)&Rect,DT_SINGLELINE | DT_VCENTER |DT_CENTER);

如何分别对DBGrid和SrtingGRid的列动态换背景色?

Query1->Close();

Query1->SQL->Clear();

Query1->SQL->Add(Memo1->Text);

Query1->Open();

for(int i=0;i<DBGrid1->Columns->Count;i++)

{ if(i%2==0)DBGrid1->Columns->Items[i]->Color=clAqua;

else DBGrid1->Columns->Items[i]->Color=clInfoBk;

}

怎样得到当前的月份是多少啊

TDateTime time=Now();

AnsiString Time=time.FormatString("yyyy-mm-dd");

AnsiString month=Time.SubString(6,2);

Label1->Caption=month;

AnsiString sMonth;

sMonth=Now().FormatString("mm");//取出当前月分

Label2->Caption=sMonth;

窗体标题闪烁

Timer()

{FlashWindow(Form1->Handle,TRUE):}

像星际争霸开头由大到小的字幕特效

在窗体中加入一个Timer(定时器),标签(Label)

Label1->AutoSize=true

Label1->Caption=歪歪的VB教程"

Label1->Font->Name = "宋体"

Label1->Font->Size = 150

Label1->Fore->Color = vbGreen

Label1->Visible = true

Time1->Interval = 1

Time1Enabled = true

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

if(Label1->Font->Size >=2)

{Label1->Font->Size =Label1->Font->Size-2;

Label1->Left = (Form1->Width-Form1->Width)/2;

Label1->Top = (Form1->Height -Label1->Height) / 2 ;}

else{

Label1->Visible = false;

Timer1->Enabled = false;

}

}

CPUID

GetCPUID(void)

{

asm

{

PUSH EBX file://{Save affected register}

PUSH EDI

MOV EDI,EAX file://{@Resukt}

MOV EAX,1

DW 0xa20f file://{CPUID Command}

STOSD file://{CPUID[1]} file://cpu名称

MOV EAX,EBX

STOSD file://{CPUID[2]}//无用

MOV EAX,ECX

STOSD file://{CPUID[3]}//无用

MOV EAX,EDX

STOSD file://{CPUID[4]}//cpu编号

POP EDI file://{Restore registers}

POP EBX

}

}

file://---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

Label1->Caption=(AnsiString)GetCPUID();

}

自动调用浏览器或邮件程序

Windows 提供了ShellExecute函数,用来调用外部程序或与某程序关联的文件。

其原型如下:

HINSTANCE ShellExecute(

HWND hwnd, // handle to parent window

LPCTSTR lpOperation, // pointer to string that specifies operation to perform

LPCTSTR lpFile, // pointer to filename or folder name string

LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters

LPCTSTR lpDirectory, // pointer to string that specifies default directory

INT nShowCmd // whether file is shown when opened

);

如若要自动浏览器程序访问我的主页,程序代码如下:

ShellExecute(Handle,NULL,"http://lmq.4y.com.cn",NULL,NULL,SW_SHOWNORMAL);

若要启动系统默认邮件程序,给我写信,程序代码如下:

ShellExecute(Handle,NULL,"mailto:lmq@4y.com.cn",NULL,NULL,SW_SHOWNORMAL);

BCB中的获取打印机函数是Printer();

其返回值是一个TPrinter对象,你可以查找TPrinter对象的帮助。

你需要添加引用的头文件是#include <Printers.hpp>

其中Printer()->Printers->Count是打印机的数目

Printer()->Printers->Strings[]是列举打印机的名称

Printer()->BeginDoc()开始打印准备

Printer()->EndDoc()结束打印准备,开始真正打印

Printer()->AbortDoc()终止打印准备。

在BeginDoc()和EndDoc()之间可以使用Printer()->Canvas来画打印页

画完一页后就可以用Printer()->NewPage()开始新的一页

此外Printer()->Handle是一个HDC,使用GetDeviceCaps(Printer()->Handle, ...)

可以得到当前打印机的分辨率等等很多属性,而不需要BeginDoc()

(如果使用Printer()->Canvas->Handle则需要BeginDoc()才能得到准确信息)

获取屏幕的颜色

void __fastcall TForm1::Button1Click(TObject *Sender)

{int BitsPerPixel = GetDeviceCaps(Canvas->Handle,BITSPIXEL);

int Planes = GetDeviceCaps(Canvas->Handle,PLANES);

BitsPerPixel *= Planes;

bool UsesPalettes =

(bool)(GetDeviceCaps(Canvas->Handle, RASTERCAPS) & RC_PALETTE);

if(UsesPalettes)

Label1->Caption = "屏幕使用饿调色板";

else

Label1->Caption = "屏幕没有使用调色板";

switch (BitsPerPixel)

{ case 32:

Label2->Caption ="32-位 真彩";

case 24:

Label2->Caption = "24-位 真彩";

break;

case 16:

Label2->Caption = "16-位 高 彩";

break;

case 8:

Label2->Caption = "256 色 模式";

break;

case 4:

Label2->Caption = "16 色模式";

break;

case 1:

Label2->Caption = "单色模式";

break;

default:

Label2->Caption = "屏幕支持 " + IntToStr(1<< BitsPerPixel) +" 不同色";

break;

}

使用自己的函数库:

new->cpp int jia(int a,int b){return (a+b);} save to File1.cpp

at unit.cpp #include "File1.cpp"

int c=jia(a,b);

如何使StatusBar上的文字滚动起来??

如下操作可使StatusBar中的字串向左运动

StatusBar1->SimpleText=StatusBar1->SimpleText.SubString(2,StatusBar1->SimpleText.Length()-1)+StatusBar1->SimpleText.SubString(1,1);

file://------------

设计时定

simplePanel=true;

SimpleText=love you

SizeGrip=false;

在TStringGrid控件中怎么显示double型数?

double aaa = 1.1;

AnsiString str = FloatToStr(aaa);

StringGrid1->Cells[1][2]=str;

StringGrid1->Cells[1][1]= FormatFloat("0.00000",3.1415926);

Table1快速查询

Table1->Filtered=false;

Table1->Filter=Edit1->Text;

Table1->Filtered=true;

Edit1->Text=内容是:字段是字符 name='zzz' and age>18 and sex!='男'

FilterOption<<foCaseInsensitive(大小写)<<foNoPartialCompare(完全匹配)

数据库输入员只能修改自己输入的表的内容(好比是输入本月工资可以修改输入的错误确不可修改上月的工资)

建立临时表createbuttonclike()

{ if(!Table1->Exists){

Table1->Active=false;

Table1->DatabaseName="MSACCESS1";//建立一样的表结构

Table1->TableType=ttDefault;

Table1->TableName="SCadd";

Table1->FieldDefs->Clear();

Table1->FieldDefs->Add("Sno",ftInteger,0,false);//字段名,类型,小数位或长度,是否唯一

Table1->FieldDefs->Add("Cno",ftInteger,0,false);

Table1->FieldDefs->Add("Grade",ftInteger,0,false);

Table1->CreateTable();}

Table1->Active=true;}

ExitButtonClik()

{ Table2->BatchMove(Table1,batAppend);

batUpdate//用原表的记录更新目标表的记录;

batAppendUpdate//把原表不存在于目标表的记录添加到目标表的末尾

batDelete//删除原表在目标表中重复的记录

batCopy//把原表复制到目标表

Table1->Active=false;

Table1->DatabaseName="MSACCESS1";

Table1->TableType=ttDefault;

Table1->TableName="SCadd";

Table1->DeleteTable();

}

一、用C++Builder设计自己的浏览器

C++Builder5提供了一个浏览器控件CppWebBrowser,它位于internet控件栏,其的主要方法有:

Navigate函数,用于浏览给定的url的资源

GoBack(),浏览上一页

GoForward(),浏览下一页

Stop(),停止浏览

Refresh(),刷新当前页面

新建一应用程序,将工程名保存为myie,设置Form1的Name为Main_Form,在Main_Form上加入一CppWebBrowser控件和一个ToolBar控件,

在此ToolBar控件放入一ComBox框,并加上五个ToolButton,设置其Name属性分别为“CppWebBrowser1”,“ToolBar1”,“ CB_URL”,

“ TB_Prior,TB_Forward,TB_Stop,TB_Fresh,TB_Navigate”。

TB_Navigate的OnClick事件代码如下:

void __fastcall TMain_Form::NavigateExecute(TObject *Sender)

{

CppWebBrowser1->Navigate((WideString)CB_URL->Text, TNoParam(), TNoParam(), TNoParam(), TNoParam());

}

ComBox1的OnKeyPress事件代码如下:

void __fastcall TMain_Form::CB_URLKeyPress(TObject *Sender, char &Key)

{

if(Key==13) file://若按下的键为回车键

NavigateExecute(Sender);

}

其余的代码类似…

编译运行,一个具有基本浏览功能的浏览器就生成了。

2、获得html文件的源文件

我们在用IE浏览主页时,若点击右键,选择“查看源文件”,系统会自动启动记事本显示此html的源文件。在编程时,

有时需分析html文件的源文件,用C++ Builder的 NMHTTP控件可以轻松解决这个问题。

新建 一工程,从FastNet控件栏拖一NMHTTP控件到窗体上,再拖一Memo控件到窗体,假设要获得本人主页(http://lmq.4y.com.cn)的源文件,

在Form1的OnCreate事件键入代码:

void __fastcall TForm1::FormCreate(TObject *Sender)

{

Memo1->Clear(); file://清空Memo1

NMHTTP1->Get("http://lmq.4y.com.cn");

Memo1->Text = NMHTTP1->Body;

}

编译运行程序,Memo1框中立即显示本人主页的源文件.

另外,NMHTTP控件还支持代理Proxy,其属性Proxy和Port分别指代理服务器的IP地址和端口号。

三、自动调用浏览器或邮件程序

Windows 提供了ShellExecute函数,用来调用外部程序或与某程序关联的文件。

其原型如下:

HINSTANCE ShellExecute(

HWND hwnd, // handle to parent window

LPCTSTR lpOperation, // pointer to string that specifies operation to perform

LPCTSTR lpFile, // pointer to filename or folder name string

LPCTSTR lpParameters, // pointer to string that specifies executable-file parameters

LPCTSTR lpDirectory, // pointer to string that specifies default directory

INT nShowCmd // whether file is shown when opened

);

如若要自动浏览器程序访问我的主页,程序代码如下:

ShellExecute(Handle,NULL,"http://lmq.4y.com.cn",NULL,NULL,SW_SHOWNORMAL);

若要启动系统默认邮件程序,给我写信,程序代码如下:

ShellExecute(Handle,NULL,"mailto:lmq@4y.com.cn",NULL,NULL,SW_SHOWNORMAL);

以上程序在Pwin98+BCB5下运行通过。

file://---------------------------------------------------------------------------------------------------------------

BCB下如何改变CppWebBrowser的Html内容

void __fastcall TForm1::SetHtml( TCppWebBrowser *WebBrowser,AnsiString Html )

{

IStream *Stream;

HGLOBAL hHTMLText;

IPersistStreamInit *psi;

if( WebBrowser->Document == NULL )

return;

hHTMLText = GlobalAlloc( GPTR, Html.Length() + 1 );

if( 0 == hHTMLText ) {

ShowMessage( "GlobalAlloc Error" );

return;

}

CopyMemory( hHTMLText, Html.c_str(), Html.Length() );

OleCheck( CreateStreamOnHGlobal( hHTMLText, true, &Stream ) );

try {

OleCheck( WebBrowser->Document->QueryInterface( __uuidof(IPersistStreamInit), (void **)&psi ) );

try {

OleCheck( psi->InitNew() );

OleCheck( psi->Load(Stream) );

} catch( ... ) {

delete psi;

}

} catch( ... ) {

delete Stream;

}

delete psi;

delete Stream;

}

cpu使用情况

#ifndef fmTestH

#define fmTestH

file://---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <ExtCtrls.hpp>

file://---------------------------------------------------------------------------

class TTestForm : public TForm

{

__published: // IDE-managed Components

TLabel *LbAldynUrl;

TMemo *MInfo;

TTimer *Timer;

void __fastcall LbAldynUrlClick(TObject *Sender);

void __fastcall FormCreate(TObject *Sender);

void __fastcall TimerTimer(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TTestForm(TComponent* Owner);

};

file://---------------------------------------------------------------------------

extern PACKAGE TTestForm *TestForm;

file://---------------------------------------------------------------------------

#endif

file://---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "fmTest.h"

#include "adCpuUsage.hpp"

file://---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TTestForm *TestForm;

file://---------------------------------------------------------------------------

__fastcall TTestForm::TTestForm(TComponent* Owner)

: TForm(Owner)

{

}

file://---------------------------------------------------------------------------

void __fastcall TTestForm::LbAldynUrlClick(TObject *Sender)

{

ShellExecute(Application->Handle, "open", "http://www.aldyn.ru/",

NULL, NULL, SW_SHOWDEFAULT);

}

file://---------------------------------------------------------------------------

void __fastcall TTestForm::FormCreate(TObject *Sender)

{

int i;

MInfo->Lines->Clear();

MInfo->Lines->Add(Format("There are %d total CPU in your system",ARRAYOFCONST((GetCPUCount()))));

for (i=0; i < GetCPUCount(); i++) MInfo->Lines->Add("");

}

file://---------------------------------------------------------------------------

void __fastcall TTestForm::TimerTimer(TObject *Sender)

{

int i;

CollectCPUData();

MInfo->Lines->BeginUpdate();

for(i=0; i < GetCPUCount(); i++)

MInfo->Lines->Strings[i+1] = Format("CPU #%d - %5.2f%%",ARRAYOFCONST((i,GetCPUUsage(i)*100)));

MInfo->Lines->EndUpdate();

如何保存程运行信息到ini文件

现在许多软件把程序中需要的数据保存在注册表中,这样当用户装的软件越来越多时,致使注册表越来越庞大,容易使系统出错。

当然,微软也建议在注册表中保存数据,但当我们需要保存的数据不多时完全可以把数据保存在WIN.INI中,这样可以很方便地维护,

实现方法相对来说比较简单。下面我以Borland C++ Builder为例来说说如何实现。

原理其实很简单,只需调用API的 WriteProfileString和GetProfileInt函数就可以了。这两个函数的原型是:

BOOL WriteProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpString );

UINT GetProfileInt(LPCTSTR lpAppName,LPCTSTR lpKeyName,INT nDefault);

其中lpAppName指在WIN.INI中段的名字,即用[]括起来的字符串,lpKeyName指在这个段中每一个项目的名字,lpString指这个项目的值,

即“=”后的数, nDefault为当GetProfileInt没有找到lpAppName和lpKeyName时返回的值,即缺省值,前者返回为布尔值(true 或 false),

后者返回为无符号整形值。当在WriteProfileString函数中 lpKeyName 为空(NULL)时,则清除这个段的全部内容,lpString 为空时,

则清除这一项目的内容,即这一行将清除掉。

下面举一例子来说明这两个函数的用法。新建一个应用程序,在Form1上放两个Edit和三个Button,其中Edit的Text为空,

三个Button的Caption分别为“添加”、“查看”、“清除”。双击“添加”按钮加入下面代码:

WriteProfileString(“例子程序”,“项目”,Edit1→Text.c_str());

双击“查看”按钮加入如下代码:

unsigned int Temp;

Temp=GetProfileInt(“例子程序”,“项目”,100);

Edit2→Text=IntToStr(Temp);

双击“清除”按钮加入如下代码:

WriteProfileString(“例子程序”,NULL,NULL);

然后按F9键运行程序。

下来可以检验一下程序的正确性。在Edit1中输入数字,如“3265”,按“添加”按钮,这时运行“sysedit”来查看

“WIN.INI”文件的最后面,可以看到加入了如下内容:

[例子程序]

项目=3265

其中“[]”和“=”是函数自动加上的。按下“查看”按钮,在Edit2中出现“3265”,当按下“清除”按钮可清除添加的部分。

经过查看可知程序已达到预期的目的。

喜爱编程的朋友可以把上述方法应用到自己的程序中去,来达到保存数据信息的作用。当确实要把信息保存到注册表中,

可以在C++ Builder中定义一个TRegistry类的对象来进行相关的操作,或者直接调用Windows的API函数.

取得本地internet机器的名字及IP地址取得本地internet机器的名字及IP地址

一、下面的例子使用 Winsock API 取得本地主机的名字及地址

void __fastcall TForm1::Button1Click(TObject *Sender)

{

hostent *p;

char s[128];

char *p2;

file://Get the computer name

gethostname(s, 128);

p = gethostbyname(s);

Memo1->Lines->Add(p->h_name);

file://Get the IpAddress

p2 = inet_ntoa(*((in_addr *)p->h_addr));

Memo1->Lines->Add(p2);

}

void __fastcall TForm1::FormCreate(TObject *Sender)

{

WORD wVersionRequested;

WSADATA wsaData;

file://Start up WinSock

wVersionRequested = MAKEWORD(1, 1);

WSAStartup(wVersionRequested, &wsaData);

}

void __fastcall TForm1::FormDestroy(TObject *Sender)

{

WSACleanup();

}

修改显示方式的:

file://---------------------------------------------------------------------------

#ifndef Unit1H

#define Unit1H

file://---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include "MyEdit.h"

#include <Grids.hpp>

#include <CheckLst.hpp>

#include <ExtCtrls.hpp>

#include <ActnList.hpp>

file://---------------------------------------------------------------------------

class TForm1 : public TForm

{

__published: // IDE-managed Components

TPanel *Panel1;

TButton *Button1;

TLabel *Label1;

TButton *Button2;

TListBox *ListBox1;

TButton *Button3;

void __fastcall Button1Click(TObject *Sender);

void __fastcall Button2Click(TObject *Sender);

void __fastcall Button3Click(TObject *Sender);

private: // User declarations

public: // User declarations

__fastcall TForm1(TComponent* Owner);

DEVMODE table[400];

bool Listed;

};

file://---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

file://---------------------------------------------------------------------------

#endif

////unit.cpp

file://---------------------------------------------------------------------------

#include <vcl.h>

#include <mmsystem.h>

#pragma hdrstop

#include "Unit1.h"

file://---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma link "MyEdit"

#pragma resource "*.dfm"

TForm1 *Form1;

file://---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

Listed=false;

Button2->Enabled=false;

Button3->Enabled=false;

}

file://---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

DWORD index=0;

bool flag;

do{

flag=EnumDisplaySettings(NULL,index,& table[index]);

if(flag)

{

if( table[index].dmPelsWidth<640) ;

else if (table[index].dmBitsPerPel<8) ;

else if (table[index].dmDisplayFrequency>85);

else if( table[index].dmPelsWidth>1024) ;

else

{

AnsiString st;

st=index;

st+=" ";

st+=table[index].dmPelsWidth;

st+=" X ";

st+=table[index].dmPelsHeight;

st+=" X ";

st+=table[index].dmBitsPerPel;

st+=" X ";

st+=table[index].dmDisplayFrequency;

ListBox1->Items->Add(st);

}

}

index++;

}while(flag & index<300);

AnsiString t;

t.sprintf(" %d Modes Found",index);

Label1->Caption=t;

Listed=true;

Button2->Enabled=true;

}

file://---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

file://GetDeviceCaps

int i;

if(!Listed)

{

Label1->Caption="List display modes first.";

return;

}

for(i=0;i<ListBox1->Items->Count;i++)

{

if(ListBox1->Selected[i])

{

int x;

String st,st1;

st=ListBox1->Items->Strings[i];

x=st.Pos(" ");

st1=st.SubString(1,x-1);

x=st1.ToInt();

Label1->Caption=x;

ChangeDisplaySettings(&table[x],0);

break;

}

}

if(i==ListBox1->Items->Count)

Label1->Caption="Select a modes first.";

Button3->Enabled=true;

int r=MessageBox(0,"can you see anything?","display",MB_OKCANCEL);

if(r==IDCANCEL)

Button3Click(Sender);

else

Button3->SetFocus();

}

file://---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

ChangeDisplaySettings(NULL,0);

Button3->Enabled=false;

}

file://---------------------------------------------------------------------------

怎样实现将Memo的文本信息打印出来

TPrinter * pPrinter=Printer();

pPrinter->Title="打印Memo1中的数据";

pPrinter->BeginDoc();

int y=10;

for(int i=0;i<Memo1->Lines->Count;i++)

{

pPrinter->Canvas->TextOut(10,y,Memo1->Lines->Strings[i]);

y+=pPrinter->Canvas->TextHeight("A");

}

pPrinter->EndDoc();

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有