问题描述

下面的文本中有好多路径如:D:\dev\workspace\HexoTools,我想用markdown代码段标记出来。

1
2
3
4
5
6
### 文件位置
- java工程位置:D:\dev\workspace\HexoTools
- java源码位置:D:\dev\workspace\HexoTools\src\front\matter\tools\HexoFrontMatter.java
- jar包文件位置:D:\dev\java\my\runable\HexoTools\FrontMatter\HexoFrontMatter.jar
- bat文件位置:D:\dev\java\my\runable\HexoTools\FrontMatter\HexoFrontMatter.bat
- 快捷方式位置:D:\快捷方式\HexoFrontMatter.lnk

也就是替换为:

1
2
3
4
5
6
### 文件位置
- java工程位置:`D:\dev\workspace\HexoTools`
- java源码位置:`D:\dev\workspace\HexoTools\src\front\matter\tools\HexoFrontMatter.java`
- jar包文件位置:`D:\dev\java\my\runable\HexoTools\FrontMatter\HexoFrontMatter.jar`
- bat文件位置:`D:\dev\java\my\runable\HexoTools\FrontMatter\HexoFrontMatter.bat`
- 快捷方式位置:`D:\快捷方式\HexoFrontMatter.lnk`

应用正则

这里使用的编辑器是:editplus,打开这篇文章,按下ctrl+h,打开查找替换,使用下面的正则表达式
查找正则:

1
(\w:(?:\\.+)+)

替换正则:

1
`$1`

这个匹配的不是很正确,使用的时候我还不敢点全部替换,我对正则表达式的掌握还不够,还得继续去学。

首先必须明确的是:要想操作一张图片,首先必须将其从磁盘加载到内存中,然后才能对图片做进一步的处理
继承关系

1
2
3
java.lang.Object
|----> java.awt.Image
|----> java.awt.image.BufferedImage

BufferedImage是Image的一个子类,Image和BufferedImage的主要作用就是将一副图片加载到内存中。BufferedImage生成的图片在内存里有一个图像缓冲区,利用这个缓冲区我们可以很方便的操作这个图片,通常用来做图片修改操作如大小变换、图片变灰、设置图片透明或不透明等。Java将一副图片加载到内存中的方法是:
1

BufferedImage bufferedImage = ImageIO.read(new FileInputStream(filePath));

问题描述

我不是很喜欢win10自带的微软拼音输入法,自己安装了搜狗拼音输入法,但是这样同时用两个输入法,经常需要按下shift+ctrl进行切换。我不喜欢来回切换输入法,现在来介绍移除多余的微软拼音输入法。

步骤

  1. 打开设置
  2. 进入时间和语言
  3. 选择区域和语言
  4. 单击中文(中华人民共和国),然后选择选项
  5. 然后再键盘中单击微软拼音,然后点击删除即可移除掉微软拼音输入法

删除无效的情况

今天win10更新了,微软输入法又回来了,按上述的方法老是删不掉,每当我按下shift+ctrl后,微软输入法就跳出来了.

解决方案

安装英语(美国)语言包,然后按上述步骤就可以删除了.

Markdown待办事项语法

不是所有的markdown都支持待办事项的,语法:横框+ 空格+方括号(方括号中必须有空格或者x) + 空格+ 文本。例如:

1
2
3
- [x] test
- [ ] test2
- [ ] test4

已经完成的事项,在中括号中写入英文x,未完成的事项在中括号中的写入空格,显示效果:

  • 已经完成的事项
  • 未完成的事项

MarkdownPad2 中支持待办事项

点击左下角的M图标切换CSS模式,选择GitHub Flavored Markdown (Offline)。这样导出的html就支持待办事项了。


再按下ctrl+shift+1导出为html,就可查看效果了:

