找回密码
 立即注册
搜索
查看: 7854|回复: 20

[PC] 不能发贴简单回贴用

[复制链接]
发表于 2017-7-13 16:58 | 显示全部楼层 |阅读模式
本帖最后由 eggplant 于 2025-8-7 18:13 编辑

有没有能一键恢复关机之前打开的程序的软件

简单粗糙的研究了一下,最开始以为应该用Win32 API什么的,但是 EnumWindows 枚举出来的窗口并不是用户任务栏级别的。

所以搜了一下,找到一个C#的,本来找到个C++,因为用的老电脑Win7,不行,这个C#的可以,所以想想Win7能过,高版本Windows应该也不是问题。

参考地址

https://ourcodeworld.com/article ... -csharp-in-winforms


例子C#命令行下就能编译通过,然后你需要自己再显示个程序路径

  1. Console.WriteLine("    PATH : {0}", process.MainModule.FileName);
复制代码


然后这个程序会列出自己,也就是程序本身的名字,自己写点代码排除一下就行,或者简单点,忽略最后一个结果就行。

因为例子非常简单,就几行代码,所以你可以拿Winform或者什么的再批量处理一下,加个按钮和点击启动什么的。批量全启动可能并不是个好主意,你想干也不是不行。


贴个Winform代码,默认新建Winform,编译时需要指定为x64,因为默认可能x86,32位读不了64位。Win7,VS2017下通过。

新建两个Button控件,button1保存,button2重启

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;

  10. using System.IO;
  11. using System.Diagnostics;

  12. namespace RestartAppPath
  13. {
  14.     public partial class Form1 : Form
  15.     {
  16.         public string saveFileName = "appList.txt";
  17.         public void WritePath()
  18.         {
  19.             Process[] processlist = Process.GetProcesses();

  20.             List<string> paths = new List<string>();
  21.             List<string> passList = new List<string>();

  22.             //忽略Visual Studio编辑器,如果你用其他编辑器,比如VS Code自己测试加入
  23.             passList.Add("devenv");
  24.             //忽略VS命令行Debug测试运行窗口
  25.             passList.Add("VsDebugConsole");
  26.             //忽略程序自己
  27.             passList.Add(Process.GetCurrentProcess().ProcessName);


  28.             for (int i = 0; i < processlist.Length; i++)
  29.             {
  30.                 if (!String.IsNullOrEmpty(processlist[i].MainWindowTitle))
  31.                 {
  32.                     bool bShouldAdd = true;
  33.                     for (int j = 0; j < passList.Count; j++)
  34.                     {
  35.                         //过滤忽略列表字符串
  36.                         if (passList[j] == processlist[i].ProcessName)
  37.                         {
  38.                             bShouldAdd = false;
  39.                             break;
  40.                         }
  41.                     }

  42.                     if (bShouldAdd)
  43.                     {
  44.                         paths.Add(processlist[i].MainModule.FileName);
  45.                     }



  46.                 }
  47.             }

  48.             FileStream out_fs = File.Open(saveFileName, FileMode.Create);
  49.             StreamWriter sw = new StreamWriter(out_fs);

  50.             for (int i = 0; i < paths.Count; i++)
  51.             {
  52.                 sw.WriteLine(paths[i]);
  53.             }

  54.             sw.Flush();
  55.             sw.Close();
  56.             out_fs.Close();
  57.         }
  58.         public void StartPath()
  59.         {
  60.             if(File.Exists(saveFileName))
  61.             {
  62.                 string[] lines = File.ReadAllLines(saveFileName);
  63.                 for (int i = 0; i < lines.Length; i++)
  64.                 {
  65.                     Process.Start(lines[i]);
  66.                 }
  67.             }
  68.         }

  69.         public Form1()
  70.         {
  71.             InitializeComponent();
  72.         }

  73.         private void button1_Click(object sender, EventArgs e)
  74.         {
  75.             WritePath();
  76.         }

  77.         private void button2_Click(object sender, EventArgs e)
  78.         {
  79.             StartPath();
  80.         }
  81.     }
  82. }
复制代码

原理
1.保存当前所有程序路径到appList.txt文件,每行1个路径
2.读取每行文本,批量启动

有被扫描进去的,但是又不想重启的路径,自己删除文本文件中那一行就行,比如音乐播放器之类的。









回复

使用道具 举报

     
发表于 2020-3-5 11:36 | 显示全部楼层
我帮补充一下
个人很喜欢matt make games,横版开发经验十年有余的老将
Celeste角色部分源码:
https://github.com/NoelFB/Celeste
实现方式真的粗暴

TowerFall Physics 塔倒的物理系统文章
https://mattmakesgames.tumblr.co ... 1/towerfall-physics
回复

使用道具 举报

发表于 2020-3-5 12:10 | 显示全部楼层
看码就太辛苦了,虽然可以试试,但是至少还是想要地图编辑器,比如能配合tiled使用的,反正也看过一下SDL的,就显示个hello也有一大堆,最后也要close些什么,觉得暂时还是
回复

使用道具 举报

     
发表于 2020-3-5 14:27 | 显示全部楼层
mark一下
回复

使用道具 举报

     
发表于 2020-3-5 14:55 | 显示全部楼层
光看这个
C#似乎是最适合独立游戏作者自编的语言?
回复

使用道具 举报

发表于 2020-3-5 14:58 | 显示全部楼层
不如说说怎么编译?要说为什么难这也是个问题。
回复

