lwhuang 發表於 16-8-15 21:12

已有 115 人購買  本主題需向作者支付 1 金錢 才能瀏覽 購買主題

kimoze 發表於 18-3-25 16:50

謝謝分享下單後發訊息到手機Telegram~

lwhuang 發表於 16-8-17 21:55

lwhuang 發表於 16-8-17 13:43
powershell的招數,在我的環境 win10 64裡
同樣的程式碼
AB64會成功


我找到解法了

https://msdn.microsoft.com/en-us/powershell/scripting/setup/starting-the-32-bit-version-of-windows-powershell

把ShellExecute 的第3個參數設成 %SystemRoot%\SysWOW64\WindowsPowerShell\v1.0 就好了,注意一下,%SystemRoot% 不會自動取代,要寫死,不然就是
//這是x64 windows
EnableScript("JScript");
<%
WshShell = new ActiveXObject( "WScript.Shell");
wshEnv = WshShell.Environment("process");
AFL("AFL") = wshEnv("AFL");
AFL("SystemRoot") = wshEnv("SystemRoot");
%>
function telegram_ps_x64(msg)//中文 msg ok
{
        fullpath=AFL+"/utility/telegram.ps1";
        ShellExecute("powershell","-file "+fullpath+" \""+msg+"\"", "",0);
}

function telegram_ps_x86(msg)
{
        pspath=SystemRoot+"/SysWOW64/WindowsPowerShell/v1.0/";
        _TRACE(pspath);
        fullpath=AFL+"/utility/telegram.ps1";
        ShellExecute("powershell","-file "+fullpath+" \""+msg+"\"", pspath, 0);
}要用 powershell 只能分2個版本了


zaqimon 發表於 16-8-16 11:26

本帖最後由 zaqimon 於 16-8-16 11:39 編輯

我目前是使用XMPP的方式送給Hangouts
這樣我在PC或手機都能同時收到訊息
Google目前還沒停止XMPP的後門

我是透過AutoIt去執行sendxmpp32.exe的方式
(sendxmpp原本是perl寫的 我是去找到別人compile好的執行檔)
測試過可以送中文(應該說是UTF-8)沒問題
$pid = Run("sendxmpp32.exe -e -i xxx@gmail.com", "", @SW_HIDE, $STDIN_CHILD)
$re = StdinWrite($pid, StringToBinary($msg & @CRLF, 4))
StdinWrite($pid) ; pipe close
重點是那個StringToBinary轉成UTF-8
我一開始也以為sendxmpp32.exe不支援中文

送中文字我猜會不會是AmiBroker的限制
也許要寫個外部程式轉成UTF-8然後透過STDIN的方式傳送


magier 發表於 16-8-16 12:42

測試一下powershell 可以取代 curl 送中文

// 先弄一個script file tel.ps1 (http 空格自己拿掉)
$client = New-Object System.Net.WebClient
$url = "h t t p s://api.telegram.org/bot263669:o8t30XG_mT8oP0GAqg7wwxTqxdH5rIc/sendMessage?chat_id=24881&text="+$args
$reply = $client.DownloadData($url);


執行命令為
powershell -file tel.ps1 "中文"

or in AB
ShellExecute("powershell","-file tel.ps1 \"中文\"","",0);

ps: powershell 執行script 權限問題要先打開
Set-ExecutionPolicy RemoteSigned

lwhuang 發表於 16-8-16 13:54

本帖最後由 lwhuang 於 16-8-16 14:22 編輯

magier 發表於 16-8-16 12:42
測試一下powershell 可以取代 curl 送中文

// 先弄一個script file tel.ps1 (http 空格自己拿掉)

powershell這招不能換行耶,要怎麼換行呢?

我查到有 DownloadDataAsync, 但是這個不會成功,有辦法射後不理嗎?

magier 發表於 16-8-16 14:20

lwhuang 發表於 16-8-16 13:54
powershell這招不能換行耶,要怎麼換行呢?
沒想過這問題@@稍微改一下script 修正

