您说的这种情况,我不是非常的清楚。
监控qq聊天窗口的话,我建议您可以在需要监控的电脑上下载电脑监控专家试试。
软件功能:
1.键盘输入记录功能
记录键盘的所有输入,包括中文、英文、数字以及功能键按键记录。QQ聊天记录、MSN聊天记录、发送邮件的内容以及上网登陆一些网站或邮箱时输入的用户名和密码都会被记录下来(提示:请勿将软件用于非法用途)。
2.屏幕显示记录功能
定时对全屏或活动的程序窗口进行截图保存。让你对电脑上的显示和操作了如指掌。
3.活动窗口监控功能
记录所有打开的窗口标题和打开的时间,并且可以禁止打开标题中包含你指定的文字的窗口。
哦哦,有这么多功能呢!我就是一个菜鸟,谢谢!回去在研究一下
好的,有什么问题的话,可以和我联系。
求易语言监控文件变化的命令,并且如果发现文件变化,可以做出反应。 求代码!
取文件md5值更多
详细
求代码
用时钟 取文件md5值 如与原始不一样 就执行...
怎样取md5值
看帮助
易语言--- 怎样监控文件夹下的文件的变化,如新建,删除,重命名,并且能分辨出是用户操作和程序操作
分辨出是用户操作和程序操作这个 就不清楚怎么弄了
其他要求去下载 超级模块和精易模块都可以完成
如何 用易语言 编程,在自己电脑屏幕上 设计一个 指定 数字捕捉器,监控 指定区域的 数字变化。
你还得多学习学习!
就如同开发一个AI一样!说的好像只有判断执行学习,这三个要点!
然而实际却还要很多基础知识
易语言更改内存数值
.版本 2
.程序集 窗口程序集1
.程序集变量 ID, 整数型
.程序集变量 进程句柄, 整数型
.程序集变量 地址1, 整数型
.程序集变量 地址2, 整数型
.子程序 __启动窗口_创建完毕
ID = 进程取ID (“winlinez.exe”)
进程句柄=进程ID取进程句柄(ID)
地址1 = 读内存整数型 (进程句柄, 十六到十 (“00430144”))
地址2 = 读内存整数型(进程句柄,地址1 + 十六到十 (“00430144”)
.子程序 _按钮1_被单击
时钟1.时钟周期 = 1000
.子程序 _时钟1_周期事件
写内存整数型 (进程句柄, 地址2, 9999)
.子程序 _按钮2_被单击
时钟1.时钟周期 = 0
如果还是读不出来,那么这个地址就是有内存保护机制的,或者你找的不是基址
易语言制作出来的编辑
你又没有做免杀的,下载个定位器...修改
定位器是可以干什么的?怎么修改,免杀?免杀看过很多但是不知道是干什么用的
特征码定位器修改,修改后文件肯定会发生变化,包括功能?但是免杀效果很好 ,也有其他做免杀的方法,比如..变化入口地址免杀法+...加花指令法免杀法+...加壳或加伪装壳免杀法+...打乱壳的头文件免杀法.
在这说下免杀是什么,比如你做一个远程监控软件..想控制对方的电脑,发恶劣程式给对方。这时免杀可以绕过杀毒软件...悄悄进入对方的电脑
我可以教你 但是收费的
易语言修改内存值
.版本 2
.支持库 WgLib.程序集 窗口程序集1
.程序集变量 PID, 整数型.子程序 __启动窗口_创建完毕PID = 取进程ID (“tiske.exe”)
.如果真 (PID ≠ 0)
时钟1.时钟周期 = 10
.如果真结束
.子程序 _时钟1_周期事件
.局部变量 数值, 整数型数值 = 读内存整数型 (PID, 十六到十 (“012543”), -1)
.如果真 (数值 = -1)
时钟1.时钟周期 = 0
信息框 (“读取失败!”, 0, )
__启动窗口_创建完毕 ()
.如果真结束
.如果真 (数值 ≠ 100 且 数值 ≠ -1)
写内存整数型 (PID, 100)
.如果真结束需要一个超级模块即可
易语言实时检测
[转]基于多线程的CSocket网络编程技术
收藏人:BuYuLibrary
2015-06-09 | 阅:1 转:20
MFC下使用CSocket或者CAsyncSocket进行Socket通信,CSocket继承自CAsyncSocket。这两者的区别在于,CSocket是同步的Socket,CAsyncSocket则是异步的。使用时,CSocket::Receive()和CSocket::Send()函数会阻塞当前线程,直至操作完成;而CAsyncSocket::Receive()和CAsyncSocket::Send()函数则不阻塞线程,函数立即返回。所以这两者在使用方式上有所不同。这里探讨一种使用CSocket配合CSocketFile、CArchive和CThread的多线程C/S模式。
{网络通信主要有阻塞和非阻塞两种编程,前者是可靠连接通信(相当于一问须一答方式),后者只是传声筒,只管发出去,不管接收}
CSocket通过CSocketFile由CArchive管理,可以得到类似iostream方式的流输入输出。这种方式的主要过程有:创建连接、接受数据、发送数据和断开连接。CSocket必须附加在与其一起工作的线程上,不能通过其他线程调用,所以主要通过在线程之间的传递消息和加锁实现线程的通信和同步。我们将分服务端(Server)和客户端(Client)分别讨论具体实现。
{流文件方式通信,很方便对各数据类型读写操作,实现数据传输(JAVA基本传输就是这种模式)。CSocket必须在一个工作线程内实现,不能分开在不同的线程上}
1.服务端
服务端有一个主界面,其类为CSCEServerDlg,继承自CDialog,它保存线程池和锁。为了简单起见,后面的类声明中大部分的成员变量访问控制都是public。{主应用程序线程,采用线程池(保存线程的列表)和锁进行同步运行控制,创建服务端的Socket(m_socketListen)监听客户连接。}声明类似如下:
typedef list<CWinThread*> PThreadList;
class CSCEServerDlg : public CDialog
{
...
public:
CCriticalSection m_csThrdList; // 线程池锁
PThreadList m_thrdList; // 线程池
int m_thrdIndex; // 线程计数器
CServerSocket m_socketListen // 监听CSocket
…
};
和CSocket一起工作的线程类为CSerSocketThread,继承自CWinThread。这里使用CWinThread是因为它可以处理消息,这样便于线程间通信。重载了CWinThread::InitInstance(),在线程建立时做处理,具体实现在后面会有。声明如下:{采用可以处理消息传递的CWinThread线程类,把Socket工作绑定到该线程上去}
class CSerSocketThread : public CWinThread
{
DECLARE_DYNCREATE(CSerSocketThread)
public:
CSerSocketThread(void);
~CSerSocketThread(void);
virtual int ExitInstance();
virtual BOOL InitInstance();
int m_thrdIndex;
CSCEServerDlg* m_pSerDlg; // 主界面指针
SOCKET m_hSocket; // Socket 句柄
CServerSocket m_serverSocket; // 附加在这个线程上的CSocket
CSocketFile* m_socketFile; // CSocketFile
CArchive* m_arIn; // 输入CArchive
CArchive* m_arOut; // 输出CArchive
...
protected:
DECLARE_MESSAGE_MAP()
afx_msg void OnCustomMsg(WPARAM wParam,LPARAM lParam);
void ReceiveData();
void SendData(const int WP, const CString& strMsg);
...
};
我们使用的具体的CSocket类是CServerSocket,继承自CSocket,重载了CSocket::OnAccept()函数和CSocket::OnReceive()函数。监听端口的CSocket在有Socket连接时会调用OnAccept()函数处理连接的建立。当已经连接的CSocket接收到数据时,则会调用OnReceive()函数,这里要注意的是,如果对方发送的数据较大,则有可能被分成多次发送,这种情况下会多次调用OnReceive()函数,后面会提高如何来处理这个问题。同样的道理,在发送数据时则会调用OnSend()函数,这里我们不会用到它。{服务端的Socket类主要是接收客户端的连接和接收客户端数据,当接收数据很大时,采用多次发送和接收方式(这是采用CSocketFile方式的好处,自动处理数据量传输大小)}
CServerSocket的声明:
class CServerSocket :
public CSocket
{
public:
CServerSocket(void);
~CServerSocket(void);
virtual void OnAccept(int nErrorCode);
virtual void OnReceive(int nErrorCode);
CSCEServerDlg* m_pSerDlg; // 主界面指针
CWinThread* m_pThrd; // 该CSocket所在的线程
int m_thrdIndex; // 该CSocket所属线程的index,服务 Socket 为 -1
};
{除了Socket类绑定到工作线程上,Socket类中也包含其工作线程指针和主程序指针}
OnAccept()函数的实现:
void CServerSocket::OnAccept(int nErrorCode)
{
// TODO: 在此添加专用代码和/或调用基类
if(nErrorCode == 0)
{
// 创建一个连接Socket
CServerSocket connectSocket;
Accept(connectSocket); // connectSocket将和客户端连接
// 创建一个线程
CSerSocketThread* pThread =
(CSerSocketThread*)AfxBeginThread(
RUNTIME_CLASS(CSerSocketThread),
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED);
{服务端Socket得到客服端连接,要创建一个连接的Socket与客户端连接通信(以后这个连接Socket与客户端绑定通信),创建一个线程来为连接Socket服务}
// 添加到线程池中
m_pSerDlg->m_csThrdList.Lock(); // 加锁
m_pSerDlg->m_thrdList.push_back(pThread);
m_pSerDlg->m_csThrdList.Unlock(); // 解锁
pThread->m_pSerDlg = m_pSerDlg;
/*
* 将CSocket交给新建的线程
* 这样这个CSocket将和新建的线程一起工作
* 注意现在是在界面线程中,因为是监听CSocket,是CServerDlg的成员变量
* 必须通过Detach()得到HANDLE之后在工作线程中重新Attach()才行
*/
{如何把创建的Socket绑定到新建的工作线程中?现在用服务端Socket是在主应用程序中,用Detach、attach对Socket进行解绑、加绑,即把主线程中创建的连接Socket“离开”主线程,附加在工作线程上}
pThread->m_hSocket = connectSocket.Detach();
// 线程编号,通过这个在通信时区别不同的客户端
{如何区分各工作线程(与客户端连接通信的Socket)?通过主程序(主线程)中的id标示}
pThread->m_thrdIndex = m_pSerDlg->m_thrdIndex++;
// 启动线程
pThread->ResumeThread();
}
CSocket::OnAccept(nErrorCode);
}
当监听CSocket监听到有客户端接入,调用OnAccept()函数。通过Accept()函数将连接建立,之后建立一个新的线程,让连接的CSocket附加上去,将线程加入线程池,OnAccept()函数的主要工作就完成了。
{各连接客户端的工作线程是在监听接受函数中创建}
OnReceive()函数的实现:
void CServerSocket::OnReceive(int nErrorCode)
{
// 通过自定义消息WM_THREAD和消息参数WP_RECV通知线程去读取数据
{由Socket绑定的线程通过消息去通知接收数据}
m_pThrd->PostThreadMessage(WM_THREAD, WP_RECV, 0);
//CSocket::OnReceive(nErrorCode);
}
当接收到数据时,CServerSocket就通知它附加的线程去接收数据,以便进一步处理。
下面看一下CSerSocketThread的几个处理的实现:
InitInstance()函数,这个函数在新线程被构造出来后调用,用来完成一些自定义的新建过程:
BOOL CSerSocketThread::InitInstance()
{
// TODO: 在此添加专用代码和/或调用基类
if (!AfxSocketInit()) // 初始化CSocket必须调用的
{
return CWinThread::InitInstance(); // 立刻退出
}
{对服务端Socket附加的socket句柄}
if(m_serverSocket.Attach(m_hSocket)) // 重新Attach之前传入的Socket
{
m_serverSocket.m_pThrd = this; // 告诉CSocket它所附加工作的线程
m_serverSocket.m_thrdIndex = m_thrdIndex;
m_serverSocket.m_pSerDlg = m_pSerDlg;
// 建立CSocketFile,将CSocket附加在上面
{把服务端Socket绑定到sockfile上,通信采用文件流方式进行}
m_socketFile = new CSocketFile(&m_serverSocket);
// 输入CArchive
m_arIn = new CArchive(m_socketFile, CArchive::load);
// 输出CArchive
m_arOut = new CArchive(m_socketFile, CArchive::store);
return TRUE; // 这样线程就不会立刻退出
}
return CWinThread::InitInstance(); // 立刻退出
}
当新线程构造好了之后,InitInstance()函数被调用。将传入的CSocket的HANDLE重新Attach到线程自己的CSocket成员上,之后建立CSocketFile和两个CArchive用于输入输出,这里CSocketFile会互斥访问,输入和输出的CArchive无法并发操作它。
{新线程构造调用InitInstance(),应是线程启动调用}
之前的CServerSocket::OnReceive()中通过消息通知线程来接受数据,下面看具体的实现。
首先声明将WM_THREAD消息绑定到CSerSocketThread::OnCustomMsg()函数:
BEGIN_MESSAGE_MAP(CSerSocketThread, CWinThread)
ON_THREAD_MESSAGE(WM_THREAD, OnCustomMsg)
...
END_MESSAGE_MAP()
OnCustomMsg()函数的实现:
void CSerSocketThread::OnCustomMsg(WPARAM wParam,LPARAM lParam)
{
switch(wParam)
{
case WP_RECV:
// 接收数据
// 先把接收数据事件关掉
{关闭接受数据,避免后续接受数据不停传来,造成处理堵塞,这样读写一次完成}
m_serverSocket.AsyncSelect(FD_CLOSE);
*m_arIn >> ...; // 读取数据
// 重新打开接收数据事件
m_serverSocket.AsyncSelect(FD_READ|FD_CLOSE);
...
break;
...
}
}
接收到的WM_THREAD消息包含WP_RECV的消息参数后,首先先关掉接收数据事件,这样就可以通过CArchive的operator >>一次读取完所有数据(根据自己定义的方式),读取完成后再打开接收数据事件。通过这个流程,每次数据发送就只会调用一次OnReceive()函数。这里要注意的是必须用CArchive的operator >>根据发送的情况正确的读取数据,最好都读取出来,否则下次读取时可能会出现错误。
{CArchive读写顺序要一致}
如果需要发送数据,则在CSerSocketThread线程中使用CArchive的operator <<发送所有支持operator <<的类型。注意的是必须是在这个工作线程中调用,CSocket是附加在线程上的,同样CArchive也只能在工作线程上使用,如果通过别的线程调用,就和系统的Socket表不对应了。另外还有注意的是输出完后需要显式调用CArchive::Flush()将数据发出。
{同一线程读写(接收和发射)}
主界面对CServerSocket的使用则比较简单,如下:
m_socketListen.m_pSerDlg = this;
if (!AfxSocketInit()) // Socket初始化
SomeMessageFunc("SOCKET 初始化失败!");
else if (!m_socketListen.Create(xxxx)) // 创建监听Socket
SomeMessageFunc("监听 SOCKET 创建失败!");
else if (!m_socketListen.Listen()) // Socket监听
SomeMessageFunc("监听 SOCKET 监听失败!");
else
SomeMessageFunc("监听建立");
2.客户端
客户端部分的大部分处理和服务端是类似的,主要区别在于客户端主动连接服务端的监听端口。客户端首先建立工作线程,在线程重载的InitInstance()函数中建立到服务端的连接,成功就继续工作,失败就停止线程即可。之后当CSocket接收数据是,调用重载的OnReceive()函数,通过消息通知工作线程使用CArchive读取数据。发送时则由工作线程使用CArchive发送数据,显式调用CArchive::Flush()。
{客户端必须知道服务器端IP和工作端口,才能连接}
连接代码,依然是在:
BOOL CCliSocketThread::InitInstance()
{
// TODO: 在此添加专用代码和/或调用基类
if (!AfxSocketInit()) // 一样的初始化,必须调用
{
return CWinThread::InitInstance();
}
if (!m_clientSocket.Create()) // 建立CSocket
{
SomeMessageFunc("Socket 创建失败");
return CWinThread::InitInstance();
}
m_clientSocket.m_pCliDlg = m_pCliDlg;
CString strIP(”xxx.xxx.xxx.xxx”);
UINT port = xxxx;
if (m_clientSocket.Connect(strIP, port)) // 连接服务端
{
// 连接建立
m_clientSocket.m_thrd = this;
m_socketFile = new CSocketFile(&m_clientSocket);
m_arIn = new CArchive(m_socketFile, CArchive::load);
m_arOut = new CArchive(m_socketFile, CArchive::store);
SomeMessageFunc("连接成功");
return TRUE; // 线程继续工作
}
return CWinThread::InitInstance();
}
我要的是易语言 不是c语言
转载请注明出处51数据库 » 易语言监控软件变化 易语言监控软件变化与截图
优柔寡断你二舅