使用道具 举报

     
发表于 2020-3-5 15:20 | 显示全部楼层
woodcoin 发表于 2020-3-5 14:55
光看这个
C#似乎是最适合独立游戏作者自编的语言?

门槛低,语法糖多,Windows开发环境配置方便
不过主要还是得益于XNA和Unity在独立开发者社群中的影响吧
回复

使用道具 举报

     
发表于 2020-3-5 15:23 | 显示全部楼层
mes 发表于 2020-3-5 14:58
不如说说怎么编译?要说为什么难这也是个问题。

第一个项目:
Compiling
You will need a compiler supporting C++11. So far, only mingw-w64-g++ 4.8 on Windows has been used, although the code is very portable. You will also need the following libraries:

SDL2
SDL2_mixer
opengl
DevIL
boost
rapidxml

如果那个工程支持独立编译运行,如何编译作者都会写在ReadMe里的呀
回复

使用道具 举报

     
发表于 2020-3-5 15:40 来自手机 | 显示全部楼层
马克一下。
回复

使用道具 举报

     
发表于 2020-3-5 15:42 来自手机 | 显示全部楼层


—— 来自 OnePlus GM1910, Android 10上的 S1Next-鹅版 v2.2.0.1
回复

使用道具 举报

发表于 2020-3-5 15:43 | 显示全部楼层
w30of 发表于 2020-3-5 15:23
第一个项目:
Compiling
You will need a compiler supporting C++11. So far, only mingw-w64-g++ 4.8 o ...

这些libraries就是个谜,怎么包括的,路径之类,还要改电脑属性之类,如果mingw还好,好像还能网上自动安装,还有如果自己写那就没项目文件了,又怎么编译?
回复

使用道具 举报

发表于 2020-3-5 15:48 来自手机 | 显示全部楼层
说到马里奥…我记得PC上有一个只有几关的马里奥…具体几关忘记了…但是全打完会自动回到第一关重新开始…印象里是Pascal写的(存疑)…这个不知道有源码么

—— 来自 OnePlus ONEPLUS A6010, Android 10上的 S1Next-鹅版 v2.2.0.1
回复

使用道具 举报

     
发表于 2020-3-5 16:26 | 显示全部楼层
mes 发表于 2020-3-5 15:43
这些libraries就是个谜,怎么包括的,路径之类,还要改电脑属性之类,如果mingw还好,好像还能网上自动安 ...

他用这个mingw我接触的不是很多
不过我用过这些库,boost、rapidxml啥的下载下来的都是一些.hpp .cpp啥的
下载下来再放在mingw的那个库路径里就行了

搜一下相关答案很多
https://stackoverflow.com/questi ... -lib-paths-to-mingw

自己写没项目文件啥意思?
回复

使用道具 举报

发表于 2020-3-5 17:06 | 显示全部楼层
w30of 发表于 2020-3-5 16:26
他用这个mingw我接触的不是很多
不过我用过这些库,boost、rapidxml啥的下载下来的都是一些.hpp .cpp啥的 ...

如果自己写一堆.c文件。
回复

使用道具 举报

发表于 2020-3-5 18:05 | 显示全部楼层
只要是想做游戏而不是做引擎,物理、渲染、资源管理这些底层轮子都别碰了。从GL、SDL、XNA开始写看起来是要酷一些,但都是历史的烟尘。现在的独立作者没有不从通用引擎开始的理由。
回复

使用道具 举报

     
发表于 2020-3-5 18:18 | 显示全部楼层
mes 发表于 2020-3-5 17:06
如果自己写一堆.c文件。

c文件的话 我所知是用cmake 配置好可以直接生成.exe
网上随便找个教程
https://zhuanlan.zhihu.com/p/74070812
再配合官方文档
https://cmake.org/cmake/help/latest/guide/tutorial/index.html

呃……你确定要折腾这玩意?
如果从这步开始折腾的话,你之后还会碰一鼻子灰
并且与最开始的意愿已经大相径庭了,现在也很少从这开始开发的

我建议还是只看代码学习一下

感觉有点偏离主题,要不要删一下贴?
回复

使用道具 举报

发表于 2020-3-5 18:35 | 显示全部楼层
w30of 发表于 2020-3-5 18:18
c文件的话 我所知是用cmake 配置好可以直接生成.exe
网上随便找个教程
https://zhuanlan.zhihu.com/p/7407 ...

我已经碰过了,反正也只是碰碰,其他有心人可以再努力点,我个人还是推荐经典2D游戏用Sdl这些比较高效的。
回复

使用道具 举报

发表于 2020-3-6 22:48 | 显示全部楼层

问个纯属技术上感兴趣,因为现在肯定没人想写,3D碰撞的问题。某3D塞尔达似乎是只有向上永远对齐Y轴的圆柱和可以不对齐任何轴的三角形和四角形(也许可以看成两个三角形),那么怎么算它们有没有碰撞?
github.com/n64decomp/sm64/blob/master/src/engine/surface_collision.c
听说和mario 64比较像,不过看不懂。
回复

使用道具 举报

     
发表于 2020-8-12 06:30 | 显示全部楼层
感谢楼主,很有帮助的解答!
回复

使用道具 举报

     
发表于 2023-5-10 16:46 | 显示全部楼层
感谢楼主(突然想起自己三年前发了个DRPG的贴,最后虽然没做成,但改成了一个卡牌桌游,和朋友线下玩的还比较乐呵
回复

使用道具 举报

发表于 2023-8-9 18:24 | 显示全部楼层
感谢讲解,让我对该看哪些内容有了大致的了解。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2025-8-29 21:51 , Processed in 0.081268 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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