思维导图软件Xmind(3.2.1破解)--转载大全

 前两天在复习CCNP的OSPF协议的时候,突然想起来要用用以前听说过的那个思维导图来做下笔记。废话不多说,下面是维基百科上的摘要:

       心智图,又称脑图、思维导图、灵感触发图、概念地图或思维地图,是一种图像式思维的工具与及一种利用图像式思考辅助工具来表达思维的工具。

详细的可以查看这里(维基百科)还有这里(百度百科)

1:说说这两天的使用感受。说真的不用不知道一用吓一跳,真的很佩服托尼·巴赞Tony Buzan)大侠提出了思维导图这个概念。给我的感觉就是用了思维导图后思维会变得非常的有条理,不会像以前那样对于知识的了解只是一个大概,根本没有建立起一个完整的知识架构。说到这里不得不提的一个感觉就是:知识需要慢慢的积累,但知识更需要吸纳,没有不断地学习,迟早是要落后的。

先给个创始人Tony Buzan的靓照,表示下对大侠的崇拜之情。

2:现阶段针对思维导图这个概念的应用软件非常之多比如说Xmind ,MindManager ,Inspiration ,SmartDraw等等等等,这里就说说我正在使用的Xmind。

就我所知Xmind是一个免费的开源软件,但是它有商业版本的(PS:每年49美元)。说实话太贵了,向我一样的学生现在还真的付不起,想想最近几年的通货膨胀。哎……而且软件还是跨平台的,支持Windows,Mac OS X,Debian/Ubuntu(32位和64位),便携版(支持3上述3中平台下),官方给了源码包需要在其他Linux发行版的朋友可以自行编译安装,比如我用的Fedora。其实我第一个使用思维导图软件是MindManager的,虽然说功能相当于Xmind要强大的很多。但是我看中的主要就是Xmind的跨平台。

3:既然说到了这个软件,不得不提的就是另外一个在windows下做笔记比较方便的软件MyBase DeskTop,现在的版本估计比较高了。我还在5.0纠结着,但是也够用了。

4:贴上我自己的Xmind截图:

上面是我自己做的一个思维导图,感觉还不错。哈哈……

下面说下软件里面比较常使用的几个快捷键:

1:Insert,主要的功能就是在选定的一个项目(比如说我上面截图里的矩形框或者椭圆框)里面插入其子项目。

2:按F2直接修改选定项目的内容,说个技巧:在你新建一个项目或子项目的时候可以直接键盘输入项目的名称而不必点击F2,这样可以节省大量的时间。

3:F6钻入功能,当导图过大的时候,使用此功能可以使自己的导图形成一种嵌套式的结构。这样大大地简化了导图的大小,而且对于知识的整理可以更加的清晰,不会让人产生一种眼花缭乱的感觉。

给几个个样式图:

最外层导图:

点击绿色箭头后进入区域内部的导图:

4:敲击回车创建相对应的项目,比如说主项目或者是子项目。

5:创建注释,这个快捷键没找着。但是这个功能让我有种想直接抛弃MyBase DeskTop的冲动。

快捷键是F4感谢gaoyy童鞋的提醒………

给个样式图:

由于使用软件的时间不大久,一些高级的应用还没有搞清楚怎么用,推荐一个Xmind的中文论坛:http://actsmind.com/forum/index.php,需要高级应用或者有什么问题不懂得可以问上面的人。

下面给出软件的破解方案了:

软件直接从官方网站上下载了,这个就不给地址了,自己Google、百度吧。

安装默认的安装路径将软件装与C盘中:比如我的路径C:\Program Files\XMind,然后下载这个破解插件:已经上传到Dbank数据银行上了,大家放心下载。需要的朋友看这里吧:http://dl.dbank.com/c0s1pxtxw1,下载完破解补丁以后可以看到一个文件名为net.xmind.verify_3.2.1.201011212218的文件,然后进入到你的Xmind安装目录:C:\Program Files\XMind\plugins找到类似于上面的文件,记住修改破解补丁文件为你所使用Xmind版本内类似于net.xmind.verify_3.2.1的文件名,然后替换掉就可以破解使用Xmind的Pro功能了,这里提醒下;每次开启软件都需要输入账号与密码,破解完后通过普通可以使用Pro功能,未破解需要使用49美元的那个收费账号,有钱的话还是买正版吧。有个收费账号就可以,离线使用Pro功能了…….