有下面这样一段HTML代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<span style="cursor:auto">
Auto</span>
<br />
<span style="cursor:crosshair">
Crosshair</span>
<br />
<span style="cursor:default">
Default</span>
<br />
<span style="cursor:pointer">
Pointer</span>
<br />
<span style="cursor:move">
Move</span>
<br />
<span style="cursor:e-resize">
e-resize</span>
<br />
<span style="cursor:ne-resize">
ne-resize</span>
<br />
<span style="cursor:nw-resize">
nw-resize</span>
<br />
<span style="cursor:n-resize">
n-resize</span>
<br />
<span style="cursor:se-resize">
se-resize</span>
<br />
<span style="cursor:sw-resize">
sw-resize</span>
<br />
<span style="cursor:s-resize">
s-resize</span>
<br />
<span style="cursor:w-resize">
w-resize</span>
<br />
<span style="cursor:text">
text</span>
<br />
<span style="cursor:wait">
wait</span>
<br />
<span style="cursor:help">
help</span>

例如第一句:

1
2
3
<span style="cursor:auto">
Auto</span>
<br />

改成:

1
<span style="cursor:auto">Auto</span><br />

当然我是不可能一行行的来改的。使用正则表达式来做比较方便。匹配表达式:

1
(<span.*?>)\n\s+(.*</span>)\n\s+

匹配效果(VScode中):

html代码,会被括号捕获到,而换行符和空白符就不会被捕获,使用捕获到的html代码替换掉原来匹配的文本即可。所以替换的正则表达式为:

1
$1$2

$1表示第一个捕获组,$2表示第二个捕获组。捕获组不同的软件(体系)中的表示方式不同。VScode中是使用$1,$2,… 而NotePad++中使用的是\1,\2,\3...
使用上述正则表达式是进行替换即可。替换后的结果为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<p>请把鼠标移动到单词上,可以看到鼠标指针发生变化:</p>
<span style="cursor:auto">Auto</span><br />
<span style="cursor:crosshair">Crosshair</span><br />
<span style="cursor:default">Default</span><br />
<span style="cursor:pointer">Pointer</span><br />
<span style="cursor:move">Move</span><br />
<span style="cursor:e-resize">e-resize</span><br />
<span style="cursor:ne-resize">ne-resize</span><br />
<span style="cursor:nw-resize">nw-resize</span><br />
<span style="cursor:n-resize">n-resize</span><br />
<span style="cursor:se-resize">se-resize</span><br />
<span style="cursor:sw-resize">sw-resize</span><br />
<span style="cursor:s-resize">s-resize</span><br />
<span style="cursor:w-resize">w-resize</span><br />
<span style="cursor:text">text</span><br />
<span style="cursor:wait">wait</span><br />
<span style="cursor:help">
help</span>

当然最后一句,并没有能够成功匹配到。但这样的效果。还算满意,因为现在我只需要修改最后一行的效果。当然最佳的方式,应该是现在VScode中看匹配的结果。编写更好的正则表达式,尽可能匹配到所有的内容。完美的正则表达式为:

1
(<span.*?>)\n\s+(.*</span>)(:?\n\s+)?

这样所有的span标签都会被匹配到。替换后的效果为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<p>请把鼠标移动到单词上,可以看到鼠标指针发生变化:</p>
<span style="cursor:auto">Auto</span><br />
<span style="cursor:crosshair">Crosshair</span><br />
<span style="cursor:default">Default</span><br />
<span style="cursor:pointer">Pointer</span><br />
<span style="cursor:move">Move</span><br />
<span style="cursor:e-resize">e-resize</span><br />
<span style="cursor:ne-resize">ne-resize</span><br />
<span style="cursor:nw-resize">nw-resize</span><br />
<span style="cursor:n-resize">n-resize</span><br />
<span style="cursor:se-resize">se-resize</span><br />
<span style="cursor:sw-resize">sw-resize</span><br />
<span style="cursor:s-resize">s-resize</span><br />
<span style="cursor:w-resize">w-resize</span><br />
<span style="cursor:text">text</span><br />
<span style="cursor:wait">wait</span><br />
<span style="cursor:help">help</span>

