百度云盘封杀第三方油猴脚本

之前有留过一篇文档,象征意义的提到过使用油猴脚本+IDM可以不用买百度云盘的VIP实现满速下载,昨天发现脚本失效了,就习惯性的点了一下更新脚本,但是也没有新的脚本出现,说明百度云盘又在搞小动作鸟。于是乎就换了油猴的百度云盘Ex的脚本,又可以继续“犯贱”了。今晚,又看见一个更犯贱的东西,在我的网络下跑起来比IDM还快。具体的安装跟使用可以在软件的Github主页上对应的操作就可以了。

https://github.com/monkeyWie/proxyee-down

在知乎上看到有人评论这个软件,说装一个那么高权限的CA证书等于把电脑完全暴露给外界,无数的担忧接踵而至。我就觉得很可笑,为啥可笑?软件的源代码在那,担忧出问题就下载下来自己看看没问题就自己编译一个,它还会自动写代码自动编译去破坏你的电脑不成?不懂装懂真的很可怕

More...

DevExpressNet AccordionControl添加组、子菜单

今天下载了一个软件自动安装工具,随手琢磨了一下,配置文件要自己手写INI,晕,谁会这么有耐心去一个一个折腾,尤其是我这种懒人。正好玩了会DevExpressNet,就打算自己动手弄一个吧,这些不够“聪明”的软件用着始终不舒服。在工具箱里拖了一个AccordionControl控件,感觉好像还挺好使,不过第一次用这个控件,还不知道语法怎么写呢,就Google一下,谁知道官网上帮助手册写的够简单的,就想了想昨天下载DevExpressNet的时候好像有下载过一个CHM的帮助文档,就打开来搜了一下,找出下面一段Demo,代码很容易理解。我就不解释了。