都快4点了,就写到这里了….以后有补充再添加进来…..睡觉去…..O(∩_∩)O哈哈~

本文短链接:http://goo.gl/YBVZO  源链接:http://www.taglete.info/archives/2010/11/307

 

------------------------

 

迫于很多项目的格式都是xmind的,最近从mindmanager迁移到xmind了,发现免费的东西国人还是很喜欢的,要是将收费功能免费化就更好了。本来想支持下国产软件,一看那PRO版价格,算了,还是老老实实用免费的吧。
xmind介绍点击这里这里。思维导图介绍点击这里
好吧,我努力下,将最新的xmind【截止2011/4/7版本】pro版本功能挖掘出来。下面是一个智能截图[pro]功能的使用截图。我使用了其它一些PRO功能发现都可以使用,包括导出,但是没有完全使用所有PRO功能,如果还有请告知吧。
另外,这不需要帐户进行登录就可以使用所有PRO功能。


  1 package net.xmind.verify.internal;
  2 
  3 import java.io.PrintStream;
  4 import java.util.ArrayList;
  5 import java.util.List;
  6 import net.xmind.signin.IAccountInfo;
  7 import net.xmind.signin.IAuthenticationListener;
  8 import net.xmind.signin.IDataStore;
  9 import net.xmind.signin.ISignInDialogExtension;
 10 import net.xmind.signin.IXMindNetCommand;
 11 import net.xmind.signin.IXMindNetCommandHandler;
 12 import net.xmind.signin.XMindNet;
 13 import net.xmind.signin.internal.InternalXMindNet;
 14 import net.xmind.signin.internal.JSONStore;
 15 import net.xmind.signin.internal.XMindNetAccount;
 16 import net.xmind.verify.IVerifyListener;
 17 import org.apache.commons.httpclient.HttpClient;
 18 import org.apache.commons.httpclient.methods.GetMethod;
 19 import org.eclipse.core.runtime.Assert;
 20 import org.eclipse.core.runtime.IProgressMonitor;
 21 import org.eclipse.core.runtime.IStatus;
 22 import org.eclipse.core.runtime.SafeRunner;
 23 import org.eclipse.core.runtime.Status;
 24 import org.eclipse.core.runtime.jobs.IJobChangeEvent;
 25 import org.eclipse.core.runtime.jobs.Job;
 26 import org.eclipse.core.runtime.jobs.JobChangeAdapter;
 27 import org.eclipse.jface.preference.IPreferenceStore;
 28 import org.eclipse.jface.util.SafeRunnable;
 29 import org.json.JSONObject;
 30 
 31 public class UserInfoVerifier
 32   implements IAuthenticationListener, IXMindNetCommandHandler
 33 {
 34   static final String UID = "uid";
 35   private static final String EXPIRATION = "expiration";
 36   private static final boolean DEBUG = false;
 37   private static UserInfoVerifier instance = null;
 38   private IPreferenceStore prefStore;
 39   private final boolean isVindy;
 40   static final IStatus validity = createValidity(1);//by imxylz, force passed
 41   private List<IVerifyListener> listeners;
 42   private List<IVerifyListener> callbacks;
 43   private boolean notifyingListeners = false;
 44 
 45   private VerifyJob verifyJob = null;
 46 
 47   private boolean internalSigningOut = false;
 48   final static String i_user = "imxylz";//by imxylz
 49   final static String i_uid = "20110407";//by imxylz
 50 
 51   private UserInfoVerifier(IPreferenceStore prefStore)
 52   {
 53     this.prefStore = prefStore;
 54     isVindy = checkVindy();
 55 
 56     if (isVindy) {
 57       InternalXMindNet.getInstance().getAccount().preauthorized();
 58     } else {
 59       XMindNet.addAuthenticationListener(this);
 60       XMindNet.addXMindNetCommandHandler("refresh"this);
 61     }
 62   }
 63 
 64   private boolean checkVindy() {
 65     String distribId = 
 66       System.getProperty("org.xmind.product.distribution.id");
 67     if ((distribId == null|| ("".equals(distribId)) || 
 68       (!distribId.startsWith("vindy"))) {
 69       return false;
 70     }
 71     String name = 
 72       System.getProperty("org.xmind.product.distribution.vindy.org");
 73     if ((name == null|| ("".equals(name))) {
 74       return false;
 75     }
 76     String time = 
 77       System.getProperty("org.xmind.product.distribution.vindy.time");
 78     if ((time == null|| ("".equals(time))) {
 79       return false;
 80     }
 81     String digest = 
 82       System.getProperty("org.xmind.product.distribution.vindy.name");
 83     if ((digest == null|| ("".equals(digest))) {
 84       return false;
 85     }
 86     return digest.equals(Cryptus.digest(name + time + 
 87       "30e207986ea2b691faa41fa51cc1b8e7"));
 88   }
 89 
 90   public void postSignIn(IAccountInfo accountInfo)
 91   {
 92     if (verifyJob == null)
 93       verify(nulltruenullnull);
 94   }
 95 
 96   public void postSignOut(IAccountInfo oldAccountInfo)
 97   {
 98     if (!internalSigningOut) {
 99       saveExpTime(0Lnull);
100       notifyValidity(validity, null);
101     }
102   }
103 
104   public boolean isValid() {
105     return (validity != null&& (validity.getCode() == 1);
106   }
107 
108   public void verify() {
109     verify(nullfalsenullnull);
110   }
111 
112   public void verify(IVerifyListener callback) {
113     verify(callback, falsenullnull);
114   }
115 
116   public void verify(IVerifyListener callback, boolean silent, String signInMessage, ISignInDialogExtension signInExtension)
117   {
118     if (validity != null) {
119       int code = validity.getCode();
120       if ((code == 1|| 
121         ((code & 0x80000018!= 0)) {
122         notifyValidity(validity, callback);
123         return;
124       }
125     }
126 
127     if (callback != null) {
128       if (callbacks == null)
129         callbacks = new ArrayList();
130       callbacks.add(callback);
131     }
132 
133     if (verifyJob == null) {
134       VerifySession session = new VerifySession(signInMessage, 
135         signInExtension);
136       verifyJob = new VerifyJob(session, silent);
137       verifyJob.addJobChangeListener(new JobChangeAdapter() {
138         public void done(IJobChangeEvent event) {
139           if (verifyJob == event.getJob()) {
140             verifyJob = null;
141           }
142           IStatus r = event.getResult();
143           UserInfoVerifier.this.notifyValidity(validity, null);
144         }
145       });
146       verifyJob.schedule();
147     } else if (!silent) {
148       verifyJob.setSilent(silent);
149     }
150   }
151 
152   private void saveExpTime(long expTime, String uid) {
153     if (expTime == 0L)
154       prefStore.setToDefault("expiration");
155     else
156       try {
157         if (expTime < 0L)
158           expTime = 9223372036854775807L;
159         String value = Cryptus.encrypt("`\t\n" + 
160           Long.toString(expTime, 16), uid);
161         if (value != null)
162           prefStore.setValue("expiration", value);
163       }
164       catch (Exception localException)
165       {
166       }
167   }
168 
169   public IStatus getValidity()
170   {
171     return validity;
172   }
173 
174   private int parseValidityState(IDataStore data, String uid) {
175 //    if (!data.has("expireDate")) {
176 //      saveExpTime(0L, uid);
177 //
178 //      return 8;
179 //    }
180 //
181 //    long expireDate = data.getLong("expireDate");
182 //    if (expireDate < 0L) {
183 //      saveExpTime(0L, uid);
184 //
185 //      return 8;
186 //    }
187 //
188 //    boolean expired = data.getBoolean("expired");
189 //    if (expired) {
190 //      saveExpTime(0L, uid);
191 //
192 //      return 16;
193 //    }
194 //
195 //    saveExpTime(expireDate, uid);
196 //
197 //    long now = System.currentTimeMillis();
198 //    if (now > expireDate)
199 //    {
200 //      return 16;
201 //    }
202 
203     return 1;
204   }
205 
206   private static IStatus createValidity(int state)
207   {
208     return createValidity(state, null);
209   }
210 
211   private static IStatus createValidity(int state, Throwable error)
212   {
213     int severity;
214     if (state == -2147483648)
215       severity = 2;
216     else {
217       severity = 0;
218     }
219     return new Status(severity, "net.xmind.varify", state, null, error);
220   }
221 
222   private void notifyValidity(IStatus validity, IVerifyListener callback)
223   {
224     Assert.isNotNull(validity);
225     if (callback != null)
226       callback.notifyValidity(validity);
227     else {
228       notifyCallbacks(validity);
229     }
230     notifyListeners(validity);
231     notifyXMindNetAccount(validity);
232   }
233 
234   private void notifyXMindNetAccount(IStatus validity)
235   {
236     int code = validity.getCode();
237     if (code == -2147483648) {
238       InternalXMindNet.getInstance().getAccount().unauthorized(
239         new Status(validity.getSeverity(), validity.getPlugin(), 
240         2, validity
241         .getMessage(), validity.getException()));
242     } else if (code == 4) {
243       InternalXMindNet.getInstance().getAccount().unauthorized(
244         new Status(validity.getSeverity(), validity.getPlugin(), 
245         1, validity
246         .getMessage(), validity.getException()));
247     }
248     else
249     {
250       int subscriptionStatus;
251       if (code == 1) {
252         subscriptionStatus = 2;
253       }
254       else
255       {
256         if (code == 16)
257           subscriptionStatus = 3;
258         else
259           subscriptionStatus = 1;
260       }
261       InternalXMindNet.getInstance().getAccount().authorized(
262         subscriptionStatus);
263     }
264   }
265 
266   private synchronized void notifyCallbacks(final IStatus validity)
267   {
268     if (callbacks == null)
269       return;
270     for (IVerifyListener callback0 : callbacks) {
271         final IVerifyListener callback = callback0;
272       SafeRunner.run(new SafeRunnable() {
273         public void run() throws Exception {
274           ((IVerifyListener)callback).notifyValidity(validity);
275         }
276       });
277     }
278     callbacks.clear();
279     callbacks = null;
280   }
281 
282   private void notifyListeners(final IStatus validity)
283   {
284     if ((listeners == null|| (notifyingListeners))
285       return;
286     notifyingListeners = true;
287     for (IVerifyListener callback0 : listeners) {
288         final IVerifyListener callback = callback0;
289       SafeRunner.run(new SafeRunnable() {
290         public void run() throws Exception {
291           ((IVerifyListener)callback).notifyValidity(validity);
292         }
293       });
294     }
295     notifyingListeners = false;
296   }
297 
298   public void addVerifyListener(IVerifyListener listener) {
299     if (listeners == null)
300       listeners = new ArrayList<IVerifyListener>();
301     listeners.add(listener);
302   }
303 
304   public void removeVerifyListener(IVerifyListener listener) {
305     if (listeners != null)
306       listeners.remove(listener);
307   }
308 
309   private static void debug(String message)
310   {
311     System.out.print("[verify] ");
312     System.out.println(message);
313   }
314 
315   private static void debug(Throwable e) {
316     e.printStackTrace();
317   }
318 
319   public static UserInfoVerifier getInstance()
320   {
321     if (instance == null) {
322       instance = new UserInfoVerifier(VerifyPlugin.getDefault()
323         .getPreferenceStore());
324     }
325     return instance;
326   }
327 
328   public boolean handleXMindNetCommand(IXMindNetCommand command) {
329     return refreshValidity(command.getContent());
330   }
331 
332   private boolean refreshValidity(IDataStore data) {
333 //    if (data == null) {
334 //      return true;
335 //    }
336 //    String user = data.getString("user");
337 //    String uid = data.getString("uid");
338 //    if ((user == null) || (uid == null)) {
339 //      return true;
340 //    }
341 //    IAccountInfo accountInfo = XMindNet.getAccountInfo();
342 //
343 //    if ((accountInfo == null) || (!user.equals(accountInfo.getUser()))) {
344 //      return true;
345 //    }
346     prefStore.putValue("user", i_user);
347     prefStore.putValue("uid", i_uid);
348 
349     int state = parseValidityState(data, i_uid);
350 
351     notifyValidity(validity, null);
352     return true;
353   }
354 
355   private class VerifyJob extends Job
356   {
357     private boolean silent;
358     private UserInfoVerifier.VerifySession session;
359 
360     public VerifyJob(UserInfoVerifier.VerifySession session, boolean silent)
361     {
362       super("");
363       this.session = session;
364       this.silent = silent;
365       setSystem(silent);
366     }
367 
368     public void setSilent(boolean silent) {
369       this.silent = silent;
370     }
371 
372     private IStatus err(int validityState, IStatus error) {
373       return UserInfoVerifier.createValidity(1);
374     }
375 
376     protected IStatus run(IProgressMonitor monitor)
377     {
378       monitor.beginTask(null90);
379       monitor.done();
380       return validity;//ok status
381     }
382   }
383 
384   private class VerifySession
385   {
386     public static final int INITIALIZED = 0;
387     public static final int RETRIEVING_USER_INFO = 1;
388     public static final int RETRIEVING_UID = 2;
389     public static final int VERIFYING = 3;
390     public static final int COMPLETED = 4;
391     private String user;
392     private String token;
393     private String uid;
394     private int validityState = 0;
395 
396     private int status = 0;
397     final IStatus termination = Status.OK_STATUS;;//by imxylz, force passed
398     private String signInMessage;
399     private ISignInDialogExtension signInExtension;
400 
401     public VerifySession(String signInMessage, ISignInDialogExtension signInExtension)
402     {
403       this.signInMessage = signInMessage;
404       this.signInExtension = signInExtension;
405     }
406 
407     public int getValidityState() {
408       return validityState;
409     }
410 
411     public boolean hasUserID() {
412       return (user != null&& (!"".equals(user));
413     }
414 
415     public boolean hasToken() {
416       return (token != null&& (!"".equals(token));
417     }
418 
419     public boolean hasUID() {
420       return (uid != null&& (!"".equals(uid));
421     }
422 
423     public boolean hasValidityState() {
424       return validityState > 0;
425     }
426 
427     public boolean hasError() {
428       return (termination != null&& (termination.matches(4));
429     }
430 
431     public IStatus getError() {
432       return termination;
433     }
434 
435     private IStatus ok() {
436       return termination;
437     }
438 
439     private IStatus err(int code, Throwable e) {
440       return termination;
441     }
442 
443     public void reset() {
444     }
445 
446     public IStatus retrieveLocalUserInfo() {
447       status = 1;
448       validityState = 0;
449 
450       IAccountInfo accountInfo = XMindNet.getAccountInfo();
451       user = (accountInfo == null ? null : accountInfo.getUser());
452       token = (accountInfo == null ? null : accountInfo.getAuthToken());
453       if ((user == null|| (token == null)) {
454         validityState = 4;
455       }
456 
457       return ok();
458     }
459 
460     public IStatus retrieveUserInfo() {
461       status = 1;
462       validityState = 0;
463 
464       internalSigningOut = true;
465       XMindNet.signOut();
466       internalSigningOut = false;
467       IAccountInfo accountInfo = XMindNet.signIn(
468         signInMessage == null ? Messages.verifyJob_message : 
469         signInMessage, signInExtension);
470       user = (accountInfo == null ? null : accountInfo.getUser());
471       token = (accountInfo == null ? null : accountInfo.getAuthToken());
472       if ((user == null|| (token == null)) {
473         validityState = 4;
474       }
475 
476       return ok();
477     }
478 
479     public IStatus retrieveLocalUID() {
480       status = 2;
481       uid = null;
482 
483       String verifiedUserId = prefStore.getString("user");
484 
485       if ((verifiedUserId != null&& (verifiedUserId.equals(user))) {
486         uid = prefStore.getString("uid");
487       }
488       else
489       {
490         prefStore.setToDefault("uid");
491       }
492       return ok();
493     }
494 
495     public IStatus retrieveUID() {
496       status = 2;
497       uid = null;
498 
499       String url = "https://www.xmind.net/_res/uid/" + user;
500 
501       GetMethod method = new GetMethod(url);
502       method.setRequestHeader("AuthToken", token);
503       method.setRequestHeader("accept""application/json");
504       try {
505         int code = new HttpClient().executeMethod(method);
506 
507         if (code != 200) {
508           return err(code, null);
509         }
510         JSONObject resp = new JSONObject(method
511           .getResponseBodyAsString());
512         code = resp.getInt("_code");
513 
514         if (code != 200) {
515           return err(code, null);
516         }
517         uid = resp.getString("uid");
518 
519         if ((uid != null&& (!"".equals(uid))) {
520           prefStore.putValue("user", user);
521           prefStore.putValue("uid", uid);
522         } else {
523           prefStore.setToDefault("user");
524           prefStore.setToDefault("uid");
525         }
526       }
527       catch (Exception e)
528       {
529         return err(0, e);
530       }
531       return ok();
532     }
533 
534     public IStatus retrieveLocalValidityState() {
535         return retrieveValidityState();//by imxylz, ignore checking
536 //      status = 3;
537 //      validityState = 0;
538 //
539 //      String value = prefStore.getString("expiration");
540 //
541 //      if ((value != null) && (!"".equals(value))) {
542 //        try {
543 //          value = Cryptus.decrypt(value, uid);
544 //
545 //          if ((value != null) && 
546 //            (!"".equals(value)) && (value.startsWith("`\t\n"))) {
547 //            long expTime = Long.parseLong(value.substring(3), 16);
548 //
549 //            validityState = (System.currentTimeMillis() < expTime ? 1 : 
550 //              16);
551 //
552 //            return ok();
553 //          }
554 //        }
555 //        catch (Exception e)
556 //        {
557 //          return err(0, e);
558 //        }
559 //      }
560 //      return ok();
561     }
562 
563     public IStatus retrieveValidityState() {
564         status=4;
565         validityState=1;
566         return ok();//by imxylz, ignore checking
567 //      status = 3;
568 //      validityState = 0;
569 //
570 //      String url = "https://www.xmind.net/_res/verify/" + user;
571 //
572 //      GetMethod method = new GetMethod(url);
573 //      method.setRequestHeader("UID", uid);
574 //      method.setRequestHeader("accept", "application/json");
575 //      try {
576 //        int code = new HttpClient().executeMethod(method);
577 //
578 //        if (code != 200) {
579 //          return err(code, null);
580 //        }
581 //        JSONObject resp = new JSONObject(method
582 //          .getResponseBodyAsString());
583 //        code = resp.getInt("_code");
584 //
585 //        if (code != 200) {
586 //          return err(code, null);
587 //        }
588 //        validityState = UserInfoVerifier.this.parseValidityState(new JSONStore(resp), uid);
589 //
590 //        status = 4;
591 //        return ok();
592 //      }
593 //      catch (Exception e) {
594 //      }
595 //      return err(0, e);
596     }
597   }
598 }
  • 第40行final字段强制修改状态为通过认证状态!
  • 第48/49行搞一个写死的user/uid,其实我也不知道user/uid的格式是什么。
  • 175~201行忽略过期时间,总是有效
  • 380行,强制为认证状态(final字段)
  • 所以状态校验的逻辑都改为397行的OK状态(final字段)
注意,这没有破解登录以及UI,所以显示的依然是免费版,但是所有PRO功能都可以使用,木有问题!
公开java类?上面就是了。
不知道怎么使用?那就算了,请绕行吧。
搞一个破解好的jar包?这个不好吧,毕竟人家国产软件已经有了免费版,而且收费版价格不便宜。如果有需要,可以私下联系,O(∩_∩)O哈哈~。
PS: 搞完后发现网上居然有很多补丁,好吧,我错了!自己收藏了![by imxylz]

 

posted @ 2011-10-10 12:35  蓝叶菱  阅读(20044)  评论(3)    收藏  举报