Тема: AHK: текст с форматированием + без форматирования в clipboard
Здравствуйте, хочу иметь возможность сохранять полезный текст с интернета, для удобства последующего чтения было бы хорошо сохранять его с форматированием.
Так же часто сохраняю с английских сайтов, и для удобства поиска, хочу сохранять английскую и переведенную версии.
Проблема в том, что когда ввожу в Clipboard переменную с форматированным оригинальным текстом с сайта + переведенный не форматированный текст, то вместо форматированного оригинального текста получаю иероглиф 쀉 + переведенный не форматированный текст но каждое первое слово новой строки напечатано каким-то большим шрифтом.
Если в Clipboard только переменная с форматированным оригинальным текстом с сайта, то получаю нормальный форматированный текст.
В чем проблема? И как её можно решить?
Пример взят с сайта https://www.sustainweb.org/realbread/ascorbic_acid/#e300_function
Текст сохраняю
^s::
MouseGetPos,,, WinUMID
WinActivate, ahk_id %WinUMID%
WinGetActiveTitle, win
Clip := SubStr(win, 1, 195)
haystack := clip
needle := "[\?<>/\\\*""|:]"
replacement := "_"
;msgbox, % winc := RegExReplace(haystack, needle, replacement)
winc := RegExReplace(haystack, needle, replacement)
;name = %OutDir%\%winc% %OutNameNoExt%.%OutExtension%
;MsgBox, % clipboard "`n" t
;FileAppend, %t%, test.rtf
clipb := Clipboardall
;sleep, 4000
;MsgBox, % Clipboard
;b := Clipboard
Clipboard=
loop,30
{
sleep,10
} until !Clipboard
Clipboard := clipb "`n" t
loop,700
{
sleep,10
} until Clipboard
;Sleep, 5000
;{
;MsgBox, % Clipboard
saveAsWordDoc("C:\staff\screentextshot" "\" winc ".docx")
saveAsWordDoc(fileName) {
;Sleep, 5000
;MsgBox, % Clipboard
static _ := ComObjMissing()
wd := ComObjCreate("Word.Application"), doc := wd.Documents.Add(_,_,_,0)
, doc.Content.Paste() , doc.SaveAs(fileName), doc.Close(), wd.Quit()
;MsgBox, % Clipboard
;}
}
Clipboard := t
return
Код всего скрипта.
#singleinstance force
;SetKeyDelay,0
;SetWinDelay,2000
~lButton & RButton::
global xbut := 0
translate()
return
translate()
{
;ToolTip, xb %xbut%
;Gui +LastFound
;KeyWait, lButton , u
if xbut = 0
{
;released := 0
;Loop {
; If (!getkeystate("lButton", "P") AND !getkeystate("RButton", "P"))
; {
; ToolTip, released = 1
; Sleep, 1000
; break
; }
; Sleep 10
;}
;sendinput,{rbutton up}
;}
;sleep, 100
;send,{rbutton up}
;send,{lbutton up}
global oCB := ClipboardAll ; save clipboard contents
Clipboard=
loop,30
{
sleep,10
} until !Clipboard
sendinput,{lbutton up}
sendinput,^{vk43}
loop,30
{
sleep,10
} until Clipboard
;ToolTip, %oCB% |||||||| clipboard
;Sleep, 2000
;Send, ^c
;ClipWait,1
;ToolTip, ctrl+c
}
;ToolTip, %clipboard%
;Send, ^c
if xbut = 0
{
var := clipboard
var1 := SubStr(var, 1, 5)
if RegExMatch(var1, "[a-zA-Z]")
global lang := "ru"
else
global lang := "en"
;ToolTip, xbut_o lang is %lang%
;Sleep, 1000
}
if xbut = 1
{
;ToolTip, lang is %lang%
if lang = ru
global lang := "en"
else
global lang := "ru"
;xbut := 0
gui, destroy
;Sleep, 1000
;ToolTip, lang is %lang%
global xbut := 0
}
;GoogleTranslate(Clipboard, "auto", "ru")
;MsgBox, %ClipboardAll% `n%clipboard%
global t
global str
;asd := Clipboard
t := GoogleTranslate(Clipboard, "auto", lang)
if !t
Loop, 5
{
Sleep, 1000
t := GoogleTranslate(Clipboard, "auto", lang)
;ToolTip, жду перевод
}
until if t
Gui +LastFound
Gui, Font, cFFFF00 s16 ;, Verdana
loop, parse, clipboard, `n, `r
max := a_index
;msgbox,Total Characters=%a%
;msgbox %max%
if max < 2
{
Loop, Parse, clipboard
a++
if a < 100
row := 1
if a > 100
row := 2
if a > 200
row := 2
if a > 300
row := 3
if a > 400
row := 4
if a > 500
row := 5
if a > 600
row := 6
if a > 700
row := 7
if a > 800
row := 8
if a > 900
row := 9
Gui, Font, cFFFF00 s16 ;, Verdana
Gui, Add, Edit, vstr -E0x200 r%row%, %t% `n
;ToolTip, 1 %t%
}
else
{
;ToolTip, 2 %t%
Gui, Font, cFFFF00 s16 ;, Verdana
Gui, Add, Edit, vstr -E0x200 , %t% `n
}
a :=
row :=
;sleep, 1000
;Gui, Font, cFFFF00 s16, Verdana
Gui, Color, 000000, 000000
Gui, Add, Text, x0 y0 0x9 gGuiMove ; Use a picture control instead
;Gui Margin, 1000, 0
gui, show, AutoSize, Translit
Gui +LastFound
WinSet, Transparent, 200
WinSet, ExStyle, ^0x80,
;WinSetTitle,test,,%a_space%
ControlSend,,{left}, Translit
Gui, +AlwaysOnTop +Resize + DPIScale -Caption -Border -SysMenu -ToolWindow ;-0x400000
GuiSize:
If A_EventInfo = 1
Return
GuiControl Move, str, % "H" . (A_GuiHeight) . " W" . (A_GuiWidth)
;GuiControl Move, str1, % "H" . (A_GuiHeight) . " W" . (A_GuiWidth)
;sleep, 3000
ControlGetText, OutputVar, Edit1, ahk_exe translate_tooltip_x64.exe
if OutputVar =
gui, show, AutoSize, Translit
;ClipBoard := oCB ; return original Clipboard contents
return
}
return
;If ( Win_Class = "Shell_TrayWnd" OR Win_Class = "ProgMan" OR Win_Class = "AltDesk1.x" )
;#if !MouseIsOver("Translit")
;#IfWinExist, Translit
;( (MouseIsOver != "Translit") AND (WinExist = "Translit") )
#If WinExist("Translit") AND !MouseIsOver("Translit")
~lbutton::
{
if !MouseIsOver("Translit")
{
gui, destroy
if (t = clipboard)
ClipBoard := oCB ; return original Clipboard contents
ToolTip
return
}
}
#If WinExist("Translit")
XButton1::
;gui, destroy
global xbut := 1
ClipBoard := t ; copy translate to Clipboard
if MouseIsOver("Translit")
{
ControlGetText, OutputVar, Edit1, ahk_exe translate_tooltip_x64.exe
ClipBoard := OutputVar
}
translate()
return
XButton2::
;gui, destroy
ClipBoard := t ; copy translate to Clipboard
;if MouseIsOver("Translit")
{
ControlGetText, OutputVar, Edit1, ahk_exe translate_tooltip_x64.exe
ClipBoard := OutputVar
}
gui, destroy
; Long press (> 0.5 sec) on * substitutes the dot multiply
KeyWait, XButton2, T0.2 ; Wait no more than 0.5 sec for key release (also suppress auto-repeat)
If ErrorLevel { ; timeout, so long press
KeyWait XButton2
Send, ^{vk56}
sleep, 1000
if (t = clipboard)
ClipBoard := oCB ; return original Clipboard contents
} Else ; otherwise...
{
Send, ^{vk56}
}
return
^s::
MouseGetPos,,, WinUMID
WinActivate, ahk_id %WinUMID%
WinGetActiveTitle, win
Clip := SubStr(win, 1, 195)
haystack := clip
needle := "[\?<>/\\\*""|:]"
replacement := "_"
;msgbox, % winc := RegExReplace(haystack, needle, replacement)
winc := RegExReplace(haystack, needle, replacement)
;name = %OutDir%\%winc% %OutNameNoExt%.%OutExtension%
;MsgBox, % clipboard "`n" t
;FileAppend, %t%, test.rtf
clipb := Clipboardall
;sleep, 4000
;MsgBox, % Clipboard
;b := Clipboard
Clipboard=
loop,30
{
sleep,10
} until !Clipboard
Clipboard := clipb "`n" t
loop,700
{
sleep,10
} until Clipboard
;Sleep, 5000
;{
;MsgBox, % Clipboard
saveAsWordDoc("C:\staff\screentextshot" "\" winc ".docx")
saveAsWordDoc(fileName) {
;Sleep, 5000
;MsgBox, % Clipboard
static _ := ComObjMissing()
wd := ComObjCreate("Word.Application"), doc := wd.Documents.Add(_,_,_,0)
, doc.Content.Paste() , doc.SaveAs(fileName), doc.Close(), wd.Quit()
;MsgBox, % Clipboard
;}
}
Clipboard := t
return
#If WinExist("Translit") AND MouseIsOver("Translit")
rbutton::
gui, destroy
if (t = clipboard)
ClipBoard := oCB ; return original Clipboard contents
return
#If WinExist("Translit") AND MouseIsOver("Translit")
~mbutton::
if triger =
{
gui, show, maximize, Translit
triger = 1
}
else
{
gui, show, restore, Translit
triger =
}
return
MouseIsOver(WinTitle) {
MouseGetPos, , , Win
return WinExist(WinTitle . " ahk_id " . Win)
}
GuiMove:
PostMessage, 0xA1, 2,,, A
Return
GoogleTranslate(str, from := "auto", to := "en") {
static JS := CreateScriptObj(), _ := JS.( GetJScript() ) := JS.("delete ActiveXObject; delete GetObject;")
json := SendRequest(JS, str, to, from, proxy := "")
oJSON := JS.("(" . json . ")")
if !IsObject(oJSON[1]) {
Loop % oJSON[0].length
trans .= oJSON[0][A_Index - 1][0]
}
else {
MainTransText := oJSON[0][0][0]
Loop % oJSON[1].length {
trans .= "`n+"
obj := oJSON[1][A_Index-1][1]
Loop % obj.length {
txt := obj[A_Index - 1]
trans .= (MainTransText = txt ? "" : "`n" txt)
}
}
}
if !IsObject(oJSON[1])
MainTransText := trans := Trim(trans, ",+`n ")
else
trans := MainTransText . "`n+`n" . Trim(trans, ",+`n ")
from := oJSON[2]
trans := Trim(trans, ",+`n ")
Return trans
}
SendRequest(JS, str, tl, sl, proxy) {
ComObjError(false)
http := ComObjCreate("WinHttp.WinHttpRequest.5.1")
( proxy && http.SetProxy(2, proxy) )
http.open( "POST", "https://translate.google.com/translate_a/single?client=webapp&sl="
. sl . "&tl=" . tl . "&hl=" . tl
. "&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t&ie=UTF-8&oe=UTF-8&otf=0&ssel=0&tsel=0&pc=1&kc=1"
. "&tk=" . JS.("tk").(str), 1 )
http.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8")
http.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0")
http.send("q=" . URIEncode(str))
http.WaitForResponse(-1)
Return http.responsetext
}
URIEncode(str, encoding := "UTF-8") {
VarSetCapacity(var, StrPut(str, encoding))
StrPut(str, &var, encoding)
While code := NumGet(Var, A_Index - 1, "UChar") {
bool := (code > 0x7F || code < 0x30 || code = 0x3D)
UrlStr .= bool ? "%" . Format("{:02X}", code) : Chr(code)
}
Return UrlStr
}
GetJScript()
{
script =
(
var TKK = ((function() {
var a = 561666268;
var b = 1526272306;
return 406398 + '.' + (a + b);
})());
function b(a, b) {
for (var d = 0; d < b.length - 2; d += 3) {
var c = b.charAt(d + 2),
c = "a" <= c ? c.charCodeAt(0) - 87 : Number(c),
c = "+" == b.charAt(d + 1) ? a >>> c : a << c;
a = "+" == b.charAt(d) ? a + c & 4294967295 : a ^ c
}
return a
}
function tk(a) {
for (var e = TKK.split("."), h = Number(e[0]) || 0, g = [], d = 0, f = 0; f < a.length; f++) {
var c = a.charCodeAt(f);
128 > c ? g[d++] = c : (2048 > c ? g[d++] = c >> 6 | 192 : (55296 == (c & 64512) && f + 1 < a.length && 56320 == (a.charCodeAt(f + 1) & 64512) ?
(c = 65536 + ((c & 1023) << 10) + (a.charCodeAt(++f) & 1023), g[d++] = c >> 18 | 240,
g[d++] = c >> 12 & 63 | 128) : g[d++] = c >> 12 | 224, g[d++] = c >> 6 & 63 | 128), g[d++] = c & 63 | 128)
}
a = h;
for (d = 0; d < g.length; d++) a += g[d], a = b(a, "+-a^+6");
a = b(a, "+-3^+b+-f");
a ^= Number(e[1]) || 0;
0 > a && (a = (a & 2147483647) + 2147483648);
a `%= 1E6;
return a.toString() + "." + (a ^ h)
}
)
Return script
}
CreateScriptObj() {
static doc
doc := ComObjCreate("htmlfile")
doc.write("<meta http-equiv='X-UA-Compatible' content='IE=9'>")
Return ObjBindMethod(doc.parentWindow, "eval")
}