68 lines
1.9 KiB
Python
68 lines
1.9 KiB
Python
|
import os
|
||
|
import sys
|
||
|
|
||
|
import pythoncom
|
||
|
import win32api
|
||
|
from win32com.shell import shell, shellcon
|
||
|
|
||
|
temp_dir = win32api.GetTempPath()
|
||
|
linkname = win32api.GetTempFileName(temp_dir, "cmd")[0]
|
||
|
os.remove(linkname)
|
||
|
linkname += ".lnk"
|
||
|
print("Link name:", linkname)
|
||
|
ish = pythoncom.CoCreateInstance(
|
||
|
shell.CLSID_ShellLink, None, pythoncom.CLSCTX_INPROC_SERVER, shell.IID_IShellLink
|
||
|
)
|
||
|
ish.SetPath(os.environ["cOMSPEC"])
|
||
|
ish.SetWorkingDirectory(os.path.split(sys.executable)[0])
|
||
|
ish.SetDescription("shortcut made by python")
|
||
|
|
||
|
console_props = {
|
||
|
"Signature": shellcon.NT_CONSOLE_PROPS_SIG,
|
||
|
"InsertMode": True,
|
||
|
"FullScreen": False, ## True looks like "DOS Mode" from win98!
|
||
|
"FontFamily": 54,
|
||
|
"CursorSize": 75, ## pct of character size
|
||
|
"ScreenBufferSize": (152, 256),
|
||
|
"AutoPosition": False,
|
||
|
"FontSize": (4, 5),
|
||
|
"FaceName": "",
|
||
|
"HistoryBufferSize": 32,
|
||
|
"InputBufferSize": 0,
|
||
|
"QuickEdit": True,
|
||
|
"Font": 0, ## 0 should always be present, use win32console.GetNumberOfConsoleFonts() to find how many available
|
||
|
"FillAttribute": 7,
|
||
|
"PopupFillAttribute": 245,
|
||
|
"WindowSize": (128, 32),
|
||
|
"WindowOrigin": (0, 0),
|
||
|
"FontWeight": 400,
|
||
|
"HistoryNoDup": False,
|
||
|
"NumberOfHistoryBuffers": 32,
|
||
|
## ColorTable copied from a 'normal' console shortcut, with some obvious changes
|
||
|
## These do not appear to be documented. From experimentation, [0] is background, [7] is foreground text
|
||
|
"ColorTable": (
|
||
|
255,
|
||
|
8388608,
|
||
|
32768,
|
||
|
8421376,
|
||
|
128,
|
||
|
8388736,
|
||
|
32896,
|
||
|
12582912,
|
||
|
8421504,
|
||
|
16711680,
|
||
|
65280,
|
||
|
16776960,
|
||
|
255,
|
||
|
16711935,
|
||
|
65535,
|
||
|
16777215,
|
||
|
),
|
||
|
}
|
||
|
|
||
|
ishdl = ish.QueryInterface(shell.IID_IShellLinkDataList)
|
||
|
ishdl.AddDataBlock(console_props)
|
||
|
ipf = ish.QueryInterface(pythoncom.IID_IPersistFile)
|
||
|
ipf.Save(linkname, 1)
|
||
|
os.startfile(linkname)
|