Window系统使用

windows usage tricks

重新整理日常工作中Windows环境下的配置以及使用技巧。默认最前面的内容为最新的内容。

批量删除文件

#列出当前目录及所有子目录所有以._开头的文件
\>dir ._* /a/s 
#删除当前目录及所有子目录所有以._开头的文件
\>del ._* /a/s

.DS_Store

del .DS_Store* /a/s

开启远程桌面连接 mstsc

使用window defender阻止程序联网

  • win+R输入mf.msc打开防火墙
  • 出站规则 选择 “新建规则” –> 程序 –> 添加程序的 exe地址
  • 一路默认添加必要的信息即可

四哥分享的TreeSize里提到——“有新版了,很长时间未更新。用上面这个URL直接下载,Free版就够用。用wf.msc阻止TreeSize联网,这种软件绝对不能让它联网”

用Calibre给txt文件生成目录

来源——

  • txt不带目录
  • calibre-ebook安装
  • 添加txt到calibre
  • 转换书籍 –> 结构检测 –> xpath表达式。使用如下转换正则表达式
//*[re:test(., "^\s*[第卷][0123456789一二三四五六七八九十零〇百千两]*[章回部节集卷].*", "i")]

Windows Terminal + Oh my posh

# 在powershell中查看$PROFILE的文件位置,编辑如下内容
Import-Module posh-git
Import-Module oh-my-posh
Set-PoshPrompt -Theme JanDeDobbeleer

# 执行Get-PoshThemes可以看到有哪些主题可选,根据提示进行设置即可

VSCODE中的powershell主题如果现实乱码,需要在设置里对terminal进行设置:打开设置,搜索Integrated:Font Family,在输入框中输入下载的字体名称,例如DejaVuSansMono Nerd Font Idea和goland中的terminal目前无法正常显示,看起来是个已知问题,参考bug262116

MAS

Microsoft-Activation-Scripts,纯batchfile语言实现——

A collection of scripts for activating Microsoft products using HWID / KMS38 / Online KMS activation methods with a focus on open-source code, less antivirus detection and user-friendliness.

G出来这篇文章,使用的还是1.0版本,测试可用。强悍

chrome强制同步

Pushing on Chrome Sync,实测可行。访问chrome://sync,查看各个部分的状态,如果Local State显示Server connection认证失败。可以点击Stop Sync(Keep Data)按钮,会自动触发同步更新。或者点击Trigger GetUpdates按钮。

Mac上点击trigger按钮没生效,Local State显示认证失败。折腾半天,最后点击Stop Sync反而触发了同步机制

禁止chrome自动更新

How to disable Google Chrome auto update?,高大上的方法不用使用。找到chrome安装目录,对应的文件夹下有个Update文件夹,将此文件夹重新命名即可。即使修改了一堆注册表,实际执行升级动作是还是需要有对应的程序,这个思路就是:“你找不到做升级动作的程序,看你还怎么升级”LOL

chromium download 各个平台的chrome历史版本

Electron devTools

快捷键Ctrl+Shift+I打开调试工具

WSL

Windows Subsystem for Linux Installation Guide for Windows 10

使用管理员权限打开PowersShell

  • 启用WSL功能:dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
  • 确保系统版本不低于1903,构建版本不低于18362(可使用winver命令查看系统版本)
  • 激活虚拟机器功能dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart(重启生效)
  • 下载升级最新版本WSL2
  • 安装完成之后设置wsl2版本为默认版本wsl --set-default-version 2
  • 之后就可以在Microsoft Store中下载安装各种版本的linux

PS:使用代理的情况下,Microsoft Stroe将提示代码: 0x80072EFD无法打开页面,需要在系统的网络设置里先取消网络代理。

从Store里安装完成之后(首次安装比较耗时,实际的安装目录似乎在%localappdata%\Packages目录下),可以将此“文件”添加到“开始”目录,然后直接进入(首次启动比较耗时)

  • windows本身的目录可以在默认mount在/mnt目录
  • 已安装的应用可以wsl --list查看
  • Windows下可以在浏览器服务file://wsl%24/Ubuntu-20.04/查看安装的ubuntu文件

PC断电后,wsl网络异常

核心原因是PC端为WSL服务的虚拟网卡异常,导致wsl的网络无法访问网络。重置PC端的网络——使用管理员权限打开CMD命令行,重置如下的所有网络,然后重启PC

netsh winsock reset
netsh int ip reset all
netsh winhttp reset proxy
ipconfig /flushdns

wsl端的linux上的/etc/resolv.conf文件中可以看到自动生成的nameserve地址为PC端的虚拟网卡地址——

# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.19.176.1