实现

用notepad++打开该文章,按下ctrl+h打开替换,在查找模式选择框,选择正则表达式,然后输入查找正则表达式:

1
[*]{2}(\d+.+?)[*]{2}

输入替换正则表达式:

1
###\1###

如图所示:

使用java上传图片到腾讯云对象存储并返回链接

不需要签名的公共链接:

1
![](http://image-1257720033.cos.ap-shanghai.myqcloud.com/blog/%E6%B5%8B%E8%AF%95COS%E7%9A%84Java%20SDK/blue.jpg?sign=q-sign-algorithm%3Dsha1%26q-ak%3DAKIDQikX6SPUAcqqcAxaT8ZmjPpyrUqwuKei%26q-sign-time%3D1540294349%3B1540294649%26q-key-time%3D1540294349%3B1540294649%26q-header-list%3Dhost%26q-url-param-list%3D%26q-signature%3D1e368fb926c8858b9ed65b923a9030bb54234129)

显示效果:

去掉签名的链接:

1
![](http://image-1257720033.cos.ap-shanghai.myqcloud.com/blog/%E6%B5%8B%E8%AF%95COS%E7%9A%84Java%20SDK/blue.jpg

显示效果:

https的图片链接:

1
![](https://image-1257720033.cos.ap-shanghai.myqcloud.com/blog/%E6%B5%8B%E8%AF%95COS%E7%9A%84Java%20SDK/blue.jpg)

显示效果:

使用https的其他图片

最后的显示效果:

软件上传效果:

前言

上次的程序我通过使用,我通过javaw -jar xxx.jar来启动一个程序,在任务管理器中显示如下:

如果有一个javaw进行还好,但是我写的java工具程序可能比较多。进程名都是javaw的话不好分辨。在Windows下可以把可执行jar包打包成exe文件,这样就有自己的进程名,图标。便于我在任务管理器中管理(不需要时杀掉该进程)。

使用eclipse把java项目打包为可执行jar包

在项目上右键选择Export:

然后展开Java项,选择Runable JAR File:

然后选择主类,jar包的输出位置,依赖包的打包方式。最后点击Finish即可。

下载安装破解exe4j

下载exe4j

破解版下载路径:https://www.jb51.net/softs/541579.html

解压压缩包

下载后,解压压缩包:

安装

点击安装程序exe4j_windows-x64_5_0_1.exe进行安装。

破解

安装成功后启动exe4j,点击Change License按钮,然后运行压缩包中的Keymaker.exe生成秘钥。



粘贴秘钥到exe4j,点击OK即可。

打包jar为exe

Project type

选择JAR in EXE mode,然后点击next.

Application info

然后输入exe文件的简称,exe文件输出位置。然后next

Executable info

Executable type:中选择第一项GUI application,表示GUI程序,第二个选项表示控制台程序。
Executable name:中输入软件的名称(OCR)
Icon file:中选择图标的位置,图标需要实现下载好,图标不是必须的,没有也没关系。
然后展开Advanced options选择第一项Redirection

Redirection

然后勾选Redirect stderr,显示错误输出目录,然后点next,Service options 和Version info默认即可,所以点击next,next即可。

32-bit or 64-bit

然后选择Generate 64-bit executable,生成64位的exe程序。然后next,next

Java invocation

到了第5个配置项Java invocation这里要把刚才生成的可执行jar包添加进来。以及所有的依赖包,点击绿色的加号,添加可执行Jar包


导入所有的依赖包

然后在Main class:选择主类:

JRE

选择最小支持的版本,最大的版本可以默认不写。然后展开Advanced options,选择Search sequence

点击绿色的加号

然后,选择找到本地的jre:

然后把它移动到最顶端:


然后next,

然后默认,next

后面一直next即可。

运行生成的exe

打开输出目录双击运行exe文件即可运行

参考:https://blog.csdn.net/qq_29232943/article/details/52861800

需求

  • 加入保存保存快捷键ctrl+s
  • 修改代码,支持多次保存

实现

加入保存快捷键

在ScreenShotWindow.java中加入快捷键变量声明:
第1步:

1
2
// 定义保存快捷键
public static final int SaveImage_HOT_KEY = 4;

第2步:
注册快捷键:

1
2
3
//添加保存快捷键
JIntellitype.getInstance().registerHotKey(SaveImage_HOT_KEY,
JIntellitype.MOD_CONTROL, (int) 'S');

第3步:编写事件监听逻辑:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
// 第3步:添加热键监听器JIntellitype
JIntellitype.getInstance().addHotKeyListener(new HotkeyListener()
{
@Override
public void onHotKey(int markCode)
{
switch (markCode)
{
// 按下alt+w快捷键表示再次截屏
case SCREENSHOT_HOT_KEY :
// showMessage();
// ScreenShotOCR.visiable();
//如果当前窗口可见的话
//再次截屏时,隐藏工具窗口
if(tools!=null)
{
tools.setVisible(false);
}
//重新截屏
try
{
createScreenCapture();
} catch (AWTException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

//显示窗口
ScreenShotOCR.visiable();
// //让窗口置顶
// 这个应该在开始的时候就设置
// ScreenShotOCR.ssw.setAlwaysOnTop(true);
// tools.setAlwaysOnTop(true);
break;
// alt+q快捷键表示退出程序
case EXIT_KEY_MARK :
System.exit(0);
break;
case EXIT_SCREENSHOT_HOT_KEY:
//让窗口不显示
ScreenShotWindow.this.setVisible(false);//不显示窗口
tools.setLocation(0, 0);
break;
case SaveImage_HOT_KEY:
//让窗口不显示
ScreenShotWindow.this.setVisible(false);//不显示窗口
tools.setLocation(0, 0);
try
{
saveImage();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
}
}
});

关键代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
case SaveImage_HOT_KEY:
//让窗口不显示
ScreenShotWindow.this.setVisible(false);//不显示窗口
tools.setLocation(0, 0);
try
{
saveImage();//按下ctrl+s时调用保存图片函数
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
break;

这样就注册了保存快捷键了。接下来修改保存函数。

支持多次保存保存后不退出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// 保存图像到文件
public void saveImage() throws IOException
{

JFileChooser jfc = new JFileChooser();
jfc.setDialogTitle("保存");

// 文件过滤器,用户过滤可选择文件
FileNameExtensionFilter filter = new FileNameExtensionFilter("PNG",
"png");
jfc.setFileFilter(filter);

// 初始化一个默认文件(此文件会生成到桌面上)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
String fileName = sdf.format(new Date());
File filePath = FileSystemView.getFileSystemView().getHomeDirectory();
File defaultFile = new File(
filePath + File.separator + fileName + ".png");
jfc.setSelectedFile(defaultFile);

int flag = jfc.showSaveDialog(this);
if (flag == JFileChooser.APPROVE_OPTION)
{
File file = jfc.getSelectedFile();
String path = file.getPath();
// 检查文件后缀,放置用户忘记输入后缀或者输入不正确的后缀
if (!(path.endsWith(".png") || path.endsWith(".PNG")))
{
path += ".png";
}

// 写入文件
ImageIO.write(saveImage, "png", new File(path));
//不退出
//System.exit(0);
}
}

原先的代码中截图后就退出了,关键代码:System.exit(0);把这一段话注释掉即可。

出现问题

无法使用ctrl+s快捷键,因为JIntellitype注册的是全局快捷键,在其他软件中按下ctrl+s进行保存文档的时候,系统会误认为是调用了保存图片。这样是不对的。这里解决方法是吧保存图片快捷键改成ctrl+alt+s。局部快捷键怎么设置为还不知道。先别管他,能用就行了,我先去学点其他东西。