求一款简单的关联程序

有偿求实现一个目的,只看重结果,过程不重要,再不刑的前提下,目的就是 阻止管理员 运行 游戏程序,同时运行我自己的bat。
各路神仙,各显神通,有没有哪位神仙,既不刑,也行的。需要todesk远程,能远程看流程的 来报价

游戏文件名 为 yx.exe(举例子)
bat文件名 为 laibin.bat(举例子)
当我双击yx.exe时,此时是管理员即将运行 yx.exe(举例子)
此时众神仙展现神通,阻止 管理员运行 yx.exe 同时运行laibin.bat
如果写一个程序的话,要求程序,运行以后自动后台隐藏运行,有没有神仙来报价

批处理启动

援引讯飞星火:
这个需求可以通过Windows的注册表和任务管理器来实现。首先,我们需要创建一个批处理文件(.bat),该文件会以其他用户的身份运行游戏.exe。然后,我们需要在XX.exe中注册一个消息钩子,当游戏.exe启动时,XX.exe会收到一个消息,然后阻止管理员运行游戏.exe,并以其他用户的身份运行游戏.exe。

以下是具体的步骤:

  1. 创建一个新的文本文件,将其重命名为game.bat,并将其放在与XX.exe相同的目录中。在该文件中,写入以下内容:
@echo off
start /wait "C:\path\to\your\game.exe"

请将C:\path\to\your\game.exe替换为实际的游戏.exe文件路径。

  1. 创建一个新的文本文件,将其重命名为hook.dll,并将其放在与XX.exe相同的目录中。在该文件中,写入以下内容:
#include <windows.h>
#include <iostream>

HHOOK hHook = NULL;

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam) {
    if (nCode >= 0 && wParam == WM_KEYDOWN) {
        if (GetAsyncKeyState(VK_CONTROL) & 0x8000) {
            HANDLE hProcess = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ, FALSE, GetCurrentThreadId());
            if (hProcess != NULL) {
                char path[MAX_PATH];
                GetModuleFileName(NULL, path, sizeof(path));
                std::string strCmdLine = path;
                strCmdLine += " --user \"";
                strCmdLine += getenv("USERNAME");
                strCmdLine += "\"";
                STARTUPINFO si;
                PROCESS_INFORMATION pi;
                ZeroMemory(&si, sizeof(si));
                si.cb = sizeof(si);
                ZeroMemory(&pi, sizeof(pi));
                if (!CreateProcess(NULL, &strCmdLine[0], NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) {
                    std::cout << "CreateProcess failed (" << GetLastError() << ").\n";
                }
                CloseHandle(hProcess);
            }
        }
    }
    return CallNextHookEx(hHook, nCode, wParam, lParam);
}

int main() {
    hHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, NULL, 0);
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    UnhookWindowsHookEx(hHook);
    return 0;
}
  1. 使用Visual Studio或其他C++编译器编译hook.dll。

  2. 将XX.exe设置为以管理员身份运行。

  3. 双击game.bat文件,以其他用户的身份运行游戏.exe。此时,当你尝试以管理员身份运行游戏.exe时,XX.exe会收到一个消息,并阻止你运行游戏.exe,而是以其他用户的身份运行游戏.exe。

【以下回答由 GPT 生成】

问题解答