可以定制wsl端的linux的启动选项,增加network端的配置(不自动生成resolv.conf文件)。实测还是自动生成文件比较靠谱,只有确保PC端的网络正常,wsl端的网络就可以恢复。(遇到无法编辑这个文件的情况,使用sudo vim /etc/resolv.conf操作时,提示"resolv.conf" E166: Can't open linked file for writing)

可以通过stat /etc/resolv.conf看到这个文件的状态,类似——

 File: /etc/resolv.conf -> ../run/resolvconf/resolv.conf
  Size: 29              Blocks: 0          IO Block: 4096   symbolic link
Device: 810h/2064d      Inode: 44358       Links: 1
Access: (0777/lrwxrwxrwx)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-07-02 08:38:47.580000000 +0800
Modify: 2021-05-31 11:27:04.000000000 +0800
Change: 2021-05-31 17:01:15.490000000 +0800
 Birth: -

启动、移动

Using the WSL command line tool。将安装的应用移动到其他目录(默认安装到系统盘)

  • 导出到tar包wsl --export Ubuntu-20.04 d:\20.04.tar
  • 导入到其他位置wsl --import myubuntu d:\wsl\ubuntu20 d:\20.04.tar
  • 指定启动新的系统wsl -d myubuntu此时将以root用户启动,指定用户wsl -d myubuntu --user geb
  • 将新的系统设置为默认启动wsl --set-default myubuntu

参考wsl --help介绍各个命令的作用。

PS:可以在conEmu命令行启动,交互页面更友好一些;在linux下可以尝试使用下fish shell

PS C:\Users\joechin> dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

部署映像服务和管理工具
版本: 10.0.19041.844

映像版本: 10.0.19043.1023

启用一个或多个功能
[==========================100.0%==========================]
操作成功完成。
PS C:\Users\joechin> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

部署映像服务和管理工具
版本: 10.0.19041.844

映像版本: 10.0.19043.1023

启用一个或多个功能
[==========================100.0%==========================]
操作成功完成。
PS C:\Users\joechin>

可以使用相同的逻辑转移默认的docker desktop data信息change the location of docker images

# 确保wsl关闭 
wsl  --shutdown
#查看所有的wsl
wsl --list -v

# 导出docker-desktop-data
wsl --export docker-desktop-data "D:\docker-desktop-data.tar"
# 取消注册
wsl --unregister docker-desktop-data
#重新导入
wsl --import docker-desktop-data "D:\wsl\docker-data" "D:\docker-desktop-data.tar" --version 2

转移chrome的user data数据

清理C盘的另外一个动作——

  • 修改android sdk位置(将C盘的文件移到D盘并修改环境变量) 11GB+
  • 修改go build的地址(修改GOCACHE的env值) 700MB+
  • 移动docker-desktop-data的值,见上。 11GB
  • 修改chrome的user data值 3GB+
  • 清理jetbrain应用 C:\Users\{username}\AppData\Local\JetBrains 10GB+

终极方案,修改注册表信息 ——这个注册项在win 10下好像找不到了- -|| HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER\Software\Policies\Google\Chrome\UserDataDir

使用快捷方式

# 检查chrome的各项环境
chrome://version/

# 启动chrome时指定user data目录
chrome.exe  –user-data-dir="D:\AppData\Chrome"

# 使用admin进入chrome用户目录
cd  C:\Users\{username}\AppData\Local\Google\Chrome\User Data

# 为 user data目录创建连接 mklink --help查看帮助
mklink /J "C:\Users\{username}\AppData\Local\Google\Chrome\User Data" "d:\chrome\User Data"
mklink /D "User Data" "d:\AppData\chrome\UserData"

启动命令指定

插件Remote-WSL登录问题

wsl: allow to run with a non-default user 看起来目前无法做到使用“非默认用户root”登录的要求。官方文档所谓“specific settings”指的时连接到wsl之后针对编辑器、命令行等工具的配置。

WSL2 starting as root when starting with wsl.exeImpossible to set default user of distribution installed via wsl –import on 1903这两个是针对wsl本身的,命令行指定用户没有问题。wsl -u username -d ubuntu20这样就可以。根据上面这个issue中的方案,验证可行——添加/etc/wsl.conf配置项,指定登录用户即可

# /etc/wsl.conf
[user]
default=username

断电重启后自动修复失败

异常断电,重新供电后,系统自动加电。但此时系统无法正常启动,需要长按电源键关机。然后重新开机——之前这样操作之后,系统可以正常启动。

昨天遇到的新场景是:重新启动后,进入“自动修复”提示,然后提示“无法正常启动”。提供了两个选项,blabla之类的。高级选项里再次重启或再次修复——还是无法正常启动。拆开机箱,重新插拔一下接口、内存条之类的也不好使(基本都是碰运气的操作- -|)

win10自动修复失败无法开机官方论坛里这个方法可行:

开机进入系统时长按电源键强制关机,然后再次开机。重复上面的步骤 3 次,再开机会进入高级恢复界面。

点击 “疑难解答” 选项,接着点击 “高级选项”,点击 “启动设置”,点击 “重启”,选择安全模式。如果可以进入安全模式

关键操作:进入安全模式启动一次。(可以正常启动,安全模式下系统无法链接网络)

问题是异常断电导致的,所以在安全模式下也不需要做任何操作。选择“重启”。恢复正常。

PS:晚上没关机,第二天看起来又自动重启了? 通过“任务管理器”–“性能”:可以看到系统运行时间。或者在命令行执行wmic path Win32_OperatingSystem get LastBootUpTime查看上次启动时间。

回收站

不通过快捷图标,两种直接进入回收站方式

  • 可以“win+e”,地址栏输入“回收站”回车即可
  • “WIN+R”打开运行窗口,执行explorer.exe ::{645FF040-5081-101B-9F08-00AA002F954E}

Goland 试用 (2022年1月3购买正版授权)

恢复试用IntelliJ IDEA介绍了idea的恢复,Goland作为同一家产品适用相同的逻辑

reg.exe query "HKCU\SOFTWARE\JavaSoft\Prefs\jetbrains\goland\99999999\evlsprt3" /v "202" 通过regedit查到当前goland的注册版本。

关键的三步:(在目录%APPDATA%\JetBrains下操作)

  • 删除过期后产生的注册键evlsprt, evlsprt2
  • 依次删除对应的目录和文件,包括 GoLand2020.3/eval目录;PermanentDeviceId, PermanentDeviceIdblcrl(后两个文件如果存在)
  • 编辑GoLand2020.3/options下的other.xml文件,删除第一步中注册表中对应键的记录

注意事项:
第一,如果使用过多个版本,找对注册表对应的值;或者删除goland注册表
第二,重新生效后记录other.xml的信息,对比试用过期后的变化
第三,猜测逻辑:第一次启动时,获取生成PermanentDeviceId, PermanentDeviceId(确保唯一性);过期后通过other.xml中记录的参数进行检查

Goland 链接数据库

同一个数据库,在IntelliJIdea2021.1里连接可以正常连接成功;在GoLand2021.1里连接提示如下问题(似乎是升级之前可以连接成功)

[08S01]
	Communications link failure

	The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate).

