吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 527|回复: 8
收起左侧

[经验求助] 有界面的exe转为控制台怎么弄?

[复制链接]
durongze 发表于 2024-5-24 11:03
25吾爱币
有没有大佬知道如何能把一个带界面的exe转成一个控制台的exe?或者dll也行。
原理我知道,就是修改入口点,但是实际怎么操作呢?

最佳答案

查看完整内容

Winexec("D:\\notepad.exe 1.txt",WM_SHOWWINDOW);

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

xhmeng 发表于 2024-5-24 11:03
xhmeng 发表于 2024-5-24 12:44
可以另外编写一个控制台EXE,其中用Exec ShowHide方式调用要运行的EXE(文件名改为abc.dll 或者 abc.dat)

Winexec("D:\\notepad.exe 1.txt",WM_SHOWWINDOW);
xhmeng 发表于 2024-5-24 11:28
c:>abc.exe >null    批处理运行时,输出重定向到空文件
ZhaoYF 发表于 2024-5-24 12:29
楼主没说明白要这个exe实现什么功能
没有界面
功能操作怎么实现?
exe转dll
不是入口点的问题
重定位那些怎么解决
xhmeng 发表于 2024-5-24 12:44
可以另外编写一个控制台EXE,其中用Exec ShowHide方式调用要运行的EXE(文件名改为abc.dll 或者 abc.dat)
 楼主| durongze 发表于 2024-5-25 21:41
xhmeng 发表于 2024-5-24 12:49
Winexec("D:\\notepad.exe 1.txt",WM_SHOWWINDOW);

我试一下。
 楼主| durongze 发表于 2024-5-26 00:00
本帖最后由 durongze 于 2024-5-26 00:01 编辑
xhmeng 发表于 2024-5-24 12:44
可以另外编写一个控制台EXE,其中用Exec ShowHide方式调用要运行的EXE(文件名改为abc.dll 或者 abc.dat)

[C++] 纯文本查看 复制代码
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <winbase.h>
#include <iostream>
#include <string>

HANDLE StartProcess(LPCTSTR program, LPCTSTR args)
{

        HANDLE hProcess = NULL;
        PROCESS_INFORMATION processInfo;
        STARTUPINFO startupInfo;
        ::ZeroMemory(&startupInfo, sizeof(startupInfo));
        startupInfo.cb = sizeof(startupInfo);
        if (::CreateProcess(program, (LPTSTR)args,
                NULL,  // process security
                NULL,  // thread security
                FALSE, // no inheritance
                0,     // no startup flags
                NULL,  // no special environment
                NULL,  // default startup directory
                &startupInfo,
                &processInfo)) {
                hProcess = processInfo.hProcess;
                HWND pwin = ::GetDlgItem(NULL, processInfo.dwProcessId);


                RECT rect;
                GetWindowRect(pwin, &rect);
                int newX, newY, width, height;
                width = rect.right - rect.left + 1;
                height = rect.bottom - rect.top + 1;

                MoveWindow(pwin, 0, 0, width, height, true);
                UpdateWindow(pwin);
        }
        return hProcess;
}
----------------------------------------------
另外可以帮忙看下这个MoveWindow,无效果是咋回事吗?
----------------------------------------------
[C++] 纯文本查看 复制代码
int main (int argc, char** argv)
{
        HWND hwnd = GetConsoleWindow();
        RECT rect;
        GetWindowRect(hwnd, &rect);
        int newX, newY, width, height;
        width = rect.right - rect.left + 1;
        height = rect.bottom - rect.top + 1;
        newX = 300, newY = 300;
        getchar();
        MoveWindow(hwnd, newX, newY, width, height, true);
        getchar();
        return 0;
}

------------------------
不知道为啥控制台是可以移动的,CreateProcess创建的进程就无法移动。
 楼主| durongze 发表于 2024-5-26 00:03
本帖最后由 durongze 于 2024-5-26 00:05 编辑

[Asm] 纯文本查看 复制代码
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <winbase.h>
#include <iostream>
#include <string>

HANDLE StartProcess(LPCTSTR program, LPCTSTR args)
{

        HANDLE hProcess = NULL;
        PROCESS_INFORMATION processInfo;
        STARTUPINFO startupInfo;
        ::ZeroMemory(&startupInfo, sizeof(startupInfo));
        startupInfo.cb = sizeof(startupInfo);
        if (::CreateProcess(program, (LPTSTR)args,
                NULL,  // process security
                NULL,  // thread security
                FALSE, // no inheritance
                0,     // no startup flags
                NULL,  // no special environment
                NULL,  // default startup directory
                &startupInfo,
                &processInfo)) {
                hProcess = processInfo.hProcess;
                HWND pwin = ::GetDlgItem(NULL, processInfo.dwProcessId);


                RECT rect;
                GetWindowRect(pwin, &rect);
                int newX, newY, width, height;
                width = rect.right - rect.left + 1;
                height = rect.bottom - rect.top + 1;

                MoveWindow(pwin, 0, 0, width, height, true);
                UpdateWindow(pwin);
        }
        return hProcess;
}

int main (int argc, char** argv)
{
        HWND hwnd = GetConsoleWindow();

        RECT rect;

        GetWindowRect(hwnd, &rect);

        int newX, newY, width, height;

        width = rect.right - rect.left + 1;

        height = rect.bottom - rect.top + 1;

        newX = 300, newY = 300;

        getchar();

        MoveWindow(hwnd, newX, newY, width, height, true);

        getchar();
       

        return 0;
}
xhmeng 发表于 2024-5-26 19:24
https://blog.csdn.net/mailreboot/article/details/1946872

winexec(pchar('c:/test/test.bat'), SW_SHOW);

第一个参数表示DOS命令的全路径,第二个表示运行方式

SW_SHOW:显示运行,可以看得见DOS窗口
SW_HIDE:隐藏运行,看不见DOS窗口

还有SW_MAXIMIZE最小化运行,等

Python 也可以的,把输出定向到控设备

https://www.jb51.net/python/311157qgl.htm
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-14 18:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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