from win32com.shell import shell, shellcon
import pythoncom, win32api, os, sys

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)
