ShellExecute函数学习

记得曾经用VB调用外部连接一句代码实现了,用到了SHELL函数,在Delphi中需要加入函数所在的单元,Delphi中ShellExecute函数所在的单元是shellapi也就是加入下面代码:
uses shellapi
下面介绍这个函数的用途:
//调用可执行文件:
ShellExecute(Handle, ‘open’, PChar(‘c:\test.exe’), nil, nil, SW_SHOW);
//记事本并打开一个文本文件 (系统知道记事本程序的位置,所以我们不必给出完整路径):
ShellExecute(Handle, ‘open’, PChar(‘notepad’), PChar(‘c:\readme.txt’), nil, SW_SHOW);
//打印一个文档:
ShellExecute(Handle, ‘print’, PChar(‘c:\test.doc’), nil, nil, SW_SHOW);
//打开一个HTML网页,本地的或远程的:
ShellExecute(Handle, ‘open’, PChar(‘http://www.0535code.com/’), nil, nil, SW_SHOW);
//打开HTML帮助文件:
ShellExecute(Handle, ‘open’, PChar(‘c:\windows\help.chm’), nil, nil, SW_SHOW);
//浏览文件夹:
ShellExecute(Handle, ‘explore’, PChar(‘c:\windows)’, nil, nil, SW_SHOW);
//运行DOS命令并立即返回:
ShellExecute(Handle, ‘open’, PChar(‘command.com’), PChar(‘/c copy file1.txt file2.txt’), nil,SW_SHOW);
//运行DOS命令,保持DOS窗口是开着的:
ShellExecute(Handle, ‘open’, PChar(‘command.com’), PChar(‘/k dir’), nil, SW_SHOW);

Delphi自动启动代码

Delphi自启动代码:

unit Unit1;
//download by wangchi http://www.0535code.com

interface

uses
Windows,Registry, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
procedure SetAutorun(aProgTitle,aCmdLine: string; aRunOnce: boolean );
var
hKey: string;
hReg: TRegIniFile;
begin
if aRunOnce then
//程序只自动运行一次
hKey := 'Once'
else
hKey := '';
hReg := TRegIniFile.Create('');
//TregIniFile类的对象需要创建
hReg.RootKey := HKEY_LOCAL_MACHINE;
//设置根键
hReg.WriteString('Software\Microsoft\Windows\CurrentVersion\Run'
+ hKey + #0,
aProgTitle,
//程序名称,可以为自定义值
aCmdLine );
//命令行数据,必须为该程序的绝对路径+程序完整名称
hReg.destroy;
//释放创建的hReg
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
SetAutorun(Application.Title,application.ExeName,false);
end;

end.

C++生成文章RSS地图程序

今晚想用C++写一个文章列表的程序,很简单的小程序,可是就是出现问题了,贴代码:

#include "stdafx.h"
int main()
{
int i=1;
int sum=0;
while(sum<=1000)
{
i++;
sum=i+1;
printf("http://www.0535code.com/article.asp?id=%d\n",sum);  //system("pause");
}
return 0;
}

这个程序看起来没问题的。可是就是有问题,输出的时候是从703开始的,而不是从1到1000,理论上程序是没问题的,难道是变量类型,想了又想,还是不晓得程序问题出现在那里了,之后问了下同事,同事要我加上system(“pause”);这句,加上去后,回车一下输出一行,一直按着回车后到了最后,看看开始还是703,然后同事说控制台显示不了那么多,没有那么多行,可以保存到文件里,就可以看到全部了,原来是这个问题,贴下正确代码:

#include "stdafx.h"
int main()
{
FILE *pf = fopen("C:\\article.html","w+");
int i=1;
int j=0;
while(i<=1000)
{
j=i++;
fprintf(pf,"<a href=http://www.0535code.com/article.asp?id=%d>http://www.0535code.com/article.asp?id=%d</a>\n<br>",j,j);
}
fclose(pf);
return 0;
}

编程学习网 原创C++生成文章RSS地图程序源码

C++经典面试题之一

题目(王小鹏老师):给两个变量,不用第三个变量怎么交换两个变量的值?
回答(范鹏远老师):通过两个数的和先相加赋给其中一个变量,然后减去另一个变量赋给第一个变量这样就可以交换。
回答(王小鹏老师):还可以通过位移来实现交换两个变量的值。
程序代码如下(高龙云老师写):

#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int a=3,b=4;
a=a+b;
b=a-b;
a=a-b;
cout<<a<<endl;
cout<<b<<endl;
}

C++小技巧-考你智商

#include <stdio.h>
void main()
{
printf("%d\n",1);
}

考题(马琦明老师出):上面控制台程序修改main函数里面部分,不允许有分号(;)输出上述数字?
说明:咦,这是一个智商问题,当时我是没想到怎么解决这问题,智商没那么高,真有智商高的人,不承认不行。
答案(范鹏远老师答): 程序中用IF语句

#include <stdio.h>
void main()
{
if(printf("%d\n",1))
{
}
}

北京某公司的面试题之一

题目是这样的:
编写一个字符串分割模块,用户可以在屏幕上输入任意字符串和分割字符,然后点击‘分割’按钮,结果显示在一个listbox控件上。
例如:I love beijing and china, 按字符i分割的话成为五个句子
i
love bei
ji
ng and chi
na
这个题刚开始看了一下,很简单,但是写程序的时候会发现很多问题了,到现在还是没有完全完善好这程序,没那么多时间去完善了,先把写的发出来吧,有时间再去完善吧,也希望高人们指教,谢谢。

CString str; //字符串
CString stop; //分割字符
CString strsave;
UpdateData(TRUE); //刷新文本内容
GetDlgItem(IDC_EDIT1)->GetWindowText(str);
GetDlgItem(IDC_EDIT2)->GetWindowText(stop);

int len=str.GetLength();
int lensave;
while(str.Find(stop))
{
lensave=str.Find(stop);
strsave=str.Left(lensave);
CString strout=strsave+stop;
//MessageBox(strout);
m_list.AddString(strout);//要关联对象变量,使用指针的话,不可以保存多个值
if (strout==stop)
{
break;
}
str=str.Right(len-lensave-1);
len=str.GetLength();
}
//此程序存在两个问题,第一当输入第一个字符为查找字符时,直接转到判断退出了
//第二就是用指针CListbox保存后的值都是第一个值,所以要关联对象变量,但是添加顺序是乱的
//期待高手解决吧。。。

几天后??? QQ:大连—虬(610512037) 帮完善了。

CString str; //字符串
CString stop; //分割查找字符
CString strsave;//分割后部分字符串
UpdateData(TRUE); //刷新文本内容

GetDlgItem(IDC_EDIT1)->GetWindowText(str);
GetDlgItem(IDC_EDIT2)->GetWindowText(stop);
CListBox *plist=(CListBox *)GetDlgItem(IDC_LIST1);
//获取原始字符串长度
int len=str.GetLength();
//找到第一个分割字符位置
int lensave = str.Find(stop);
while( len > 0 )
{
strsave=str.Left(lensave);
CString strout=strsave+stop;
//如果strout以空格开头,则删除空格
if (strout[0] == ' ')
{
int lentemp = strout.GetLength();
strout = strout.Right(lentemp - 1);
}
//每次都从list末尾插入
plist->InsertString(-1,strout);
str=str.Right(len - lensave - 1);
lensave = str.Find(stop);
len=str.GetLength();
//如果当前剩余字符串已经没有分隔符,则直接将剩余字符串插入list末尾
if ((lensave == -1) && ( len != 0))
{
plist->InsertString(-1,str);
break;
}
}

MFC模态与非模态对话框整理

今晚写了下,老出错误,拿出一起的总结,顺便也分享一下:
模态显示对话框:

CAboutDlg dlg;//第一个 类名 类对象
dlg.DoModal();//类对象的 模态显示方法
非模态显示对话框:

CAboutDlg *dlg= new CAboutDlg;
//定义指针,如果是对象局部变量会暂时释放内存,见不到对话框,或者声明为全局或者用指针分配内存
dlg->Create(IDD_ABOUTBOX,this);
dlg->ShowWindow(SW_SHOW);//显示对话框
/*注意用完了,需要释放指针所指向的内存*/

UDP-Server服务端代码

#include <stdio.h>
#include <Winsock2.h>
#pragma comment(lib, "ws2_32.lib");
void main()
{
//加载套接字
DWORD wversionrequested;
WSADATA wsadata;
int err;
wversionrequested=MAKEWORD(1,1);
err=WSAStartup(wversionrequested,&wsadata);
if (err!=0)
{
return;
}
if (LOBYTE(wsadata.wVersion)!=1
||HIBYTE(wsadata.wVersion)!=1)
{
WSACleanup();
return;
}
//创建套接字
SOCKET sockesrv=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addsrv;
addsrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
addsrv.sin_family=AF_INET;
addsrv.sin_port=htons(6000);

//绑定套接字
bind(sockesrv,(SOCKADDR*)&addsrv,sizeof(SOCKADDR));
char recvbuf[100];
char sendbuf[100];
char tempbuf[200];
SOCKADDR_IN addclient;
int len=sizeof(SOCKADDR);

while (1)
{
//等待并接收数据
recvfrom(sockesrv,recvbuf,100,0,(SOCKADDR*)&addclient,&len);
if ('q'==recvbuf[0])
{
sendto(sockesrv,"q",strlen("q")+1,0,(SOCKADDR*)&addclient,len);
printf("Chat-End\n");
break;
}
sprintf(tempbuf,"%s Say: %s",inet_ntoa(addclient.sin_addr),recvbuf);
printf("%s\n",tempbuf);
printf("Please input data:\n");
gets(sendbuf);
sendto(sockesrv,sendbuf,strlen(sendbuf)+1,0,(SOCKADDR*)&addclient,len);
}
closesocket(sockesrv);
WSACleanup();
}

UDP-Client客户端代码

#include <stdio.h>
#include <Winsock2.h>
#pragma comment(lib, "ws2_32.lib");
void main()
{
//加载套接字
WORD wversionrequested;
WSADATA wsadata;
int err;
wversionrequested=MAKEWORD(1,1);
err=WSAStartup(wversionrequested,&wsadata);

if (err!=0)
{
return;
}
if (LOBYTE(wsadata.wVersion)!=1
|| HIBYTE(wsadata.wVersion)!=1)
{
WSACleanup();
return;
}

//创建套接字
SOCKET addclient=socket(AF_INET,SOCK_DGRAM,0);

SOCKADDR_IN addsrv;
addsrv.sin_addr.S_un.S_addr=inet_addr("0535code.com");
addsrv.sin_family=AF_INET;
addsrv.sin_port=htons(6000);

char recvbuf[100];
char sendbuf[100];
char tempbuf[100];
int len=sizeof(SOCKADDR);

while(1)
{
//发送数据
printf("Please input data:\n");
gets(sendbuf);
sendto(addclient,sendbuf,strlen(sendbuf)+1,0,(SOCKADDR*)&addsrv,len);
//等待并接收数据
recvfrom(addclient,recvbuf,100,0,(SOCKADDR*)&addsrv,&len);
if ('q'==recvbuf[0])
{
sendto(addclient,"q",strlen("q")+1,0,(SOCKADDR*)&addclient,len);
printf("Chat End!\n");
break;
}
sprintf(tempbuf,"%s Say: %s",inet_ntoa(addsrv.sin_addr),recvbuf);
printf("%s\n",tempbuf);
}
//关闭套接字
closesocket(addclient);
WSACleanup();
}