Ksaan
Знающий
- Сообщения
- 207
- Репутация
- 15
Когда то у кого то я свистнул интересную функцию, и теперь решил ее приобщить к делу.
Функция показывает адрес вкладки браузера.
Дописав программу заметил одну ошибку... если я закрою браузер во время работы скрипта, вылазит системная ошибка а сам скрипт завершает работу. Как обойти эту проблему?
Функция показывает адрес вкладки браузера.
Код:
#include <Array.au3>
HotKeySet("{ESC}", "_Exit")
Active()
Func Active()
While 1
$Win1 = WinExists("[Class:OperaWindowClass]")
$Win3 = WinExists( "[Class:IEFrame]")
If $Win1 = 1 Then
Dim $Ret = OpenGetURL("", -1, 1, "Opera")
MsgBox(0,"", "Opera")
_ArrayDisplay($Ret, "Opera")
EndIf
If $Win3 = 1 Then
Dim $Ret = OpenGetURL("", -1, 1, "IExplore")
MsgBox(0,"", "IExplore")
_ArrayDisplay($Ret, "IExplore")
EndIf
WEnd
EndFunc
Func OpenGetURL($sURL = "", $hWin = -1, $RetType = 0, $Server="IExplore", $iWait = 10000)
Local $ret, $err, $uIdInst = DllStructCreate("int")
Local $hServer[1], $hTopic[1], $hItem[1], $hConv[1], $hData[1], $sData[1]
Local $sTopic = "WWW_OpenURL", $sItem = $sURL
If $sURL = '' Then
$sTopic = "WWW_GetWindowInfo"
$sItem = "0x"
EndIf
Local $hDll = DllOpen("user32.dll")
If $hDll=-1 Then Return SetError(1, 0, "")
$ret = DllCall("user32.dll", "int", "DdeInitialize", "ptr", DllStructGetPtr($uIdInst), "ptr", 0, "int", 0, "int", 0)
If $ret[0] Then Return SetError(2, $ret[0], "")
$hServer = DllCall($hDll, "int", "DdeCreateStringHandle", "int", DllStructGetData($uIdInst,1), "str", $Server, "int", 1004)
If $hServer[0] Then
$hTopic = DllCall($hDll, "int", "DdeCreateStringHandle", "int", DllStructGetData($uIdInst,1), "str", $sTopic, "int", 1004)
If $hTopic[0] Then
$hItem = DllCall($hDll, "int", "DdeCreateStringHandle", "int", DllStructGetData($uIdInst,1), "str", $sItem, "int", 1004)
If $hItem[0] Then
$hConv = DllCall($hDll, "int", "DdeConnect", "int", _
DllStructGetData($uIdInst,1), "int", $hServer[0], "int", $hTopic[0], "int", 0)
If $hConv[0] Then
$hData = DllCall($hDll, "int", "DdeClientTransaction", "ptr", 0, "int", 0, _
"int", $hConv[0], "int", $hItem[0], "int", 1, "int", 0x20B0, "int", $iWait, "ptr", 0)
If $hData[0] Then $sData = DllCall($hDll, "str", "DdeAccessData", "int", $hData[0], "ptr", 0)
EndIf
EndIf
EndIf
EndIf
$iErr = DllCall($hDll, "int", "DdeGetLastError", "int", DllStructGetData($uIdInst, 1))
If $hData[0] Then DllCall($hDll, "int", "DdeFreeDataHandle", "int", $hData[0])
If $hConv[0] Then DllCall($hDll, "int", "DdeFreeDataHandle", "int", $hConv[0])
If $hItem[0] Then DllCall($hDll, "int", "DdeFreeDataHandle", "int", $hItem[0])
If $hTopic[0] Then DllCall($hDll, "int", "DdeFreeDataHandle", "int", $hTopic[0])
If $hServer[0] Then DllCall($hDll, "int", "DdeFreeDataHandle", "int", $hServer[0])
If $iErr[0] Then Return SetError(3, $iErr[0], "") ; Othe DDE Errors
DllCall($hDll, "int", "DdeUninitialize", "int", DllStructGetData($uIdInst, 1))
DllClose($hDll)
$sData[0] = StringRegExpReplace($sData[0], ',""$', '')
If $sURL = '' Then $sURL = StringRegExpReplace($sData[0], '^"([^"]*)",.*', '\1')
Local $iRetTitle = StringRegExpReplace($sData[0], '^.*","([^"]*)"$', '\1')
Local $RetURL[3] = [$sData[0], $sURL, $iRetTitle]
If $RetType = 1 Then Return $RetURL
Return $sData[0]
EndFunc
Func _Exit()
Exit
EndFunc