根据提示,应该是下面四种问题之一—— No appropriate protocol

  • The TLS implementation used by the client does not support the cipher suites used by the server’s certificate.
  • The TLS configuration on the server has disabled cipher suites supported by the client.
  • The TLS configurations on the client disable cipher suites offered by the server.
  • TLS version incompatibility between the client and server.

javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

根据环境条件,看起来是Goland这个版本的问题,下搁置一下。官方也有类似的issue在跟踪: Can’t connect to remote MySQL since last version of IntelliJ

仔细看下上面的issue跟踪,包含了解决方法:

如果MySql版本为8.0, 5.7.28, 5.6.46和以上版本,如果服务端启用了TLSv1.2配置,则可以在链接属性data source properties的高级设置中设置enabledTLSprotocols的值为TLSv1,TLSv1.1,TLSv1.2,TLSv1.3(默认这个链接值为空)

If you are running MySQL 8.0, 5.7.28, 5.6.46 and later and your server is configured with TLSv1.2 you can enabled it in driver: open up data source properties, switch to Advanced tab and set value for enabledTLSprotocols to TLSv1,TLSv1.1,TLSv1.2,TLSv1.3

另外一个解决方法思路相同,只不过是通过配置文件的方式进行配置——

Workaround #1

We’ve updated java recently and we’ve moved to TLSv1 to the jdk.tls.disabledAlgorithms due to security reasons. So to get it back you need to do the following:

  1. Create a file custom.java.security with the following contents:
jdk.tls.disabledAlgorithms=SSLv3, TLSv1.1, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
    include jdk.disabled.namedCurves

I removed TLSv1 from the list.

  1. Go to you data source Advanced tab and add to VM Options: -Djava.security.properties=${PATH_TO_FILE?}/custom.java.security. Don’t forget to replace ${PATH_TO_FILE?}.

  2. You can connect.

win 10 锁屏不断网

Windows 10 如何在锁屏状态下保持网络连接?

怎么设置win10锁屏 不断网

关键是将网卡的对应设置:“允许计算机关闭此设备以节约电源” 取消勾选。无线/有线网卡找到对应的网卡驱动——

设备管理器:

  • 无线网卡: 右击-属性-电源管理
  • 有线网卡:右击-属性-配置-电源管理

an attempt was made to access a socket in a way forbidden by its access permissions

看起来docker-for-win的副作用太大了

开发时监控2020端口时,应用提示试图打开一个禁止的socket端口。

