十二 发表于 2011-4-9 14:26:01

本帖最后由 十二 于 2011-4-9 14:28 编辑

回复 hasai02 的帖子

LZ的启动器是用gethostname、gethostbyname、inet_ntoa实现的ip获取。

hostent结构里记录了Ip地址。看了一下gethostbyaddr的原型这个函数似乎是得到指定主机的hostent结构的函数。感觉可以用这函数得到指定ip的主机名

如果获取ip可以尝试用主机名和gethostbyname函数来得到hostent结构



还有hostent结构 char **h_addr_list ,OD下显示还有一个内网ip的指针。

hasai02 发表于 2011-4-9 14:33:51

回复 十二 的帖子

刚才试验了下gethostbyname....失败.......
它返回给我的是内网的ip.......orz.......
(我只是想要一个双击之后它能自动把外网ip给我复制到剪贴板的工具而已啊!...........orz)

黑炎龙LV8 发表于 2011-4-9 15:49:53

求源代码学习用

十二 发表于 2011-4-9 17:14:27

本帖最后由 十二 于 2011-4-10 11:58 编辑

回复 hasai02 的帖子

修改了一下IDA的hex-ray结果{
      HGLOBAL hmem;
      LPVOID firstmem;
      const WCHAR *buffer;
      struct hostent *hostent;
      struct WSAData WSAData;
      char name;
}

if ( !WSAStartup(2u, &WSAData) )
{
    if ( !gethostname(&name, 255) )
    {
      hostent = gethostbyname(&name);
      if ( hostent )
      {
      buffer = inet_ntoa(**(struct in_addr **)hostent->h_addr_list);
      }
    }
    WSACleanup();
}

if ( OpenClipboard(NULL)
{
    EmptyClipboard();
    hmem = GlobalAlloc(GMEM_FIXED,GMEM_DDESHARE, buffer);
    firstmem = GlobalLock(hmem);
    GlobalUnlock(hmem);
    SetClipboardData(1u, hmem);
    CloseClipboard();
}获取Ip的关键代码,函数参数我木有头文件所以全是16进制的- =。

紅魔の月時計 发表于 2011-4-9 18:25:35

我喜歡,遊戲一般不放桌面

漆黑之翼 发表于 2011-4-10 22:45:14

回复 十二 的帖子

十二大我有个问题,我发现通过这个打开星莲船(汉化版)的时候没BGM只有SE
试了下Winexec也不行,不知道是神马原因

十二 发表于 2011-4-11 10:35:54

回复 漆黑之翼 的帖子

尝试createprocess后用closehandle断开程序和进程的关系。

漆黑之翼 发表于 2011-4-11 16:19:44

本帖最后由 漆黑之翼 于 2011-4-11 16:30 编辑

回复 十二 的帖子

唔,closehandle没用
再看了一遍CreateProces的说明后,抱着尝试的心态把lpCurrentDirectory的参数填了上去:
CreateProcess(path,NULL,NULL,NULL,false,NULL,NULL,_T("G:\\東方\\上海アリス幻樂団\\東方星蓮船"),&si,&pi);
然后竟然可以了
看来星莲船采用了不同的方法访问外部文件?

十二 发表于 2011-4-11 17:38:48

回复 漆黑之翼 的帖子

访问文件可以用相对路径。

pa001024 发表于 2011-4-16 15:30:22

类似这种的?
http://img181.poco.cn/mypoco/myphoto/20110416/15/5623816120110416152946043.jpg
页: 1 [2] 3
查看完整版本: 东方Project启动器【第三版】