鱼C论坛

 找回密码
 立即注册
查看: 2951|回复: 23

[已解决]对文件操作怎么进行,求助求助

[复制链接]
发表于 2021-11-9 21:21:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
想用代码命令来实现对文件的操作,
提取文件里面的数据,直接提取统计写入到一个文件里面,
或者直接就是连接数据库
求助求助
最佳答案
2021-11-9 23:18:47
本帖最后由 人造人 于 2021-11-9 23:28 编辑

比想象的要容易好多
模板在这了,自己照着这个改代码吧

target.c
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
    MessageBox(NULL, "hello world!", "target", MB_OK);
    return 0;
}


read_window_text.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <windows.h>

#define ID_MSGBOX_STATIC_TEXT   0x0000ffff

void read_target(void) {
    pid_t pid = fork();
    if(!pid) {
        execl("./target.exe", "./target.exe", NULL);
        exit(-1);
    }
    HWND hwnd = NULL;
    char buff[1024];
    while(!hwnd) {hwnd = FindWindow(NULL, "target"); usleep(100000);}
    GetDlgItemText(hwnd, ID_MSGBOX_STATIC_TEXT, buff, 1024);
    puts(buff);
    HWND child = FindWindowEx(hwnd, 0, "Button", NULL);
    RECT rect; GetWindowRect(child, &rect);
    SendMessage(child, WM_LBUTTONDOWN, 0, MAKELPARAM((rect.right - rect.left) / 2, (rect.bottom - rect.top) / 2));
    SendMessage(child, WM_LBUTTONUP, 0, MAKELPARAM((rect.right - rect.left) / 2, (rect.bottom - rect.top) / 2));
    int status; waitpid(pid, &status, 0);
}

int main(void) {
    size_t count = 5;
    while(count--) {read_target(); usleep(500000);}
    return 0;
}
GIF.gif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-9 21:23:53 | 显示全部楼层
举几个例子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-9 21:27:09 | 显示全部楼层

就是这边有一堆ENG雕刻文件吗,然后运行文件之后会出来一个雕刻时间,现在就是说要统计那个雕刻时间,就想着用程序来实现提取那个时间,而不是自己手动打开每个文件嘛,就大概这样子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-9 21:28:28 | 显示全部楼层
就是要用代码命令 来实现一堆文件的运行然后统计我照片里面的那个雕刻时间,友友们
微信图片_20211109212454.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-9 21:38:36 | 显示全部楼层
Gacy 发表于 2021-11-9 21:28
就是要用代码命令 来实现一堆文件的运行然后统计我照片里面的那个雕刻时间,友友们

这个时间还可以通过什么方法得到?执行某条命令?
用程序读取这个框框里面的文字,不是很好弄,如果可以,要避免这么做
如果无法避免,那就又要去翻 windows 的 api 了,就是读取这个窗口中的文字么,我感觉能做到
但是,如果可以不这么做的话,真的不想这么做,有其他方案就尽量避免选择这个方案
还有,必须用 C/C++ ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-9 21:41:55 | 显示全部楼层
人造人 发表于 2021-11-9 21:38
这个时间还可以通过什么方法得到?执行某条命令?
用程序读取这个框框里面的文字,不是很好弄,如果可以 ...

不是必须C或者C++,其他都行只要能实现,那个雕刻时间是用它那个软件来计算的,咱就是用程序读取那个数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-9 21:44:36 | 显示全部楼层
Gacy 发表于 2021-11-9 21:41
不是必须C或者C++,其他都行只要能实现,那个雕刻时间是用它那个软件来计算的,咱就是用程序读取那个数据 ...

用程序读取那个框框里面的文字?
没有别的方法得到那个时间?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-9 22:02:16 | 显示全部楼层
人造人 发表于 2021-11-9 21:44
用程序读取那个框框里面的文字?
没有别的方法得到那个时间?

那个时间是需要它自己的软件运行出来的,就是想要命令一直去重复打开运行那个操作,然后把那个时间给弄出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-9 22:08:23 | 显示全部楼层
Gacy 发表于 2021-11-9 22:02
那个时间是需要它自己的软件运行出来的,就是想要命令一直去重复打开运行那个操作,然后把那个时间给弄出 ...

这就不好弄了,貌似 lua 擅长这个?
反正用 C/C++ 不好整
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-9 22:11:17 | 显示全部楼层
人造人 发表于 2021-11-9 22:08
这就不好弄了,貌似 lua 擅长这个?
反正用 C/C++ 不好整