相同问题,(解决方案](https://github.com/docker/for-win/issues/3171#issuecomment-459205576)

  • netstat -ano检查此端口没有被使用
  • Get-NetTCPConnection |findstr在powershell中也没发现此端口没占用
  • Even if I disconnect from the internet and disable both windows firewall and my antivirus, and run everything as admin, I still get the errors.

还好我先google而不是先执行第三步操作。原因是windows默认排除了这些端口范围——

执行netsh interface ipv4 show excludedportrange protocol=tcp

D:\>netsh interface ipv4 show excludedportrange protocol=tcp

协议 tcp 端口排除范围

开始端口    结束端口
----------    --------
      1615        1714
      1715        1814
      1915        2014
      2015        2114
      7275        7374
     50000       50059     *

* - 管理的端口排除。

所以快捷解决方式就是不使用以上范围内的端口。

根本的解决方法如下。原因是 Docker for Windows and Hyper-V are responsible for all of those excluded port ranges above.

  • Disable hyper-v (which will required a couple of restarts)

dism.exe /Online /Disable-Feature:Microsoft-Hyper-V

  • When you finish all the required restarts, reserve the port you want so hyper-v doesn’t reserve it back

netsh int ipv4 add excludedportrange protocol=tcp startport=50051 numberofports=1

  • Re-Enable hyper-V (which will require a couple of restart)

dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

python命令打开了windows store

CMD opens window store when I type python

在 系统 –> 应用 – 应用别名里关闭 对应的“启动快捷键” python.exepython3.exe for App Installler

python2 和python3 同时存在的情况下,将对应的目录添加到环境变量,然后修改其中一个exe启动文件的名称即可。

youtube-dl

github ytdl-org/youtube-dl, usage

How to download Youtube videos on Windows with youtube-dl and start using the command line

  • 安装 pip install --upgrade youtube-dl
  • 下载youtube-dl -F https://www.youtube.com/watch?v=x0uinJvhNxI 列出所有可选择的格式
  • 实际执行下载youtube-dl -f 136 https://www.youtube.com/watch?v=x0uinJvhNxI下载选择的对应文件到本地(执行命令的目录)
  • 默认支持断点续传

注意列表中的格式,有些是只有视频没有音频的文件。

youtube-dl -f bestvideo+bestaudio https://www.youtube.com/watch?v=x0uinJvhNxI 报错:

You have requested multiple formats but ffmpeg or avconv are not installed. The formats won't be merged.

这个命令需要本地安装有ffmpeg或avconv(用来自动将音视频合成),可以从这里下载ffmpeg的zip包,解压后将bin目录添加到环境变量。

# check list
# youtube-dl -F https://www.youtube.com/watch?v=x0uinJvhNxI
[youtube] x0uinJvhNxI: Downloading webpage
[info] Available formats for x0uinJvhNxI:
format code  extension  resolution note
249          webm       audio only tiny   63k , opus @ 50k (48000Hz), 123.69MiB
250          webm       audio only tiny   75k , opus @ 70k (48000Hz), 154.79MiB
251          webm       audio only tiny  130k , opus @160k (48000Hz), 275.97MiB
140          m4a        audio only tiny  150k , m4a_dash container, mp4a.40.2@128k (44100Hz), 319.05MiB
160          mp4        256x144    144p  118k , avc1.4d400c, 30fps, video only, 30.87MiB
278          webm       256x144    144p  205k , webm container, vp9, 30fps, video only, 68.27MiB
242          webm       426x240    240p  262k , vp9, 30fps, video only, 92.25MiB
133          mp4        426x240    240p  271k , avc1.4d4015, 30fps, video only, 52.00MiB
243          webm       640x360    360p  432k , vp9, 30fps, video only, 172.66MiB
134          mp4        640x360    360p  680k , avc1.4d401e, 30fps, video only, 106.63MiB
244          webm       854x480    480p  736k , vp9, 30fps, video only, 267.36MiB
135          mp4        854x480    480p 1241k , avc1.4d401f, 30fps, video only, 176.36MiB
247          webm       1280x720   720p 1284k , vp9, 30fps, video only, 497.02MiB
136          mp4        1280x720   720p 1871k , avc1.4d401f, 30fps, video only, 290.41MiB
248          webm       1920x1080  1080p 2332k , vp9, 30fps, video only, 872.66MiB
137          mp4        1920x1080  1080p 3200k , avc1.640028, 30fps, video only, 453.62MiB
22           mp4        1280x720   720p  246k , avc1.64001F, 30fps, mp4a.40.2@192k (44100Hz)
18           mp4        640x360    360p  262k , avc1.42001E, 30fps, mp4a.40.2@ 96k (44100Hz), 647.47MiB (best)

# actual downlaod 
youtube-dl -f bestvideo+bestaudio https://www.youtube.com/watch?v=x0uinJvhNxI
[youtube] x0uinJvhNxI: Downloading webpage
[download] Resuming download at byte 337521534
[download] Destination: Flutter Crash Course for Beginners 2020 - Build a Flutter App with Google's Flutter & Dart-x0uinJvhNxI.f137.mp4
[download] 100% of 453.62MiB in 02:08
[download] Destination: Flutter Crash Course for Beginners 2020 - Build a Flutter App with Google's Flutter & Dart-x0uinJvhNxI.f140.m4a
[download] 100% of 319.05MiB in 05:08
[ffmpeg] Merging formats into "Flutter Crash Course for Beginners 2020 - Build a Flutter App with Google's Flutter & Dart-x0uinJvhNxI.mp4"
Deleting original file Flutter Crash Course for Beginners 2020 - Build a Flutter App with Google's Flutter & Dart-x0uinJvhNxI.f137.mp4 (pass -k to keep)
Deleting original file Flutter Crash Course for Beginners 2020 - Build a Flutter App with Google's Flutter & Dart-x0uinJvhNxI.f140.m4a (pass -k to keep)

ffmpeg create video

七年前在饭否记录了一颗树的四季

一行命令>ffmpeg -r 5 -i E:\00D\qishimg\%3d.jpg -c:v libx264 E:\00D\images.mp4 命令说明wiki

效果展示

  • 当时打了tag#气树#,搜索"我的",点击更多,直到全部加载完成(可以使用GoFullPage插件将此时的页面截取下来,见最后)
  • 使用Selenium写脚本(配合自动等待+手动执行上一步)将数据获取回来
  • 解析,获取到格式化数据,将所有的图片下载下来并按照顺序保存为 001.jpg,002.jpg,003.jpg……
  • 执行ffmpeg -f image2 -i E:\00D\%3d.jpg E:\00E\imagestovideo.mp4 使用默认的配置生成视频。

工具推荐youtube-dl里提到安装ffmpeg工具。

GoFullPage截取的图片为浏览器宽度的图片,使用BufferedImage croppedImage = originalImage.getSubimage(x, y, width, height);截取保存需要的图片。

Mac PC远程访问Window PC

Bose耳机蓝牙连接Mac电脑

bose qc35 如何连接

    1. 手机上下载APP"Bose Connect"
    1. 打开耳机,用APP连接手机和耳机
    1. 打开APP,点里面左下角那个蓝牙符号,然后选择"连接新设备"
    1. 在Mac的偏好设置的蓝牙里,就可以找到耳机了,连接即可用

Eclipse报错SWTError: No more handles

调研Jacoco,尝试用Eclipse打开源码——平时使用IDEA——Eclipse启动失败,log中提示Caused by: org.eclipse.swt.SWTError: No more handles

!ENTRY org.eclipse.osgi 4 0 2020-07-15 16:12:47.033
!MESSAGE Application error
!STACK 1
org.eclipse.swt.SWTException: Failed to execute runnable (org.eclipse.swt.SWTError: No more handles)
	at org.eclipse.swt.SWT.error(SWT.java:4723)
	at org.eclipse.swt.SWT.error(SWT.java:4638)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:188)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3897)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3527)
	at org.eclipse.swt.widgets.Display.release(Display.java:3579)
	at org.eclipse.swt.graphics.Device.dispose(Device.java:276)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:166)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:657)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:594)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1447)
