名 称:极域电子教室终结者dll
版 本:V1.0(支持极域电子教室V6 2007豪华版)
主要功能:(和极域电子教室相关的)
获取/设置极域电子教室学生端密码
获取/设置极域电子教室学生端班级
获取极域电子教室学生端绑定IP
获取/设置极域电子教室学生端进程保护状态
获取/设置极域电子教室学生端断线锁屏状态
关闭极域电子教室学生端进程
模拟教师端发送远程消息(最累的。。)
其他功能:
设置端口复用
初始化Windows Socket 2
获得注册表键值
设置注册表键值
说 明:
1.打开"源文件\TopdomainTer.dsw",编译,生成TopdomainTer.dll文件和TopdomainTer.lib文件。
2.打开你自己的工程,在"工程->设置->连接"的"对象/库模块"中输入ws2_32.lib和TopdomainTer.lib,中间用空格分隔。
3.将TopdomainTer.h添加到你的工程,这样就可以引用里面的函数了,函数名称比较好理解,具体的函数功能可以在源文件中查看。
4.生成你的软件,使用时将TopdomainTer.dll放在你exe程序所在的目录下。
dll仅供学习和交流使用,不允许用于商业用途。但可以对程序完善、修改,如果发现了一些Bug或完善了程序,我希望您能发送一份到sunnysab@yeah.net。
您可以在任何地方免费发布这个程序并且不说明作者地址,但是别把别人的功劳清零了。。。
最后,感谢您的使用
有一个功能,获取网段内所有教师端的列表,代码已经写好,但是由于依赖MFC,没有加在dll中。代码如下:
DWORD WINAPI MonitorThread( LPVOID lpParameter )
{
SOCKADDR_IN Local,
SockAddr;
SOCKET Socket,
NewSocket;
char LocalIp[20];
CListCtrl *List = (CListCtrl*)lpParameter;
if( List == NULL )
{
MessageBox( NULL, "List为空", NULL, 0 );
}
if( !InitWinsock2() )
{
MessageBox( NULL, "初始化 Windows Socket 2 失败!", NULL, MB_OK );
return FALSE;
}
memset( LocalIp, 0, 20 );
if( !GetTopdomainStudentIp( LocalIp ) )
{
MessageBox( NULL, "获取绑定的IP地址失败!", NULL, MB_OK );
WSACleanup();
return FALSE;
}
Socket = WSASocket( AF_INET, SOCK_DGRAM, 0, NULL, 0, WSA_FLAG_MULTIPOINT_D_LEAF|
WSA_FLAG_MULTIPOINT_C_LEAF|
WSA_FLAG_OVERLAPPED );
if( !Socket )
{
MessageBox( NULL, "获取套接字失败!", NULL, MB_OK );
WSACleanup();
return FALSE;
}
if( !SetPortReUse( Socket ) )
{
MessageBox( NULL, "设置端口重用失败!", NULL, MB_OK );
closesocket( Socket );
WSACleanup();
return FALSE;
}
Local.sin_family = AF_INET;
Local.sin_addr.s_addr = inet_addr( LocalIp );
Local.sin_port = htons(4804);
if( bind( Socket, (sockaddr*)&Local, sizeof(Local)) == SOCKET_ERROR )//绑定
{
MessageBox( NULL, "绑定端口失败!", NULL, MB_OK );
closesocket( Socket );
WSACleanup();
return FALSE;
}
SockAddr.sin_family = AF_INET;
SockAddr.sin_port = htons( 4804 );
SockAddr.sin_addr.S_un.S_addr = inet_addr( "224.40.40.40" );
if( ( NewSocket = WSAJoinLeaf( Socket, (SOCKADDR*)&SockAddr,sizeof(SockAddr),NULL,NULL,NULL,NULL, JL_BOTH) ) == SOCKET_ERROR )
{
MessageBox( NULL, "加入组播失败!", NULL, MB_OK );
closesocket( Socket );
WSACleanup();
return FALSE;
}
for( ; ; )
{
char Js[100];
int len = sizeof(SockAddr);
memset( Js, 0, 100 );
if( recvfrom( NewSocket, Js, 100, 0, (SOCKADDR*)&SockAddr, &len ) == SOCKET_ERROR )
{
MessageBox( NULL, "接收后数据失败!", NULL, MB_OK );
closesocket( Socket );
WSACleanup();
return FALSE;
}
char *TeacherIp = new char[20];
char *MultIp = new char[20];
char *TeacherName = new char[30];
char *port = new char[10];
char *_class = new char[10];
int Class = 0;
short Port = 0;
int ret = 0;
memset( TeacherIp, 0, 20 );
memset( MultIp, 0, 20 );
memset( TeacherName, 0, 30 );
memset( _class, 0, 10 );
memset( port, 0, 10 );
ret = ResolveTeacherMessage( Js, TeacherIp, MultIp, TeacherName, Class, Port );
sprintf( port, "%d", (unsigned short)Port );
sprintf( _class, "%d", Class );
switch( ret )
{
case 0: {
int Count = List->GetItemCount();
bool Repeat = false;
CString Rclass;
Rclass.Format( "%d", Class );
for( int i = 0; i < Count; i ++ )
{
if( !Rclass.CompareNoCase( List->GetItemText( i,2 ) ) )
{
Repeat = true;
break;
}
}
if( !Repeat )
{
List->InsertItem( Count, TeacherIp, 0 );
List->SetItemText( Count, 1, MultIp );
List->SetItemText( Count, 2, _class );
List->SetItemText( Count, 3, port );
List->SetItemText( Count, 4, TeacherName );
}
break;
}
}
delete[] TeacherIp;
delete[] MultIp;
delete[] _class;
delete[] port;
delete[] TeacherName;
}
closesocket(Socket);
WSACleanup();
return TRUE;
}