1 (изменено: griha09, 2020-11-02 21:16:34)

Тема: VBS: SendKeys не вставляет текст

Работаю в Total Commander и периодически надо создавать txt-файл с названием файла под курсором. Для этого создал вот такой скрипт с вызовом через панель кнопок ТС:

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.SendKeys "{F2}" & "^{INSERT}" & "{Esc}" & "+{F4}" & "+{INSERT}" & "{RIGHT}" & ".txt" & "{Enter}" 
WScript.Sleep 500
WshShell.SendKeys "+{INSERT}" & "{Enter}"  & "{Enter}"  & "{F2}"

все работает, кроме вставки ".txt" 
Кто подскажет почему SendKeys не вставляет текст?

2

Re: VBS: SendKeys не вставляет текст

TC никогда не пользовался , — проверить, по крайней мере сейчас, не могу. Возможно, дело в текущей раскладке клавиатуры.
Попробуй добавлять «.txt» в буфер обмена или, вообще, получив текст из буфера обмена создавать файл уже без помощи SendKeys.

3

Re: VBS: SendKeys не вставляет текст

Оффтопиком: работайте в Far Manager:

Keys("ShiftF4 ShiftEnter CtrlBS")
print("txt")
Keys("Enter F2 Esc")

4

Re: VBS: SendKeys не вставляет текст

alexii пишет:

Оффтопиком: работайте в Far Manager:

ну это совсем уж OLD OLD OLD SCHOOL


сделал так:

Set WshShell = WScript.CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")

WshShell.SendKeys "{F2}" & "^{INSERT}" & "{Esc}"
clipboard = CreateObject("HTMLFile").parentWindow.clipboardData.getData("text")
file = clipboard & ".txt"
WshShell.SendKeys "+{F4}" & file & "{Enter}"
WScript.Sleep 500
WshShell.SendKeys "+{INSERT}" & "{Enter}"  & "{Enter}"  & "{F2}"

но эта зараза корректно работает только в ENG раскладке и только с ENG именами. Кирилицу просто не видит.

5 (изменено: griha09, 2020-11-04 00:59:37)

Re: VBS: SendKeys не вставляет текст

УРА!!! У меня получилось. Оказывается точку надо писать так "{.}"  Нормально видит кирилицу. Работает только в англ. раскладке, да и фиг с ним.

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.SendKeys "{F2}" & "^{INSERT}" & "{Esc}" & "+{F4}" & "+{INSERT}" & "{RIGHT}" & "{.}" &"txt" & "{Enter}" 
WScript.Sleep 500
WshShell.SendKeys "+{INSERT}" & "{Enter}"  & "{Enter}"  & "{F2}"

6 (изменено: alexii, 2020-11-04 01:16:32)

Re: VBS: SendKeys не вставляет текст

griha09 пишет:

ну это совсем уж OLD OLD OLD SCHOOL

Новая школа :

Macro {
	description = "Create text file with name under cursor";
	flags       = "";
	key         = "";
	area        = "Shell";
	condition   = "";

	action = function()
		local eFlags = far.Flags
		local iErrorMsgFlags = bit64.bor(0x00010000, 0x00000001)

		local sFile  = mf.fsplit(APanel.Current, 0x04) .. ".txt"

		if Panel.FExist(0, sFile) == 0 then
			editor.Editor(sFile, nil, 0, 0, -1, -1, bit64.bor(eFlags.EF_NONMODAL, eFlags.EF_CREATENEW, eFlags.EF_IMMEDIATERETURN))
			editor.SaveFile()
			editor.Quit()
		else
			mf.msgbox("File already exists", "\nFile [" .. sFile .. "] already exists\n\n", iErrorMsgFlags)
		end
	end;
}

7

Re: VBS: SendKeys не вставляет текст

Прошу прощения, в какой скрипт данный код оформить? VBS не воспринимает.

8 (изменено: alexii, 2020-11-04 12:49:30)

Re: VBS: SendKeys не вставляет текст

griha09, это скрипт на макроязыке Far Manager. Код нужно сохранить под любым именем с расширением .lua в каталог %AppData%\Far Manager\Profile\Macros\scripts в кодировке UTF-8/65001 с BOM, вписав в параметр «key         = "";» значение клавиш, нажатием которых данный макрос будет вызываться на исполнение, например, «key         = "CtrlAltF2";».