Caused by: org.eclipse.swt.SWTError: No more handles
	at org.eclipse.swt.SWT.error(SWT.java:4749)
	at org.eclipse.swt.SWT.error(SWT.java:4638)
	at org.eclipse.swt.SWT.error(SWT.java:4609)
	at org.eclipse.swt.widgets.Widget.error(Widget.java:432)
	at org.eclipse.swt.widgets.Control.internal_new_GC(Control.java:1771)
	at org.eclipse.swt.graphics.GC.<init>(GC.java:171)
	at org.eclipse.swt.graphics.GC.<init>(GC.java:135)
	at org.eclipse.swt.custom.CTabFolder.updateTabHeight(CTabFolder.java:3838)
	at org.eclipse.swt.custom.CTabFolder.runUpdate(CTabFolder.java:3871)
	at org.eclipse.swt.custom.CTabFolder.lambda$3(CTabFolder.java:3861)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
	... 17 more

You may be creating resources (such as Font, Image or GC objects) that you aren’t correctly disposing.——这个解释看起来靠谱。

官方这个issue的comment有建议修改注册表:

I was able to workaround it temporarily until they fix this blocker with setting registry entry HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\GDIProcessHandleQuota to some huge number like 50000 on Windows10

准备按照这个提示操作。本机默认值为 2710

What is the cause of the “org.eclipse.swt.SWTError: No more handles” occurring in Process Designer

这里提到出现问题的原因可能是GDI对象过多。https://blogs.solidworks.com/tech/2017/05/warning-solidworks-resources-running-low.html

Windows 8 and later, the system wide GDI Objects are limited to max out at 65,536; and the maximum single process is 16,384.
最多的GDI对象为65536个(2的16次方),单个进程最多16384个
The default limit set by Windows for any single process is 10,000 GDI objects. If your application GDI Objects exceeds this amount, that process is likely to crash.
默认的单进程GDI对象为10000个,如果超出,则可能崩溃

打开任务管理器,在详细信息栏的表头右键进行选择列,在弹出窗口里可以看到GDI对象用户对象的列名。

  • Open Task Manager (right click on start bar > Task Manager OR through CTRL+ALT+DEL)
  • Click on ‘Details’ Tab
  • Right click on one of the columns and click on ‘Select Columns’
  • Tick the GDI objects

注意Eclipse中打开的项目的报错信息,即使处理错误信息。我只是清理了错误日志,重新打开Eclipse又OK了。另外,重启大法也好使。

禁止升级

禁止Win 10自动更新

Disable Windows 10 Update in Every Way

stop automatic updates on Windows 10

  • HKEY_LOCAL_MACHINE/SOFTWARE/Policies/Microsoft/Windows/WindowsUpdate “WindowsUpdate"可以手动创建
  • 在WindowsUpdate下新建Key AU
  • 新建一个 DWORD (32-bit)类型的值,名称为AUOptions,选择16进制值,设置为2
2 — Notify for download and auto install.
3 — Auto download and notify for install.
4 — Auto download and schedule the install.
5 — Allow local admin to choose settings.

多桌面+分屏

类似Mac上的三指滑动切换工作桌面的效果。

  • 默认左下角的任务视图点击后,最上方可以新建桌面

  • 使用Win + Ctl + 左右方向键切换不同的桌面

  • 按住鼠标左键拖动某个窗口到屏幕左边缘或右边缘

  • 直到鼠标指针接触屏幕边缘,会显示一个虚化的大小为二分之一屏的半透明背景

  • 松开鼠标左键,当前窗口就会二分之一屏显示,同时其他窗口会在另半侧屏幕显示缩略窗口

三屏、四屏相同操作。鼠标拖拽到边缘,触发半透明背景展示的大小(二分之一、四分之一)

ConEmu

在新tab页面批量执行不同的任务。official doc

ConEmu默契启动后在 C:\Users\userName目录,可以将不同的执行脚本保存在当前目录下。例如:启动hugo、启动jekyll等

  • 启动hugo脚本 startHugoSite.bat
