工具:装有Win7系统的电脑(Win7有自带.net编译工具)+ildasm(网上随便搜,单文件,120KB左右,注意.net版本)

方法:

1、把exe文件导入到ildasm工具中,在ildasm中File->dump,把exe文件转储为*.il文件存到某个指定文件夹里,得到*.il和*.res两个文件,例如a.il a.res

2、用记事本打开得到的*.il文件,找到对应的方法变量,进行修改,修改之后保存。

4、打开命令提示符,dir到*.il所在的文件夹,然后输入命令:c:\windows\microsoft.net\framework\v2.0.50727\ildasm.exe /exe /resource=a.res a.il(注意a.res和a.il两文件夹位置不可变),回车,就在对应目录下生成新的exe文件。(注意.net版本,如果是64位系统,在c:\windows\microsoft.net下有32位和64位.net,里面又有不同的.net版本)

由于回家没带源码,手头有个C#编写的exe需要按照家里的网络情况修改,仅仅涉及其中的一些变量,用这个方法不到5分钟搞定!

在命令提示符下敲入 adb shell dumpsys activity activities|find “Run #” 回车即可!

可以得到如下信息:(示例)

Run #1: ActivityRecord{53634df8 com.shenyaocn.android.barmaker/.BarMakerActivity}
Run #0: ActivityRecord{536156e8 com.android.launcher/com.android.launcher2.Launcher}

Run #0就是位于栈底的启动器,Run #1是当前位于栈顶的APP,也就是当前窗口了。

最近做一个工具,用C#写的,其中有段就是获取Activity栈的方法:

public bool pingNetworkStatus()
{
	try
	{
		Ping a = new Ping();
		PingReply re = a.Send("baidu.com");
 
		return (re.Status == IPStatus.Success);
	}
	catch (Exception e)
	{
		Console.WriteLine(e.Message);
	}
	return false;
}

以往查看网络是否有连接是打开浏览器看看能不能打开百度~~没想到用代码也是这么搞的:-)

发现在Form_Load事件中使用this.Hide();或者this.Visible = false;并不能隐藏主窗体启动。

查了一下网上的,发现在Form_Load事件中同时使用

this.Hide();
this.ShowInTaskbar = false;

就可以了实现启动时隐藏主窗体了!

不过这样有个缺点,就是用WindowHider恢复隐藏的窗体的时候,任务栏不会出现图标!
我的解决办法是在Shown事件里面隐藏窗体。
private void FormMain_Shown(object sender, EventArgs e)
{
this.Hide();
}
不过这样在启动程序的时候窗口会快速闪一下然后消失。
如果在窗口即将显示的时候把透明度设为0,隐藏后设回255不就解决了!?

好了,近乎完美的解决办法来了!
private void FormMain_Load(object sender, EventArgs e)
{
Opacity = 0;
}
private void FormMain_Shown(object sender, EventArgs e)
{
this.Hide();
Opacity = 0;
}

这样启动的时候是不会显示窗体的,使用WindowHider可以显示出来,并且任务栏上还有图标!

之所以说是近乎完美,体验一下你就知道了!

本文链接 http://www.shenyaocn.com/?p=85