using DevExpress.XtraBars.Navigation;
using DevExpress.XtraEditors;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace AccordionControl_ex {
    public partial class Form1 : Form {
        public Form1() {
            InitializeComponent();
        }
 
        AccordionControl acControl;
 
        private void Form1_Load(object sender, EventArgs e) {
            acControl = new AccordionControl();
            acControl.Dock = DockStyle.Left;
            acControl.Parent = this;
            acControl.Width = 200;
            InitAccordionControl();
        }
 
        //acControl是控件ID,默认是accordionControl1
        private void InitAccordionControl() {
            acControl.BeginUpdate();
            AccordionControlElement acRootGroupHome = new AccordionControlElement();
            AccordionControlElement acItemActivity = new AccordionControlElement();
            AccordionControlElement acItemNews = new AccordionControlElement();
            AccordionControlElement acRootItemSettings = new AccordionControlElement();
 
            acControl.ElementClick += new ElementClickEventHandler(this.accordionControl1_ElementClick);
 
            // 
            // Root Group 'Home'
            // 
            acRootGroupHome.Elements.AddRange(new AccordionControlElement[] {
            acItemActivity,
            acItemNews});
            acRootGroupHome.Expanded = true;
            acRootGroupHome.ImageOptions.ImageUri.Uri = "Home;Office2013";
            acRootGroupHome.Name = "acRootGroupHome";
            acRootGroupHome.Text = "Home";
            // 
            // Child Item 'Activity'
            // 
            acItemActivity.Name = "acItemActivity";
            acItemActivity.Style = ElementStyle.Item;
            acItemActivity.Tag = "idActivity";
            acItemActivity.Text = "Activity";
            // 
            // Child Item 'News'
            // 
            acItemNews.Name = "acItemNews";
            acItemNews.Style = ElementStyle.Item;
            acItemNews.Tag = "idNews";
            acItemNews.Text = "News";
            // 
            // Root Item 'Settings' with ContentContainer
            // 
            acRootItemSettings.ImageOptions.ImageUri.Uri = "Customization;Office2013";
            acRootItemSettings.Name = "acRootItemSettings";
            acRootItemSettings.Style = ElementStyle.Item;
            acRootItemSettings.Text = "Settings";
            // 
            // itemSettingsControlContainer
            // 
            AccordionContentContainer itemSettingsControlContainer = new AccordionContentContainer();
            HyperlinkLabelControl hyperlinkLabelControl1 = new HyperlinkLabelControl();
            ToggleSwitch toggleSwitch1 = new ToggleSwitch();
            acControl.Controls.Add(itemSettingsControlContainer);
            acRootItemSettings.ContentContainer = itemSettingsControlContainer;
            itemSettingsControlContainer.Controls.Add(hyperlinkLabelControl1);
            itemSettingsControlContainer.Controls.Add(toggleSwitch1);
            itemSettingsControlContainer.Appearance.BackColor = System.Drawing.SystemColors.Control;
            itemSettingsControlContainer.Appearance.Options.UseBackColor = true;
            itemSettingsControlContainer.Height = 60;
            // 
            // hyperlinkLabelControl1
            // 
            hyperlinkLabelControl1.Location = new System.Drawing.Point(26, 33);
            hyperlinkLabelControl1.Size = new System.Drawing.Size(107, 13);
            hyperlinkLabelControl1.Text = "www.devexpress.com";
            hyperlinkLabelControl1.HyperlinkClick += new DevExpress.Utils.HyperlinkClickEventHandler(this.hyperlinkLabelControl1_HyperlinkClick);
            // 
            // toggleSwitch1
            // 
            toggleSwitch1.EditValue = true;
            toggleSwitch1.Location = new System.Drawing.Point(24, 3);
            toggleSwitch1.Properties.AllowFocused = false;
            toggleSwitch1.Properties.AutoWidth = true;
            toggleSwitch1.Properties.OffText = "Offline Mode";
            toggleSwitch1.Properties.OnText = "Onlne Mode";
            toggleSwitch1.Size = new System.Drawing.Size(134, 24);
            toggleSwitch1.Toggled += new System.EventHandler(this.toggleSwitch1_Toggled);
 
            acControl.Elements.AddRange(new DevExpress.XtraBars.Navigation.AccordionControlElement[] {
                acRootGroupHome,
                acRootItemSettings});
 
            acRootItemSettings.Expanded = true;
 
            acControl.EndUpdate();
        }
 
        private void accordionControl1_ElementClick(object sender, DevExpress.XtraBars.Navigation.ElementClickEventArgs e) {
            if (e.Element.Style == DevExpress.XtraBars.Navigation.ElementStyle.Group) return;
            if (e.Element.Tag == null) return;
            string itemID = e.Element.Tag.ToString();
            if (itemID == "idNews") {
                //...
            }
            listBoxControl1.Items.Add(itemID + " clicked");
        }
 
        private void toggleSwitch1_Toggled(object sender, EventArgs e) {
            //...
        }
 
        private void hyperlinkLabelControl1_HyperlinkClick(object sender, DevExpress.Utils.HyperlinkClickEventArgs e) {
            Process.Start(e.Text);
        }
 
 
 
    }
}
More...

C#文件文件夹拖拽功能的实现

在界面中添加一个TextBox控件,或其他支持拖拽属性的控件。

属性:

事件:

private void Form_DragEnter(object sender, DragEventArgs e)
{
    dragEnter(e);
}
 
private void Form_DragDrop(object sender, DragEventArgs e)
{
    TextBox textBox = sender as TextBox;
    textBox.Text = dragDrop(e);
}
 
/// <summary>
/// 文件拖进事件处理:
/// </summary>
public void dragEnter(DragEventArgs e)
{
    if (e.Data.GetDataPresent(DataFormats.FileDrop))    //判断拖来的是否是文件
        e.Effect = DragDropEffects.Link;                //是则将拖动源中的数据连接到控件
    else e.Effect = DragDropEffects.None;
}
 
/// <summary>
/// 文件放下事件处理:
/// 放下, 另外需设置对应控件的 AllowDrop = true; 
/// 获取的文件名形如 "d:\1.txt;d:\2.txt"
/// </summary>
public string dragDrop(DragEventArgs e)
{
    StringBuilder filesName = new StringBuilder("");
    Array file = (System.Array)e.Data.GetData(DataFormats.FileDrop);//将拖来的数据转化为数组存储
 
    foreach (object I in file)
    {
        string str = I.ToString();
 
        System.IO.FileInfo info = new System.IO.FileInfo(str);
        //若为目录,则获取目录下所有子文件名
        if ((info.Attributes & System.IO.FileAttributes.Directory) != 0)
        {
            str = getAllFiles(str);
            if (!str.Equals("")) filesName.Append((filesName.Length == 0 ? "" : ";") + str);
        }
        //若为文件,则获取文件名
        else if (System.IO.File.Exists(str))
            filesName.Append((filesName.Length == 0 ? "" : ";") + str);
    }
 
    return filesName.ToString();
}
 