对于问题中的需求,以下是一种可能的解决方案:

  1. 首先,创建一个名为"游戏.exe"的可执行文件。这个文件可以是任何可执行文件,只需确保它与你想要关联的"XX.exe"程序有一定的关联。

  2. 创建一个名为"XX.exe"的程序。通过使用编程语言(如Python、C#等),可以在后台运行程序,并与"游戏.exe"建立关联。以下是使用Python标准库来实现的示例代码:

import os
import subprocess

def run_game_as_guest():
    # 使用 os.system 或 subprocess 模块来启动"游戏.exe"并将其作为来宾用户运行
    os.system("runas /user:Guest 游戏.exe")  # 这是一个示例命令,具体的命令需要根据你的系统和路径进行设置

def main():
    # 在这里编写代码,设置"XX.exe"程序在后台运行,并将"游戏.exe"与之关联
    run_game_as_guest()

if __name__ == "__main__":
    main()
  1. 这样,当双击运行"XX.exe"时,它将后台运行,并自动以来宾用户身份运行"游戏.exe"。

  2. 要阻止以管理员身份双击运行"游戏.exe",我们可以在"XX.exe"中检测当前用户的身份,并在管理员身份下停止"游戏.exe"。以下是一个基于Python的示例代码:

import os
import ctypes
import sys

def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False

def run_game_as_guest():
    if is_admin():
        # 使用以下命令来阻止管理员运行"游戏.exe"
        os.system("taskkill /F /IM 游戏.exe")  # 这是一个示例命令,具体的命令需要根据你的系统和路径进行设置
    else:
        # 在这里编写代码,设置"XX.exe"程序在后台运行,并将"游戏.exe"与之关联
        pass

def main():
    # 在这里编写代码,设置"XX.exe"程序在后台运行,并将"游戏.exe"与之关联
    run_game_as_guest()

if __name__ == "__main__":
    main()

请注意,以上示例代码只是给出了一个实现关联程序的基本思路,并提供了相应的示例代码。具体的实现细节可以根据你的具体需求进行调整和优化。同时,由于程序之间的关联和运行方式可能因操作系统和环境而异,可能需要进一步的测试和调试以确保其正常工作。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

是要做成应用还是小程序呢

您好!根据您的需求,我们可以为您提供一款软件,名为XX.exe。该软件可以在后台运行,不会有任何界面或提示。同时,我们还可以设置XX.exe以其他用户身份运行游戏.exe,阻止管理员运行游戏.exe,并将游戏.exe以来宾身份运行。这样,表面上看起来与正常启动游戏.exe一模一样,但实际上在任务管理器中,游戏.exe的身份已经变成了来宾用户,比如Guest。如果您对此感兴趣,请提供您的用户名和密码,我们将为您进一步操作。谢谢!

引用 皆我百晓生 小程序回复内容作答:

可以为您提供以下解决方案:

  1. 使用C#编写一个控制台程序,命名为XX.exe。在程序中使用Process.Start方法启动游戏.exe,并将其隐藏运行,以实现后台运行。

  2. 使用C#编写一个WinForm程序,命名为游戏.exe。在程序中通过检测当前用户身份,如果为管理员身份,则通过Process.Start方法运行bat文件或以其他用户身份运行游戏.exe。

  3. 将游戏.exe与XX.exe放在同一个文件夹中,并创建一个bat文件,命名为游戏.bat。在bat文件中使用runas命令以其他用户身份运行XX.exe。

当管理员身份双击运行游戏.exe时,游戏.exe会调用XX.exe来阻止管理员运行游戏.exe,并以其他用户身份运行游戏.exe。

为了更详细地了解您的需求并提供更精确的解决方案,建议进一步沟通。

钩子,嘿嘿嘿。。。
CreateWindowsHookEx
只要有钩子什么都可以做到

提供参考实例:https://www.cnblogs.com/shelley/p/1506573.html

创建一个批处理脚本(比如run_game.bat),该脚本用于启动游戏.exe,并使用其他用户的凭据。


runas /user:Guest "path\to\游戏.exe"

请将 "path\to\游戏.exe" 替换为游戏.exe 的实际路径。

这个可刑啊直接hook它的dll就行

参考gpt:
结合自己分析给你如下建议:
Windows 10 下以其他用户身份运行程序 - Wikix - 博客园 这篇博客介绍了如何使用组策略和 runas 命令来实现以其他用户身份运行程序的功能。
以管理员帐户身份启动应用程序 - Windows Server | Microsoft Learn 这篇文章介绍了如何使用右键菜单和 Windows 安全中心来以管理员帐户身份启动应用程序。
启用和使用运行方式功能 - Windows Server | Microsoft Learn 这篇文章介绍了如何使用运行方式功能来以另一用户身份启动程序,并提供了详细的步骤和示例。
win10里面怎么以其他身份运行 - 百度知道 这个问题的回答提供了一个简单的方法来在 win10 中启用“以其他用户身份运行”的选项。
shell脚本中使用其他用户执行脚本 - Bigben - 博客园 这篇博客介绍了如何使用 sudo 命令来在 shell 脚本中以其他用户执行脚本。

结合GPT给出回答如下请题主参考
你可以使用 Windows 的关联功能来实现在双击 XX.exe 文件时自动使用其他用户身份运行。具体步骤如下:

  1. 右键点击 XX.exe 文件,在上下文菜单中选择“属性”选项。

  2. 在“属性”窗口中选择“详细信息”选项卡。

  3. 在“详细信息”选项卡中,找到“文件属性”部分的“文件版本”项,点击“公司名”旁边的“修改”按钮。

  4. 在弹出的“修改字符串”窗口中,输入“runas”(不包括引号),点击“确定”按钮。

  5. 关闭“属性”窗口。

在完成以上步骤后,双击 XX.exe 文件时,会弹出询问是否使用其他用户身份运行的窗口,输入用户名和密码后即可以指定用户身份运行 XX.exe 文件。

同时,也可以编写一个简单的批处理文件来实现启动游戏.exe 文件和 XX.exe 文件的关联。具体步骤如下:

  1. 新建一个文本文件,将以下内容复制到文本文件中:
@echo off
start /d "游戏.exe 文件所在的目录" 游戏.exe
runas /user:"其他用户名" "XX.exe 文件的完整路径"
  1. 将文本文件保存为“启动.bat”(不包括引号)。

  2. 双击“启动.bat”文件即可启动游戏.exe 文件并以其他用户身份运行 XX.exe 文件。

以上就是一款简单的关联程序的实现方法,希望对你有所帮助。

详解5个C语言简单易懂小游戏
可以参考下

详解5个C语言简单易懂小游戏_c语言能做的简单小游戏_卡拉肖克·小黑的博客-CSDN博客 我们通过5个简单易懂的小游戏来加强我们对C语言的认识,这五个小游戏不仅有单人,还有人机对战和人人对战。让我们在学习之余来上一局紧张刺激的小游戏吧!我们的五个小游戏已经全部做完。下面是做小游戏要注意的点:scanf函数是不安全,我们可以寻找一个安全的函数进行替代,或者解决scanf的安全问题谨防数组越界,我们好几个小游戏都用了数组进行存储,有字符型数组,还有整形数组,要谨防数组越界,注意数组传参。把经常使用的代码构造为函数,减少代码冗余。_c语言能做的简单小游戏 https://blog.csdn.net/2301_76986069/article/details/130986103

引用gpt作答:

  1. 打开XX.exe并在后台运行:您可以使用C语言编写一个程序,通过调用系统函数或使用第三方库来打开XX.exe,并将其设置为后台运行,不显示界面或任何提示。您可以使用CreateProcess函数或其他类似的函数来实现这个功能。

  2. 阻止管理员运行游戏.exe并以其他用户身份运行:您可以编写一个批处理文件(.bat),在其中使用runas命令以其他用户身份运行游戏.exe。然后,您可以在管理员身份下双击运行游戏.exe时,通过调用批处理文件来实现以其他用户身份运行游戏.exe的功能。

请注意,为了实现这些功能,您需要具备一定的编程和系统操作知识。如果您对C语言和批处理文件不熟悉,可能需要参考相关的文档和教程来学习和理解这些知识。

引用gpt
根据您的需求,您可以尝试使用以下步骤来实现:

  1. 创建一个批处理脚本(例如run_game.bat),内容如下:
    batch
    @echo off
    REM 启动XX.exe并以后台模式运行
    start /B XX.exe
    REM 检查当前用户是否为管理员
    NET SESSION >nul 2>&1
    if %errorLevel% == 0 (
    REM 当前用户为管理员,阻止管理员运行游戏.exe,以其他用户身份运行游戏.exe
    runas /user:其他用户的用户名 /savecred "游戏.exe"
    ) else (
    REM 当前用户非管理员,以来宾用户身份运行游戏.exe
    runas /user:来宾用户名 /savecred "游戏.exe"
    )
    将上述代码中的"其他用户的用户名"替换为您要以其身份运行游戏.exe的用户名,将"来宾用户名"替换为您的来宾用户的用户名,将"游戏.exe"替换为您的游戏程序的名称。
  2. 将游戏.exe和XX.exe放在同一个目录下。
  3. 双击运行run_game.bat脚本,它将以后台模式启动XX.exe,并根据当前用户的身份以相应的方式运行游戏.exe。
    请注意,使用该方法需要谨慎,确保密码信息的安全性。此外,确保XX.exe能够在后台模式下运行,并且游戏.exe在以其他用户身份运行时不会受到任何限制或问题。

题主,这个问题我来替你解决(参考结合AI智能、文心一言),若有帮助,还望采纳,点击回答右侧采纳即可。


实现思路:

  1. 使用C#编写一个控制台程序,命名为 XX.exe,将其设为后台运行,不显示任何提示信息。

  2. 使用C#编写另一个控制台程序,命名为游戏.exe,并将其关联到XX.exe,即在游戏.exe的代码中调用XX.exe,使其后台运行。

  3. 在游戏.exe中添加管理员权限检测,当检测到当前用户有管理员权限时,向XX.exe发送指令,让其阻止游戏.exe的运行,并以其他用户身份运行游戏.exe。

  4. 使用C#编写一个bat文件,在其中以指定用户的身份启动游戏.exe。

代码实现:

XX.exe:

class Program
{
    [DllImport("kernel32.dll")]
    static extern IntPtr GetConsoleWindow();

    [DllImport("user32.dll")]
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

    static void Main(string[] args)
    {
        // 隐藏控制台窗口
        IntPtr hwnd = GetConsoleWindow();
        ShowWindow(hwnd, 0);
        
        // 关联游戏.exe
        Process.Start("游戏.exe");
    }
}

游戏.exe:

class Program
{
    [DllImport("advapi32.dll", SetLastError = true)]
    static extern bool CheckTokenMembership(IntPtr TokenHandle, IntPtr SidToCheck, out bool IsMember);

    static void Main(string[] args)
    {
        // 检测管理员权限
        WindowsIdentity identity = WindowsIdentity.GetCurrent();
        WindowsPrincipal principal = new WindowsPrincipal(identity);
        bool isAdmin = principal.IsInRole(WindowsBuiltInRole.Administrator);

        if (isAdmin)
        {
            // 向XX.exe发送指令,阻止游戏.exe运行,并以其他用户身份运行
            Process[] processes = Process.GetProcessesByName("XX");
            foreach (Process process in processes)
            {
                IntPtr handle = OpenProcess(PROCESS_ALL_ACCESS, false, process.Id);
                if (handle != IntPtr.Zero)
                {
                    byte[] bytes = Encoding.Default.GetBytes("block");
                    int length = bytes.Length + 1;
                    IntPtr address = VirtualAllocEx(handle, IntPtr.Zero, length, MEM_COMMIT, PAGE_READWRITE);
                    if (address != IntPtr.Zero)
                    {
                        bool success = WriteProcessMemory(handle, address, bytes, length, 0);
                        if (success)
                        {
                            IntPtr kernel32 = LoadLibrary("kernel32.dll");
                            IntPtr loadUserLibrary = GetProcAddress(kernel32, "LoadUserLibrary");
                            IntPtr threadId = IntPtr.Zero;
                            if (loadUserLibrary != IntPtr.Zero)
                            {
                                CreateRemoteThread(handle, IntPtr.Zero, 0, loadUserLibrary, address, 0, out threadId);
                            }
                        }
                    }
                }
            }
        }
        else
        {
            // 以普通用户身份启动游戏.exe
            string user = "Guest";
            string password = "password";
            string domain = ".";
            ProcessStartInfo info = new ProcessStartInfo("cmd.exe", $"/C runas /user:{user}@{domain} \"start 游戏.exe\"")
            {
                UseShellExecute = false,
                RedirectStandardOutput = true,
                RedirectStandardError = true,
                CreateNoWindow = true,
                UserName = user,
                Password = SecurePassword(password)
            };
            Process process = new Process
            {
                StartInfo = info
            };
            process.Start();
        }
    }

    // 字符串加密密码
    static SecureString SecurePassword(string password)
    {
        SecureString securePassword = new SecureString();
        foreach (char c in password)
        {
            securePassword.AppendChar(c);
        }
        return securePassword;
    }
}

运行bat文件以其他用户身份启动游戏.exe:

runas /user:Guest "游戏.exe"

作为IT专家,我建议您使用Python来编写一个简单的关联程序。Python是一种易于学习且功能强大的编程语言,它具有丰富的库和工具,可以帮助您实现所需的功能。

以下是一个简单的Python脚本,可以实现您所需的功能:

python
import os  
import subprocess  
  
# 设置要启动的游戏程序路径  
game_exe = "游戏.exe"  
  
# 检查是否以管理员权限运行脚本  
if os.geteuid() == 0:  
    print("脚本正在以管理员权限运行")  
  
# 启动游戏程序  
subprocess.Popen(game_exe)

您可以将上述代码保存为.py文件,然后通过Python解释器来运行它。该脚本将启动您指定的游戏程序。

请注意,此脚本仅启动游戏程序,而不进行任何权限更改或模拟其他用户身份的操作。如果您需要实现更复杂的功能,例如更改用户权限或模拟其他用户身份,可能需要使用更高级的技术或工具。

我看刑……… 不敢写。可以通过程序调用实现或者bat脚本

参考gpt
根据您的需求,我可以为您提供以下解决方案。请注意,这个方案是基于C语言编写的,可以通过隐藏窗口的方式在后台运行,并且可以阻止管理员运行游戏程序并同时运行您的bat文件。

#include <windows.h>

BOOL IsUserAdmin() {
    BOOL bIsAdmin = FALSE;
    SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
    PSID AdministratorsGroup;

    if (AllocateAndInitializeSid(&NtAuthority, 2,
        SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
        0, 0, 0, 0, 0, 0, &AdministratorsGroup)) {
        if (!CheckTokenMembership(NULL, AdministratorsGroup, &bIsAdmin)) {
            bIsAdmin = FALSE;
        }

        FreeSid(AdministratorsGroup);
    }

    return bIsAdmin;
}

int main() {
    if (IsUserAdmin()) {
        // 阻止管理员运行游戏程序
        MessageBox(NULL, "您无权运行游戏程序!", "错误", MB_ICONERROR);
    } else {
        // 运行您的bat文件
        system("start /min laibin.bat");
    }

    return 0;
}

需要详细实现则私信,这是我的思路
首先,你可以使用C语言编写一个程序,通过检测当前用户是否为管理员来判断是否允许运行游戏程序。你可以使用Windows API函数CheckTokenMembership来检查当前用户是否为管理员。如果不是管理员,你可以选择直接退出程序或者运行你自己的bat文件。
然后,你可以使用C语言编写一个程序,通过调用Windows API函数ShowWindow来将程序窗口隐藏。这样程序就可以在后台运行,不会显示在任务栏或桌面上。
最后,你可以将这个C语言程序编译成可执行文件,并将其与游戏程序和bat文件放在同一个目录下。当用户双击运行游戏程序时,你的程序会自动运行,检测用户权限并执行相应的操作。