因为经常需要写一些笔记, 所以常会新建一个文本文件或则代码文件.
未优化的步骤是:
初始状态: 双手在键盘, 此时想新建一个文件
1. 右手移动到鼠标处
2. 点击一下鼠标右键
3. 往下找到新建
4. 再找到次级菜单,文本文件
5. 右手再移回键盘
6. 重命名文件
一共有6步, 太繁琐了......
根据网上找到的教程, 我们改一下注册表, 新建文本文件的快捷键,可以优化部分操作
1. 右手移动到鼠标处
2. 按wt, 创建文本文件
3. 右手再移回键盘
4. 重命名文件
现在这样优化到了四个步骤, 但还是伴随着两个缺陷:
- 右手还是要移动到鼠标处(这个动作就让人感觉很不自然)
- 新建的只是txt文件, 最后一个重命名文件是无法避免的
嗯嗯, 还是感觉优化之后的步骤不满意. 我想要直接脱离鼠标, 直接使用键盘就可以完成这些操作. 不是感觉很美妙? 嗯嗯, 那思考一下我的需求:
1. 通过快捷键触发,直接新建文件
2. 重命名文件未我想要的
没错, 这个就是我想要的.
好, 接下来该怎么写这个程序呢? 程序应该是可以响应键盘的快捷键的, 也就是说有个死循环不断检测。。。。。这个就不太好了, 我每次还要把这个程序放在后台嘛~~~.
经过一系列的乱七八糟的想法之后, 最后决定这样做:
运行环境:
- window10
- python listary bat
流程就是, 通过listary来调用bat,bat来调用python.
嗯嗯, 好像比较合理.
程序应该是比较简单的. 好, 可以开始写了....
卧槽, 好像有点麻烦, 我怎么知道我要在哪里创建我的文件,我要捕获这个活动的窗口吧?
但是我在调用bat或则py的时候会有一个cmd窗口, 获取的窗口是这个cmd窗口吧.
那我可不可以获取Windows的窗口栈呢, 取倒数第二个, 不就是活动窗口嘛?
就和按Alt + Tab 键时一样的道理.... 嗯嗯, 想法很好, 但是Windows好像没有找到这个API,
怎么办?....
有了, 如果我要新建文件, 我的鼠标是移动到这个文本文件所有的文件浏览器上的, 我只要获取了
文件浏览器的caption就可以获取地址了.
所以 获取鼠标位置-> 获取窗口-> 获取caption
OK, 完美.
windows刚开始学习, 不是很熟悉, 刚好最近python缺练手的, 那就选python来解决这个需求了.
# -*- coding=utf-8 -*-
import win32gui
import win32com
import win32process
import win32api
import win32con
import os
import random
#=============================================
# 此程序用于在当前目录下创建一个文件
# 需要注意的是: 当前目录指的的光标所在的目录
#=============================================
hwnd = win32gui.WindowFromPoint(win32api.GetCursorPos())
cmdHwnd = None
# 如果获取的是命令行窗口, 则将该命令行窗口隐藏
SW_SHOW = 1 # 正常显示
SW_SHOWMAXIMIZED = 3 # 最大化显示, 并激活窗口
SW_MINIMIZE = 6 # 最小化显示窗口
if (win32gui.GetClassName(hwnd) == 'ConsoleWindowClass'):
print "222"
cmdHwnd = hwnd
win32gui.ShowWindow(cmdHwnd, SW_MINIMIZE)
hwnd = win32gui.WindowFromPoint(win32api.GetCursorPos()) # 重新获取一个
path = ""
while win32gui.GetParent(hwnd)!=0:
hwnd = win32gui.GetParent((hwnd))
def get_desktop():
key =win32api.RegOpenKey(win32con.HKEY_CURRENT_USER,r'SoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders',0,win32con.KEY_READ)
return win32api.RegQueryValueEx(key,'Desktop')[0]
if win32gui.GetClassName(hwnd) == 'CabinetWClass':
path = win32gui.GetWindowText(hwnd)
print "found root windows...can create file..."
print "path: " + path
elif win32gui.GetClassName(hwnd) == 'Progman':
print "click destop"
path = get_desktop()
else:
print win32gui.GetClassName(hwnd)
path = win32gui.GetWindowText(hwnd)
print "path: " + path
print "not found windows!"
exit(1)
# 读取用户行为
filename = path + "/test.txt"
print filename
if cmdHwnd:
print "111"
win32gui.ShowWindow(cmdHwnd, SW_SHOW) # 需要读取用户输入的时候, 再将命令行显示出来
sname = raw_input("请输入文件全名:")
print "log: " + sname
if sname != None and len(sname) != 0:
filename = path + "/" + sname
# 检测是否合法
while os.path.exists(filename):
prename = sname.split(".")
if len(prename)!=2 and len(prename[0]) != 0:
print "文件名不合法, 有多个.符号"
exit(1)
prename = prename[0]
filename = path + "/" + prename + str(random.randint(0,1000)) + ".txt"
#
if not os.path.exists(filename):
with open(filename,'w'):pass