#启动hugo站点
D:
cd  D:/openSources/site/hugositefolder
hugo server --watch --verbose --buildDrafts
  • 启动jekyll脚本 startJekyllSite.bat
# 启动jekyll站点
D:
cd  D:/openSources/site/jekyllsitefolder
bundle exec jekyll serve
  • 启动桌面应用脚本startDesktop.bat
#启动桌面应用
D:
cd D:\openSources\site\desktop-app
yarn electron:serve
  • 其他上述脚本的脚本 startAll.bat
@echo off 
echo start trio
# https://superuser.com/a/593648
start "trio" "D:\tools\conEmu\ConEmu64.exe" /cmdlist ^> cmd /k startHugoSite.bat ^|^|^| cmd /k startJekyllSite.bat ^|^|^| cmd /k startDesktop.bat
echo finish jobs.

上述命令会新启动一个ConEmu窗口并在其中打开三个tab页面,分别执行三个启动脚本。强迫症如我,就主动退出当前窗口。使用新创建的window了。

bat脚本内容:start "c" cmd /k call b.bat中:

  • “trio”是一段字符串,代表新打开的cmd窗口的名字,可以随便起名。
  • /k是表示新打开的cmd窗口在执行完命令后保存打开状态,如果希望执行完就关闭窗口就使用/c

如果在当前脚本环境中执行,可直接使用call目录:

  • call b.bat表示call命令,即调用b.bat文件;该命令可以用”“括起来,即:”call b.bat”

Word里替换换行符

查找^p替换 为空字符串即可。 在线图片OCR识别准确率非常高,保留了图片的宽度,导致文本自动在固定宽度就换行了。

软回车(垂直向下的箭头)为^l^p称为硬回车(向下再左转的箭头)。

设置命令行代理

Command line to remove an environment variable from the OS level configuration

Echo a blank (empty) line to the console from a Windows batch file

# 持续到cmd窗口关闭,非 系统环境变量
set http_proxy=http://127.0.0.1:1189
set https_proxy=http://127.0.0.1:1189

# 删除此变量的值。只需要在等号后不设置值即可。
set http_proxy=