不用C C++也行,就是搞不懂要发哪块区域就随便发了一个
要怎么实现呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-9 22:13:54 | 显示全部楼层
Gacy 发表于 2021-11-9 22:11
不用C C++也行,就是搞不懂要发哪块区域就随便发了一个
要怎么实现呢

这个不好整
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-9 22:20:26 | 显示全部楼层
这得靠windows API去读取窗口中的文字了吧,但是不确定有没有这样的API。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-9 22:24:47 | 显示全部楼层

大佬你看能不能整一个,这个事情就比较急,会有重谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-9 22:40:06 | 显示全部楼层
Gacy 发表于 2021-11-9 22:24
大佬你看能不能整一个,这个事情就比较急,会有重谢

我昨天自己学API的时候就发现了一个函数
正好是可以用到C里面的

GetWindowText(hwnd, pszBuffer, iMaxLength);
作用:可以获得一个指定窗口的文本
参数:hwnd    窗口的句柄
         pszBuffer 一个存放将要被复制的以零结尾的字符串的指针
         iMaxLength 指定了该函数往pszBuffer参数中复制文本内容的长度

        该函数会返回被复制的字符串的原本的长度

可以通过以下函数来提前确定要复制的文本的长度
        iLength = GetWindowTextLength(hwnd);

当然可能这两个函数没什么用 这个程序也许你也得不到那个子窗口的句柄
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-9 22:49:17 | 显示全部楼层
临时用户3.14159 发表于 2021-11-9 22:40
我昨天自己学API的时候就发现了一个函数
正好是可以用到C里面的

API这咱也没学过呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-9 22:59:18 | 显示全部楼层
Gacy 发表于 2021-11-9 22:49
API这咱也没学过呀

这个我也没办法 只是昨天在书上刚好翻到了这两个函数
如果你可以获取那个你所需要的信息的窗口的句柄(这个可能是会变化的)
那么应该就有办法可以获取其中的信息了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-9 23:02:49 | 显示全部楼层
Gacy 发表于 2021-11-9 22:49
API这咱也没学过呀

不过我自己有看了一下你的要求
大概是随着时间的推移 这个雕刻的时间会跟着变化
这样的话我就觉得可以用API弄个计时器出来 然后把那个软件测出来的时间给输进去 就可以了
不过这个东西的雕刻时间应该也会随着一些奇奇怪怪的因素而改变(猜的)
所以还是实时获取那个子窗口的文本比较好吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-9 23:18:47 | 显示全部楼层    本楼为最佳答案   
本帖最后由 人造人 于 2021-11-9 23:28 编辑

比想象的要容易好多
模板在这了,自己照着这个改代码吧

target.c
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) {
    MessageBox(NULL, "hello world!", "target", MB_OK);
    return 0;
}


read_window_text.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>
#include <windows.h>

#define ID_MSGBOX_STATIC_TEXT   0x0000ffff

void read_target(void) {
    pid_t pid = fork();
    if(!pid) {
        execl("./target.exe", "./target.exe", NULL);
        exit(-1);
    }
    HWND hwnd = NULL;
    char buff[1024];
    while(!hwnd) {hwnd = FindWindow(NULL, "target"); usleep(100000);}
    GetDlgItemText(hwnd, ID_MSGBOX_STATIC_TEXT, buff, 1024);
    puts(buff);
    HWND child = FindWindowEx(hwnd, 0, "Button", NULL);
    RECT rect; GetWindowRect(child, &rect);
    SendMessage(child, WM_LBUTTONDOWN, 0, MAKELPARAM((rect.right - rect.left) / 2, (rect.bottom - rect.top) / 2));
    SendMessage(child, WM_LBUTTONUP, 0, MAKELPARAM((rect.right - rect.left) / 2, (rect.bottom - rect.top) / 2));
    int status; waitpid(pid, &status, 0);
}

int main(void) {
    size_t count = 5;
    while(count--) {read_target(); usleep(500000);}
    return 0;
}
GIF.gif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-9 23:20:35 | 显示全部楼层
本帖最后由 人造人 于 2021-11-9 23:23 编辑
hrpzcf 发表于 2021-11-9 22:20
这得靠windows API去读取窗口中的文字了吧,但是不确定有没有这样的API。


有肯定是有这样的 api,但是我不知道会这么容易就找到这样的 api
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-10 07:50:34 | 显示全部楼层
人造人 发表于 2021-11-9 23:20
有肯定是有这样的 api,但是我不知道会这么容易就找到这样的 api

大佬,请问你一般都是上哪查win API 的,这个win API
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-22 23:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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