/// <summary>
/// 判断path是否为目录
/// </summary>
public bool IsDirectory(String path)
{
    System.IO.FileInfo info = new System.IO.FileInfo(path);
    return (info.Attributes & System.IO.FileAttributes.Directory) != 0;
}
 
/// <summary>
/// 获取目录path下所有子文件名
/// </summary>
public string getAllFiles(String path)
{
    StringBuilder str = new StringBuilder("");
    if (System.IO.Directory.Exists(path))
    {
        //所有子文件名
        string[] files = System.IO.Directory.GetFiles(path);
        foreach (string file in files)
            str.Append((str.Length == 0 ? "" : ";") + file);
 
        //所有子目录名
        string[] Dirs = System.IO.Directory.GetDirectories(path);
        foreach (string dir in Dirs)
        {
            string tmp = getAllFiles(dir);  //子目录下所有子文件名
            if (!tmp.Equals("")) str.Append((str.Length == 0 ? "" : ";") + tmp);
        }
    }
    return str.ToString();
}
More...

又他妈的扯淡!踏踏实实做点有底蕴的实事行吗?

今天在某博客上看到篇国产软件推广的软文,文章里称这个国产视频编辑软件某某神剪手两年五千万用户,风靡欧美大陆。本来看到是同一个城市的软件公司开发的软件有个十天免费VIP送想下载了试试的,看到这软文写的,恶心,关了页面吐一会~ ~!
会声会影、After effect、Premiere这些重量级的产品都没敢这么吹的,就连国内现在用户比较多的爱剪辑都不带这么打广告的,真当别人是傻子吗?以为集成几个常见特效拖拉一下做一个剪辑就能称得上风靡欧美~ ~!就拿After effect来说,它只所以能被好莱坞接受,不单是因为它本身做的足够出色,更是因为它有一条完善的庞大的产业链,让以它为中心的个人或者公司开发者能真正的收货回报,使用者又能得到他们想得到的。这才让软件的生命周期被不断延长并且被用户接受。
还是请国内的软件开发公司把用户真正想得到的东西放在首位并且完善自己的产业链,不用吹都能通过互联网收获你们想到的结果,Cinema 4D就是最好的例子!我08年接触C4D时,国内知道的人都没几个,但是用起来感觉就是比3DS MAX爽,渲染效果就是比3DSMAX强,要不是国内大部分人从读书开始就是学的3DSMAX,担心做出来的东西发给别人别人都不懂打开,老早就直接跳过去用C4D了。到今年我认识C4D十年了,它在行业内的名气也随着口碑越来越好被越发多的应用在生产环境中。低调一点,踏踏实实的做事,做真正有底蕴的事。

More...

无损转换Image为Icon

网上有一份各种格式图片转ICO的的代码,使用了以后转出来的ICO会失真!不知道这种无意义的代码为什么还那么多人去存档转发,难道自己都不做测试的吗?在翻看MSDN以后出来了以下代码,转换出来的就是带透明信息的无损ICO。无损,无损,无损。重要的事情说三遍。
MSDN链接:https://msdn.microsoft.com/en-us/library/ms997538.aspx
原理:
先将image编码为png
再将png原样包装成一个icon

/// <summary>
/// 转换Image为Icon
/// </summary>
/// <param name="image">要转换为图标的Image对象</param>
/// <param name="nullTonull">当image为null时是否返回null。false则抛空引用异常</param>
/// <exception cref="ArgumentNullException" />
public static Icon ConvertToIcon(Image image, bool nullTonull = false)
{
    if (image == null)
    {
        if (nullTonull) { return null; }
        throw new ArgumentNullException("image");
    }
 
    using (MemoryStream msImg = new MemoryStream()
                      , msIco = new MemoryStream())
    {
        image.Save(msImg, ImageFormat.Png);
 
        using (var bin = new BinaryWriter(msIco))
        {
            //写图标头部
            bin.Write((short)0);           //0-1保留
            bin.Write((short)1);           //2-3文件类型。1=图标, 2=光标
            bin.Write((short)1);           //4-5图像数量(图标可以包含多个图像)
 
            bin.Write((byte)image.Width);  //6图标宽度
            bin.Write((byte)image.Height); //7图标高度
            bin.Write((byte)0);            //8颜色数(若像素位深>=8,填0。这是显然的,达到8bpp的颜色数最少是256,byte不够表示)
            bin.Write((byte)0);            //9保留。必须为0
            bin.Write((short)0);           //10-11调色板
            bin.Write((short)32);          //12-13位深
            bin.Write((int)msImg.Length);  //14-17位图数据大小
            bin.Write(22);                 //18-21位图数据起始字节
 
            //写图像数据
            bin.Write(msImg.ToArray());
 
            bin.Flush();
            bin.Seek(0, SeekOrigin.Begin);
            return new Icon(msIco);
        }
    }
}