$client = New-Object System.Net.WebClient;
$txt = "";
foreach($a in $args)
{
$txt = $txt + "`n" + $a;
}
$txt
$url = "h t t p s://api.telegram.org/bot26:qg7wwxTqxdH5rIc/sendMessage?chat_id=1441&text="+$txt
$url
$reply = $client.DownloadData($url);執行變成

powershell -file tel.ps1 第一行第二行第三行

lwhuang 發表於 16-8-16 14:27

本帖最後由 lwhuang 於 16-8-16 14:30 編輯

magier 發表於 16-8-16 14:20
沒想過這問題@@稍微改一下script 修正

執行變成
好像有點小醜,因為我都不知道會有幾行,希望是一行msg就出去了
curl 的換行是用 --data-urlencode 傳的,看到\n就會換行,全放在網址就不行,會不會有不同的包裝方式?POST?

另外我去試了 DownloadDataAsync ,是不行的,有沒有辦法射後不理?

magier 發表於 16-8-16 15:20

lwhuang 發表於 16-8-16 14:27
好像有點小醜,因為我都不知道會有幾行,希望是一行msg就出去了
curl 的換行是用 --data-urlencode 傳的, ...

找到一個簡單的方法
單一參數使用\nscript 內部再轉換就可以了
$client = New-Object System.Net.WebClient;
$txt = $args.Replace("\n", "`n")

$url = "h t t p s://api.telegram.org/bot26369:AAHSwwxTqxdH5rIc/sendMessage?chat_id=2441&text="+$txt
$url
$reply = $client.DownloadData($url);powershell -file tel.ps1 "123\n123"
另DownloadDataAsync 使用這個的需求是?

lwhuang 發表於 16-8-16 17:48

本帖最後由 lwhuang 於 16-8-16 17:52 編輯

magier 發表於 16-8-16 15:20
找到一個簡單的方法
單一參數使用\nscript 內部再轉換就可以了


Async就是希望不要等他做完,就繼續下面的事了,不管他有沒有做完,也不管他有沒有成功,以免網路還是什麼有問題被卡住,他自己努力做而不影響呼叫他的上層,怕本來只是通知的,結果下一筆單被卡住就不好了

magier 發表於 16-8-16 18:22

本帖最後由 magier 於 16-8-16 19:49 編輯

lwhuang 發表於 16-8-16 17:48
Async就是希望不要等他做完,就繼續下面的事了,不管他有沒有做完,也不管他有沒有成功,以免網路還是什麼 ...
看起來Async的呼叫只能確保在powershell裡面不會被 block 離開AB ShellExecute() 還是要等做完不然好像訊息會傳不出去

應該還是使用同步的方式就好了

zaqimon 發表於 16-8-17 10:08

ShellExecute並不會block
例如你可以連續執行兩行
ShellExecute("ping","-n 10 127.0.0.1","");
ShellExecute("ping","-n 10 127.0.0.1","");
會跳出兩個視窗

lwhuang 發表於 16-8-17 13:43

本帖最後由 lwhuang 於 16-8-17 13:46 編輯

magier 發表於 16-8-16 15:20
找到一個簡單的方法
單一參數使用\nscript 內部再轉換就可以了


powershell的招數,在我的環境 win10 64裡
同樣的程式碼
AB64會成功
AB32會失敗,碰巧我的程式交易只能在32跑



magier 發表於 16-8-17 20:46

lwhuang 發表於 16-8-17 13:43
powershell的招數,在我的環境 win10 64裡
同樣的程式碼
AB64會成功


手邊沒有win10 可以測試
我的環境是win7 32bit + AB 32 bit

lwhuang 發表於 16-8-17 21:00

magier 發表於 16-8-17 20:46
手邊沒有win10 可以測試
我的環境是win7 32bit + AB 32 bit

我猜不是win10的關係,是 32-bit AB 配不了 64-bit powershell

lwhuang 發表於 16-8-17 21:23

又練到一招,可以用bot在群組發訊,適合吸收會員的大咖使用,傳到群組裡,所有會員都會看到,不用傳很多次
頁: [1] 2
查看完整版本: 下單後發訊息到手機Telegram教學