# echo a new empty line
echo[
echo(
echo. 

命令行查看MD5值

certutil -hashfile xxx MD5
certutil -hashfile xxx SHA1
certutil -hashfile xxx SHA256

outlook证书弹出提示

  • 查看证书;
  • 选择安装证书;
  • 选择自定义的存储区;
  • 选择"受信任的根证书颁发机构”

(因为自定义的证书通常没有其他证书的签名,所以需要接受为“根证书”)

修改用户名

How to Change Your Account Name in Windows 10 How to Find Security Identifier (SID) of User in Windows Security identifiers official doc

查看SID值:使用管理员打开cmd目录,执行wmic useraccount会展示所有用户的列表信息

PS D:\> whoami /user

用户信息
----------------

用户名           SID
================ ==============================================
gebitang\joechin S-1-5-21-3801529287-1954174758-2671260994-1001
PS D:\>

基本流程:

  1. 新建一个管理员账号并使用这个账号登陆
  2. 修改原用户的名称
  3. 修改注册码regedit 修改HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Profilelist 下原用户名的security identifier (SID)的ProfileImagePath的值。
  4. 重启切换到原用户登陆

上面的操作可以实际修改了用户名,但在系统设置–>环境变量中的UI显示还是修改之前的名称。可以使用netplwiz修改显示的用户名

Press Windows key + R, type: netplwiz or control userpasswords2 then hit Enter. Select the account then click Properties.

win10 鼠标一直显示转圈

windows 10 鼠标光标经常出现蓝色转圈

通常为有应用一直在占用资源。我遇到的是 小米wifi网口一直未启动导致的(拔掉小米wifi后恢复正常),在设备管理器–>网络适配器中的adapter有个向下的箭头,右键可以选择启用设备。启用设备后,转圈提示消失。

系统自检wifi热点(需要无线网卡支持)

推荐使用小米wifi:即可以提供wifi热点给其他设备使用;又可以作为无线网卡连接其他wifi上网。

#0. 使用管理员权限运行cmd命令行
#1. 检查是否包含无线网卡 (没有无线网卡的就不可用)
netsh wlan show driver

接口名称: WLAN

    驱动程序                  : Broadcom BCM943228HMB 802.11abgn 2x2 Wi-Fi Adapter
    供应商                    : Broadcom
    提供程序                  : Broadcom
    日期                      : 2014/6/9
    版本                      : 6.30.223.245
    INF 文件                  : C:\windows\INF\oem46.inf
    文件                      : 4 total
                                C:\windows\system32\DRIVERS\BCMWL63a.SYS
                                C:\windows\system32\bcmihvsrv64.dll
                                C:\windows\system32\bcmihvui64.dll
                                C:\windows\system32\drivers\vwifibus.sys
    类型                      : 本机 WLAN 驱动程序
    支持的无线电类型          : 802.11n 802.11a 802.11g 802.11b
    支持 FIPS 140-2 模式: 是
    支持 802.11w 管理帧保护 : 是
    支持的承载网络  : 是
    基础结构模式中支持的身份验证和密码:
                                开放式             无
                                开放式             WEP
                                WPA2 - 企业       TKIP
                                WPA2 - 个人       TKIP
                                WPA2 - 企业       CCMP
                                WPA2 - 个人       CCMP
                                供应商定义的          供应商定义的
                                供应商定义的          供应商定义的
                                WPA - 企业        TKIP
                                WPA - 个人        TKIP
                                WPA - 企业        CCMP
                                WPA - 个人        CCMP
    临时模式中支持的身份验证和密码:
                                WPA2 - 个人       CCMP
                                开放式             无
                                开放式             WEP
    是否存在 IHV 服务         : 是
    IHV 适配器 OUI            : [00 10 18],类型: [00]
    IHV 扩展 DLL 路径         : C:\windows\System32\bcmihvsrv64.dll
    IHV UI 扩展 ClSID         : {aaa6dee9-31b9-4f18-ab39-82ef9b06eb73}
    IHV 诊断 CLSID            : {00000000-0000-0000-0000-000000000000}

#2. 创建无线热点 网络连接中会多出一个网卡“Microsoft Virtual WiFi Miniport Adapter”
# mode:是否启用虚拟WIFI网卡,改为disallow则为禁用。
# ssid:无线网名称,最好用英文(以cai为例)。
# key:无线网密码,
netsh set hostednetwork mode=allow ssid=nameOfwifi key=pwdForssid
承载网络模式已设置为允许。
已成功更改承载网络的 SSID。
已成功更改托管网络的用户密钥密码。

 
#3. 启动/停止此连接 netsh wlan start/stop hostednetwork
C:\windows\system32>netsh wlan start hostednetwork
已启动承载网络。

#4. 设置本地的有线连接为共享模式
在“网络连接”窗口中,右键单击已连接到Internet的网络连接,
选择“属性”→“共享”,勾上“允许其他······连接(N)”并选择新创建的wifi连接点

netsh wlan set hostednetwork mode=allow ssid=cai key=12345678

开机自启动

#1. 编辑注册表 Ctrl+R --> regedit 
计算机\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run

#2. 右键新建 "字符串"" 类型,自定义名字
#3. 知道该名称的数据值,即要启动应用的全目录,如 F:\Tools\ss\Shadowsocks.exe

# win10环境可以直接启动powershell类型脚本。
# a). 新建脚本保存为.ps1的后缀; b). 修改默认打开应用,选择 powershell
#(默认路径在 %SystemRoot%\system32\WindowsPowerShell\v1.0\powershell.exe)
# 即 %HOMEDRIVE%%HOMEPATH% = C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe

关闭skype自启动

How to stop Skype from starting automatically when booting Windows 10?

不是普通的win32应用,在上面的启动注册表中看不到,需要到主页-->应用-->启动中进行关闭

获取时间戳

获取系统日期、时间戳记 get current time in windows command line

格式: %date:~x,y%以及%time:~x,y% 说明: x是开始位置,y是取得字符数

# 获取完整的日期和时间, 
格式: %date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2% 
结果: 20180316175313 

bat 执行多条命令

命令1 & 命令2 & 命令3 … (无论前面命令是否故障,照样执行后面)
命令1 && 命令2 &&命令3… (仅当前面命令成功时,才执行后面)
命令1 || 命令2 || 命令3… (仅当前面命令失败时.才执行后面)

rem cmd /k 表示cmd后面的命令执行完后不关闭窗口。如果要在执行完成后关闭窗口可以用 /c 
@echo off
start cmd /k "echo the first window&& d:&& cd D:\\XXX"
start cmd /k "echo the second window&& d:&& cd D:\\XXX"
start cmd /k "echo the third window&& d:&& cd D:\\XXX"
pause

bat注释

bat 的注释方法

在批处理中,段注释有一种比较常用的方法:

 goto start
  = 可以是多行文本,可以是命令
  = 可以包含重定向符号和其他特殊字符
  = 只要不包含 :start 这一行,就都是注释
 :start

这样会跳过之间的三行,也就相当于注释

另外,还有其他各种注释形式,比如:

  1. :: 注释内容(第一个冒号后也可以跟任何一个非字母数字的字符)
  2. rem 注释内容(不能出现重定向符号和管道符号)
  3. echo 注释内容(不能出现重定向符号和管道符号)〉nul
  4. if not exist nul 注释内容(不能出现重定向符号和管道符号)
  5. :注释内容(注释文本不能与已有标签重名)
  6. %注释内容%(可以用作行间注释,不能出现重定向符号和管道符号)
  7. goto 标签 注释内容(可以用作说明goto的条件和执行内容)
  8. :标签 注释内容(可以用作标签下方段的执行内容)

CMD重定向

cmd命令的重定向输出

# 2>&1
java -Dshow.debug.info=true -jar ./App.jar >> log-%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.txt 2>&1

PowerShell 执行 mvn -D 参数问题

在Powershell环境下执行类似 mvn clean package assembly:assembly -Dmaven.test.skip=true命令时,参数会被截断,导致提示 test.skip不识别的错误。

参考 需要把最后的参数使用单引号: mvn clean package assembly:assembly '-Dmaven.test.skip=true'

杀死进程

#命令行杀死进程
#查看进程 
tasklist
   
#杀死进程 查看帮助 taskkill /?
taskkill /PID 11112
# 强制kill
taskkill /F /PID 4684
taskkill /IM notepad.exe

bat目录提示‘此处不该有xxx’

@echo off
set port=%1
set EXISTS_FLAG=false
for /f "tokens=2" %%i in ('netstat -ano ^|findstr ":%port%"') do echo %%i|findstr /E ":%port%" && set EXISTS_FLAG=true && exit

for/f中的命令如果有特殊字符需要加转义字符^,您的批处理改成这样就行了。

提高CMD显示行数

修改属性、布局、屏幕缓冲区大小、高度。

如果命令行输出被截断,进行重定向吧:(

mode命令显示当前窗口设置状态

F:\>mode

设备状态 CON:
---------
    行:        3000
    列:       80
    键盘速度:   31
    键盘延迟:  1
    代码页:     936

窗口保护色 #c7edcc

在线RGB取色器

修改窗口背景颜色为护眼颜色,需要重启生效。

202 234 206 #caeace
199 237 204 #c7edcc

# HKEY_CURRENT_USER\Control Panel\Colors\下的Window的值默认为255 255 255(白色), 设置为199 237 204(浅绿)
# HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\DefaultColors\Standard下的Window的数值默认 ffffff,修改为

CMD here for win10

How to return the ‘Open command window here’ option to Windows 10’s context menu这个链接操作了半天还是不好使。直接修改注册表吧,不能迷信外语资料:)

报错下面的内容到文本文件,重命名为.reg,双击执行即可。

说明:修改不同的注册表值。

给以下注册表添加了新内容: [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell] 增加一个条目cmd_here:指定名称、icon和执行的命令

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell] 增加一个条目cmdPrompt:指定名称、icon和执行的命令

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell] 增加一个条目cmd_here:指定名称、icon和执行的命令

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\cmd_here]
@="cmd here"
"Icon"="cmd.exe"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\cmd_here\command]
@="\"C:\\Windows\\System32\\cmd.exe\""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\cmdPrompt]
@="cmd here"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\cmdPrompt\command]
@="\"C:\\Windows\\System32\\cmd.exe\" \"cd %1\""
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\cmd_here]
@="cmd here"
"Icon"="cmd.exe"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\cmd_here\command]
@="\"C:\\Windows\\System32\\cmd.exe\""