调用方法:

using (var myIcon = ConvertToIcon(Image.FromFile("D:\\temp\\008.png")).ToBitmap())
{
   myIcon.Save("d:\\temp\\1.ico", ImageFormat.Icon);
}
More...

ADSafe暗藏恶意代码劫持网站流量

小编PS:你们他妈的想钱想疯了吧,老子以前还没出台相关法律的时候就玩过的简单玩意,现在社会进步了,法律制度完善了还这么大张旗鼓的搞这些东西,脑子肯定是被驴给踢了。除了运营商谁他妈的劫持流量都要被喀嚓,人家运营商那是拿着牌照明抢,这群猪~~~

一、概述

日前,火绒安全团队发现”ADSafe净网大师”、”清网卫士”、 “广告过滤大师”等多款知名软件暗藏恶意代码,偷偷劫持用户流量。这些软件出自同一公司,功能类似,主要是屏蔽网页广告。根据技术分析,三款软件都会通过替换计费名(不同网站和上游分成的标识)的方式来劫持流量,牟取暴利。其劫持网站数量为近年最多,已达50余家,包括国内多家知名导航站、电商以及在线消费交易平台等。更可怕的是,”ADSafe”劫持规则可随时通过远程操作被修改,不排除其将来用来执行其他恶意行为的可能性,存在极大安全隐患。

图1.jpg

图1

火绒安全团队发现,”ADSafe”官网的软件版本虽然停留在v4.0.610,但其论坛、下载站中却发布了v5.3版。根据技术分析,”清网卫士”、”广告过滤大师”和v5.3版”ADSafe”的功能、广告过滤规则,以及恶意代码都完全一样,可以认定,”清网卫士”和”广告过滤大师”软件其实就是”ADSafe”的最新版本,都会通过替换计费名(不同网站和上游分成的标识)的方式来劫持流量,牟取暴利。

More...

Windows下搭建Git服务器

Git没有客户端服务器端的概念,但是要共享Git仓库,就需要用到SSH协议(FTP , HTTPS , SFTP等协议也能实现Git共享,此文档不讨论),但是SSH有客户端服务器端,所以在windows下的开发要把自己的Git仓库共享出去的话,就必 须做SSH服务器
Git服务现在独树一帜,相比与SVN有更多的灵活性,最流行的开源项目托管网站Github上面,如果托管开源项目,那么就是免费使用的,但是闭源的项目就会收取昂贵的费用,如果你不缺米,那么不在本文讨论的范围内,既然这样,我们可以自己搭建我们的Git服务器。
国内使用Windows Server平台的用户占大多数,那么本文就来讨论如何在Windows平台下搭建Git服务器。
第一步:下载Java,下载地址 http://www.java.com/zh_CN/
根据系统位数下载,32的下载32的,64的下载64的
第二步:安装Java.安装步骤不再详述。
第三步:配置Java环境变量
右键”计算机” => ”属性” => ”高级系统设置” => ”高级” => “环境变量” => “系统变量”。
1、新建:
变量名:JAVA_HOME
变量值:D:Program Files (x86)Javajdk1.6.0_21【具体要根据你自己的安装路径,我的是安装在D盘的】
2. 新建:(切记,在跟别的变量值的时候必须加分号; 要不会报错的)
变量名:CLASSPATH
变量值:%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar
3. 添加:找到PATH变量,选择编辑。把%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin添加到”变量值”的结尾处。
第四步:验证Java是否安装成功。
打开命令窗口=> 输入CMD => 确定。
在命令窗口中,输入java命令:javac,回车,如果出现如下信息,说明安装成功。

More...