增加进程操作
This commit is contained in:
82
src/module/process.cpp
Normal file
82
src/module/process.cpp
Normal file
@@ -0,0 +1,82 @@
|
||||
#include "process.h"
|
||||
#include "util/process.h"
|
||||
#ifdef _WIN32
|
||||
#include <Windows.h>
|
||||
#endif
|
||||
size_t module::process::create(const std::string& filepath, const std::string& working_directory, sol::table args, bool wait_close, bool show_window)
|
||||
{
|
||||
std::vector<std::string> vs_args;
|
||||
for (auto& pair : args) {
|
||||
if (pair.second.get_type() != sol::type::string)
|
||||
{
|
||||
throw ylib::exception("`args ` only supports string type");
|
||||
}
|
||||
vs_args.push_back(pair.second.as<std::string>());
|
||||
}
|
||||
|
||||
size_t pid = 0;
|
||||
if (ylib::process::create(filepath, working_directory, vs_args, wait_close, show_window, &pid) == false)
|
||||
return 0;
|
||||
return pid;
|
||||
}
|
||||
|
||||
bool module::process::destory(size_t pid)
|
||||
{
|
||||
return ylib::process::destory(pid);
|
||||
}
|
||||
|
||||
sol::table module::process::list(sol::this_state s)
|
||||
{
|
||||
sol::state_view lua(s);
|
||||
sol::table result_table = lua.create_table();
|
||||
int row_num = 1;
|
||||
auto pl = ylib::process::list();
|
||||
for_iter(iter, pl)
|
||||
{
|
||||
sol::table row = lua.create_table();
|
||||
row["name"] = iter->name;
|
||||
row["parent_pid"] = iter->parent_pid;
|
||||
row["path"] = iter->path();
|
||||
row["pid"] = iter->pid;
|
||||
result_table[row_num++] = row;
|
||||
}
|
||||
return result_table;
|
||||
}
|
||||
|
||||
size_t module::process::exist(const std::string& filepath)
|
||||
{
|
||||
return ylib::process::exist(filepath);
|
||||
}
|
||||
|
||||
bool module::process::exist_pid(size_t pid)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pid);
|
||||
if (hProcess != nullptr) {
|
||||
// 进程存在,关闭句柄并返回true
|
||||
CloseHandle(hProcess);
|
||||
return true;
|
||||
}
|
||||
// 进程不存在
|
||||
return false;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
std::string module::process::getpath(size_t pid)
|
||||
{
|
||||
return ylib::process::getpath(pid);
|
||||
}
|
||||
|
||||
void module::process::regist(sol::state* lua)
|
||||
{
|
||||
lua->new_usertype<module::process>("process",
|
||||
"create", &module::process::create,
|
||||
"destory", &module::process::destory,
|
||||
"exist", &module::process::exist,
|
||||
"exist_pid", &module::process::exist_pid,
|
||||
"getpath", &module::process::getpath,
|
||||
"list", &module::process::list
|
||||
);
|
||||
}
|
||||
52
src/module/process.h
Normal file
52
src/module/process.h
Normal file
@@ -0,0 +1,52 @@
|
||||
#pragma once
|
||||
#include "sol/sol.hpp"
|
||||
|
||||
namespace module
|
||||
{
|
||||
/// <summary>
|
||||
/// 进程
|
||||
/// </summary>
|
||||
class process{
|
||||
public:
|
||||
/// <summary>
|
||||
/// 创建
|
||||
/// </summary>
|
||||
/// <param name="filepath"></param>
|
||||
/// <param name="working_directory"></param>
|
||||
/// <param name="args"></param>
|
||||
/// <param name="wait_close"></param>
|
||||
/// <param name="show_window"></param>
|
||||
/// <returns>0=失败 否则为PID</returns>
|
||||
static size_t create(const std::string & filepath, const std::string & working_directory,sol::table args, bool wait_close, bool show_window);
|
||||
/// <summary>
|
||||
/// 关闭
|
||||
/// </summary>
|
||||
/// <param name="pid"></param>
|
||||
/// <returns></returns>
|
||||
static bool destory(size_t pid);
|
||||
/// <summary>
|
||||
/// 进程列表
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
static sol::table list(sol::this_state s);
|
||||
/// <summary>
|
||||
/// 是否存在
|
||||
/// </summary>
|
||||
/// <param name="filepath"></param>
|
||||
/// <returns></returns>
|
||||
static size_t exist(const std::string& filepath);
|
||||
static bool exist_pid(size_t pid);
|
||||
/// <summary>
|
||||
/// 取PID路径
|
||||
/// </summary>
|
||||
/// <param name="pid"></param>
|
||||
/// <returns></returns>
|
||||
static std::string getpath(size_t pid);
|
||||
|
||||
|
||||
static void regist(sol::state* lua);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user