Notepad++ 插件管理

默认的安装是不带PluginManager的,官方下载,指向到github地址。 32为的选择后缀为UNI的,下载解压到对应的安装目录plugin、update文件夹下。

通常用的三个插件:compare、JSON Viewer、XML tools。通过PM安装、重启即可。

离线安装插件

高版本(v8.4.5)上已经自带PluginManager,下载对应的plugin:通常为 .dll 文件。在plugin文件夹下创建同名的文件夹名称,保存对应的 .dll 文件。重启应用即可

JSToolNpp

经纬度查询告别百度

基本告别百度了。搜索“经纬度查询”,第一页没看到可用的信息。

搜索 search map by, 自动提示选择有 latitude and longitude 然后第一个答案就是官方的支持内容。

更简单的是直接在map的搜索框里输入经纬度值即可。支持三种数值格式。

手机自带的指南针应用提供的正好是第一种格式,类似39°57'26"N 116°30'19"E


18539

Enter coordinates to find a place

  1. On your computer, open Google Maps.
  2. In the search box at the top, type your coordinates. Here are examples of formats that work:
    • Degrees, minutes, and seconds (DMS): 41°42'04.0"N 86°44'29.0"E
    • Degrees and decimal minutes (DMM): 41 24.2028, 2 10.4418
    • Decimal degrees (DD): 41.701111, 86.741389
  3. You’ll see a pin show up at your coordinates.

Get the coordinates of a place

  1. On your computer, open Google Maps. If you’re using Maps in Lite mode, you’ll see a lightning bolt at the bottom and you won’t be able to get the coordinates of a place.
  2. Right-click the place or area on the map.
  3. Select What’s here?
  4. At the bottom, you’ll see a card with the coordinates.

Tips for formatting your coordinates

Here are some tips for formatting your coordinates so they work on Google Maps:

  • Use the degree symbol instead of “d”.
  • Use periods as decimals, not commas. Incorrect: 41,40338, 2,17403. Correct: 41.40338, 2.17403
  • List your latitude coordinates before longitude coordinates.
  • Check that the first number in your latitude coordinate is between -90 and 90.
  • Check that the first number in your longitude coordinate is between -180 and 180.

A记录查询

  • 使用API:nodes获取节点信息,可以看到节点host信息
  • 本地使用DIG命令查询命中的结果可能来自缓存服务器——在不同的机器上执行dig +short domain.com返回的结果不同
  • 依赖ipip.net/ip.html的服务查询ip的情况下是靠谱的,但如果直接查询域名,自动解析的结果也有出入(部分情况跟本地执行dig返回的结果相同,猜测可能使用的是后台机器的dig服务?)
  • 查询A服务的工具: toolbox from google apps,查询结果跟上面的匹配度更高,这个工具更权威一些
  • 使用ipinfo.io提供的免费查询服务,类似curl ipinfo.io/8.8.8.8/geo?token=$TOKEN接口返回城市经纬度信息(每月50000次调用足够),官方还提供各种语言的SDK服务Javago

make a DNS lookup:

Enter domain name (trailing dot will be auto-appended).
Lookup and enjoy the output.

从结果来看,后两个工具信息更准确。下一步可以着手自动化处理

 
comments powered by Disqus