掌握Windows进程的创建和销毁API的调用方法,API来
应接来到windows编程的社会风气,先给大家的windows打个招呼吧:
互联网编程1. 套接字编制程序基本知识
操作系统实验及代码(全),操作系统实验代码
操作系统是Computer有关专门的学业的一门特别首要的专门的学业课,但实验课的时候非常多人不清楚代码应该怎么写,这里贴出博主使用过的风姿洒脱有的,亲测可行。
#include <Windows.h>
1.率先互连网编制程序使用C++,要引进一些库
难点1:Windows进度的创导与销毁
履新时间:2017-10-26
剧情及要求:
① 领悟Windows进程的始建和销毁API的调用方法;编制程序代码,在程序中开创和销毁三个Word进度;
② 能够挂起和激活被成立进程的主线程;
③ 通过Windows进度微电脑查看系统经过列表的退换。
试验教导:
①制造进度的API
BOOL CreateProcess(
LPCTSTR lpApplicationName,
LPTSTR lpCommandLine,
LPSECURITY_ATTRIBUTES lpProcessAttributes,
LPSECURITY_ATTRIBUTES lpThreadAttributes,
BOOL bInheritHandles,
DWORD dwCreationFlags,
LPVOID lpEnvironment,
LPCTSTR lpCurrentDirectory,
LPSTARTUPINFO lpStartupInfo,
LPPROCESS_INFORMATION lpProcessInformation
);
例程:
1 void main( VOID ){
2 STARTUPINFO si;
3 PROCESS_INFORMATION pi;
4 ZeroMemory( &si, sizeof(si) );
5 si.cb = sizeof(si);
6 ZeroMemory( &pi, sizeof(pi) );
7 // Start the child process.
8 if( !CreateProcess( NULL, // No module name (use command line).
9 "MyChildProcess", // Command line.
10 NULL, // Process handle not inheritable.
11 NULL, // Thread handle not inheritable.
12 FALSE, // Set handle inheritance to FALSE.
13 0, // No creation flags.
14 NULL, // Use parent's environment block.
15 NULL, // Use parent's starting directory.
16 &si, // Pointer to STARTUPINFO structure.
17 &pi ) // Pointer to PROCESS_INFORMATION structure.
18 ) {
19 ErrorExit( "CreateProcess failed." );
20 }
21 // Wait until child process exits.
22 WaitForSingleObject( pi.hProcess, INFINITE );
23 // Close process and thread handles.
24 CloseHandle( pi.hProcess );
25 CloseHandle( pi.hThread );
26 }
② 销毁进程API
BOOL TerminateProcess(
HANDLE hProcess,
UINT uExitCode
);
③ 挂起进程的主线程API
DWORD SuspendThread(
HANDLE hThread
);
④激活进度的主线程API
DWORD ResumeThread(
HANDLE hThread
);
⑤经过查看器
1 #include<iostream> 2 #include<windows.h> 3 using namespace std; 4 void main( VOID ) 5 { 6 STARTUPINFO si; 7 PROCESS_INFORMATION pi; 8 /** 9 * 这里填个人的word可试行文件的路径10 * ps:""必要举行转义 11 **/ 12 TCHAR szCommandLine[]=TEXT("D:\Microsoft Office\Office14\WINWORD.EXE"); 13 ZeroMemory(&si, sizeof(si) ); 14 si.cb= sizeof(si); 15 ZeroMemory(&pi, sizeof(pi) ); 16 if(!CreateProcess( NULL, szCommandLine, NULL,NULL, FALSE,0,NULL, NULL,&si,&pi 卡塔尔(قطر 卡塔尔(قطر 17 { 18 fprintf(stderr,"进度创立失利!"卡塔尔; 19 } 20 int x; 21 while(1卡塔尔国 22 { 23 cout << "请输入要采取的操作:n1:成立进度n2:销毁进度n3:挂起经过n4:激活进度n0:退出n"; 24 cin >> x; 25 switch(x卡塔尔 26 { 27 case 1: 28 if(CreateProcess( NULL, szCommandLine, NULL,NULL, FALSE,0,NULL, NULL,&si,&pi 卡塔尔国 卡塔尔国 29 fprintf(stderr,"进程创建成功!"卡塔尔(قطر; 30 else 31 cout << "进度创制战败!"<<endl; 32 break; 33 case 2: 34 if(TerminateProcess(pi.hProcess,0卡塔尔国卡塔尔国 35 cout<<"销毁进度成功"<<endl; 36 else 37 cout<<"销毁败北!"<<endl; 38 break; 39 case 3: 40 if(SuspendThread(pi.hThreadState of QatarState of Qatar 41 cout<<"挂起经过成功"<<endl; 42 else 43 cout<<"挂起失利"<<endl; 44 break; 45 case 4: 46 if(ResumeThread(pi.hThread卡塔尔(قطر卡塔尔(قطر 47 cout<<"激活进度成功"<<endl; 48 else 49 cout<<"激活退步"<<endl; 50 break; 51 case 0: 52 exit(0卡塔尔(قطر; 53 default: 54 cout<<"输入有误不正确"<<endl; 55 } 56 } 57 }
不停更新中!!!
作者:耑新新,发布于 博客园
转发请注解出处,迎接邮件调换:[email protected]
操作系统是Computer有关专门的职业的一门特别重要的专门的学业课,但实验课的时候超级多个人不亮堂代码应...
#include <iostream>
#include <Windows.h>
using namespace std;
并且必要运用静态链接库,
int main()
这里运用的是编写翻译语句#pragma comment(lib,"ws2_32.lib"卡塔尔国 也正是将ws2_32.lib静态链接库参与到花色中,效果和拉长援用是相仿的。
{
ws2_32.lib对应的是ws2_32.dll,提供对于大面积网络编制程序的API接口帮忙,使用此中的互联网接口就须要将ws2_32.dll增添到工程,不然需求动态的加载ws2_32.dll。
int iSelect=MessageBox(NULL,TEXT("你好,windows世界,我来了!"),TEXT("你好,世界"),MB_OKCANCEL);
- WSAStartup 函数的介绍
if(iSelect==IDOK)
WSAStartup是Windows SockNDs Asynchronous(Windows 异步套接字) 的开发银行命令, windows下的网络编程软件Winsock1, Winsock2的一个发令。
{
WSAStartup函数落成对Winsock服务的开头化,由此要求调用WSAStartup函数。使用Socket程序在动用Socket从前必得调用WSAStartup函数。该函数的首先个参数表示程序央求使用的Socket版本,高字节表示副版本,低字节表示主版本;操作系统利用第二个参数再次来到央浼的Socket的版本新闻。当二个应用程序调用WSAStartup函数的时候,操作系统依照要求的Socket版本来搜索响应的Socket库,绑定到Socket库到应用程序中。在其后的顺序中得以调用Socket库中的别的的socket函数。
*cout<<"you select ok "<<endl*;
int WSAStartup(WORD wVersionRequest, LPWSADATA lpWSAData);
}else
参数介绍:
{
wVersionRequest: 三个双字节数值, 使用MAKEWOOdysseyD(2,2卡塔尔国生成;
*cout<<"you select cancel"<<endl*;
lpWSG.Skill: 指向叁个WSADATA的数据构造的指针,用于吸收接纳Windows Sockets达成的底细。
}
If the function return 0, 表示成功。
*system*("pause");
开启Windows Sock Asynchronous,对应该程序结束的时候,就应当关闭,WSACleanup(卡塔尔(قطر用于接触于Socket库的绑定而且释放掉Socket库所据有的系统财富。
return 0;
3.常见的部分函数在WinSocket编制程序中应用的牵线
}
3.1 gethostname(卡塔尔(قطر // 获取当地主机的主机名
所谓windows编制程序就是指通过调用Windows API来和操作系统交互作用的编制程序情势。API便是与操作系统人机联作的各个效能函数,MessageBox正是叁个API,调用它就能够弹出多个对话框。
函数原型: int PASCAL FA智跑 gethostname( char FATucson * name, int namelen);
Name:用于指向主机名缓冲区的指针,namelen: 缓冲区的轻重。
Return Value:无不当的话,再次回到0,反之重回对应的错误代码。
#include <iostream>
#include <Windows.h>
using namespace std;
#pragma comment(lib,"ws2_32.lib")
int main(){
WSADATA wsa ;// WSADATA 构造是用来保存函数WSAStartup 再次回到的Windows socket起头化消息
if(WSAStartup(MAKEWORD(2,1),&wsa) != 0){
cout << "套接字早先化退步"<< endl;
Sleep(3000);
exit(-1);
}else{
cout << "套接字初阶化成功" << endl;
}
char buf[255];
if( gethostname(buf,sizeof(buf)) == SOCKET_ERROR ){
cout << "获取本地主机的Name失利:"<<WSAGetLastError(卡塔尔国<< SOCKET_ERROR << endl;
}else{
cout <<"本地主机的名字是:" << buf << endl;
}
WSACleanup(卡塔尔国;// 实现清理专门的学业
return 0;
}
3.2得到主机的IP gethostbyname(const char* name);
hostent 是叁个数据构造,保存从gethostbyname再次来到的音信,包涵主机的IP地址类型IPV4,IPV6,主机的外号,主机的IP长度,h_addr_list[]
www.129028.com, 须要运用in_addr 类型保存三个IP地址,並且需求将IP地址转变到为字符串的格式,使用的是const char * inet_ntoa(in_addr in); 将pht->h_addr_list[i] 转变来为(in_addr*)的指针,然后再经过指针获取器内容,转变来为字符串的款型。
hostent* pht = gethostbyname("www.google.com");
if(pht==NULL){
cout << WSAGetLastError() << endl;
}else{
//cout << AF_INET << endl;
cout << "h_addrtype:" << pht->h_addrtype << endl;