 |
AutoHotkey Community Let's help each other out
|
| View previous topic :: View next topic |
| Author |
Message |
twhyman
Joined: 07 Dec 2005 Posts: 339
|
Posted: Fri Nov 21, 2008 2:16 am Post subject: |
|
|
Hi,
Any new version coming up soon?  _________________ (\__/) This is Bunny.
(='.'=) Cut, copy, and paste bunny onto your sig.
(")_(") Help Bunny gain World Domination.
|
|
| Back to top |
|
 |
Xatmo97 Guest
|
Posted: Sat Nov 22, 2008 6:46 pm Post subject: .PHP |
|
|
| Is there anyway to use .php files with the webserver i tryed to use php and when i go to the url it loads html fine but when i try to click a link that uses .php it trys to download it insted of useing it |
|
| Back to top |
|
 |
derRaphael
Joined: 23 Nov 2007 Posts: 841 Location: ~/.
|
Posted: Sat Nov 22, 2008 7:41 pm Post subject: Re: .PHP |
|
|
| twhyman wrote: | Hi,
Any new version coming up soon?  |
there will be a new version - but please dont ask when
| Xatmo97 wrote: | | Is there anyway to use .php files with the webserver i tryed to use php and when i go to the url it loads html fine but when i try to click a link that uses .php it trys to download it insted of useing it |
php and others fail atm, because
a) the script is not fully working as expected and might crash - therefore this has highest priority to be fixed (but this is also the toughest job to get that done, so as written above it simply takes a while longer)
b) php aswell as vbs or perl needs CGI to work with sparrow. CGI allows any content being read from stdin and send back to stdout. this feature will be implemented, but it is not working at the moment. when CGI interface is done, not only php will work, but anything capable of sending stdout and reading from stdin will do.
greets
dR _________________
All scripts, unless otherwise noted, are hereby released under CC-BY |
|
| Back to top |
|
 |
Xatmo97 Guest
|
Posted: Mon Nov 24, 2008 7:47 am Post subject: =) |
|
|
| Thank you |
|
| Back to top |
|
 |
twhyman
Joined: 07 Dec 2005 Posts: 339
|
Posted: Fri Nov 28, 2008 7:51 am Post subject: |
|
|
| DerRaphael wrote: | | twhyman wrote: | Hi,
Any new version coming up soon?  |
there will be a new version - but please dont ask when
|
I was just curious because i love to whole concept of spparow, and btw providing a free bump in the forum so other pepole will see spparow  _________________ (\__/) This is Bunny.
(='.'=) Cut, copy, and paste bunny onto your sig.
(")_(") Help Bunny gain World Domination.
|
|
| Back to top |
|
 |
shajul (offline) Guest
|
Posted: Sun Nov 30, 2008 5:21 am Post subject: Great!! |
|
|
Just realized the potential of sparrow!!
Reeeeaaaally great!
I am currently using it to control my computer via WIFI with my phone. When automation with COM will be available (or when i figure it out), it will be simply great!
A bump from me too! |
|
| Back to top |
|
 |
LiquidGravity Guest
|
Posted: Wed Jan 21, 2009 2:55 pm Post subject: |
|
|
| I made a gui with IE embedded and realized the potential for creating web server html based gui programs. Combining the two things opens up entirely new possibilities for AutoHotkey programmers. Now you can design a gui for your computer in html, css, image maps,... |
|
| Back to top |
|
 |
skrommel
Joined: 30 Jul 2004 Posts: 190
|
Posted: Fri Jan 30, 2009 2:38 am Post subject: Accessing javascript variables |
|
|
Great job, DerRaphael!
Is there any way to get the <?ahk tag to run from inside javascript?
The following code only runs when the page is refreshed...
Also, is there any way of accessing the javascript variables?
The code catches the position of a mouseclick on an image, and tries to send it to a script.
Skrommel
| Code: |
<html>
<head>
<meta http-equiv="refresh" content="10">
<script language="JavaScript">
function point_it(event){
pos_x = event.offsetX?(event.offsetX):event.pageX-document.getElementById("pointer_div").offsetLeft;
pos_y = event.offsetY?(event.offsetY):event.pageY-document.getElementById("pointer_div").offsetTop;
document.getElementById("cross").style.left = (pos_x-1) ;
document.getElementById("cross").style.top = (pos_y-15) ;
document.getElementById("cross").style.visibility = "visible" ;
document.pointform.form_x.value = pos_x;
document.pointform.form_y.value = pos_y;
<?ahk
Run,click.exe %pos_x% %pos_y%
?>
}
</script>
</head>
<body>
<form name="pointform" method="post">
<div id="pointer_div" onclick="point_it(event)" style = "background-image:url('sun.jpg');width:500px;height:333px;">
<img src="point.gif" id="cross" style="position:relative;visibility:hidden;z-index:2;"></div>
You pointed on x = <input type="text" name="form_x" size="4" /> - y = <input type="text" name="form_y" size="4" />
</form>
</body>
</html>
|
_________________ www.1HourSoftware.com |
|
| Back to top |
|
 |
Lexikos
Joined: 17 Oct 2006 Posts: 7299 Location: Australia
|
Posted: Fri Jan 30, 2009 8:29 am Post subject: |
|
|
JavaScript is client-side. In other words, Sparrow executes the AutoHotkey script, sends the page including JavaScript to the browser, then the browser runs the JavaScript. Interacting with the client directly could be done with Internet Explorer via COM, but defeats the purpose of Sparrow.
Off-topic: I originally wrote DispatchObj to make interacting with JavaScript in an IE window/WebBrowser control/HTML Dialog easier, but haven't developed it to its full potential since I haven't really much use for it.
| Quote: | | Is there any way to get the <?ahk tag to run from inside javascript? | It could be done indirectly like any other web server, assuming a scripted Sparrow page can accept POST data or arguments in the URL. |
|
| Back to top |
|
 |
skrommel
Joined: 30 Jul 2004 Posts: 190
|
Posted: Fri Jan 30, 2009 5:20 pm Post subject: |
|
|
Thanks, Lexicos, I'll have a look at it.
| Quote: | | It could be done indirectly like any other web server, assuming a scripted Sparrow page can accept POST data or arguments in the URL. |
Can it, DerRaphael?
Skrommel _________________ www.1HourSoftware.com |
|
| Back to top |
|
 |
skrommel
Joined: 30 Jul 2004 Posts: 190
|
Posted: Fri Jan 30, 2009 9:43 pm Post subject: |
|
|
I'm trying to create a simple remote control tool, so the above code would of course not work, as the javascript is running on another computer than Sparrow...
Does anyone know how Sparrow accept POST data or arguments in the URL, or must I go back to image maps and a couple thousand html files?
Skrommel _________________ www.1HourSoftware.com |
|
| Back to top |
|
 |
tank
Joined: 21 Dec 2007 Posts: 3700 Location: Louisville KY USA
|
Posted: Fri Jan 30, 2009 10:46 pm Post subject: |
|
|
who is lexicos? _________________
We are troubled on every side‚ yet not distressed; we are perplexed‚
but not in despair; Persecuted‚ but not forsaken; cast down‚ but not destroyed; |
|
| Back to top |
|
 |
Lexicos
Joined: 05 Jan 2009 Posts: 7
|
Posted: Fri Jan 30, 2009 11:27 pm Post subject: |
|
|
There must be some sort of mistake?
| Quote: | | Does anyone know how Sparrow accept POST data or arguments in the URL, | Look in web\form.hkml. |
|
| Back to top |
|
 |
tank
Joined: 21 Dec 2007 Posts: 3700 Location: Louisville KY USA
|
Posted: Sat Jan 31, 2009 12:27 am Post subject: |
|
|
| Lexik(c)os wrote: | That Lexicos, always stealing the credit for my work.  | rofl _________________
We are troubled on every side‚ yet not distressed; we are perplexed‚
but not in despair; Persecuted‚ but not forsaken; cast down‚ but not destroyed; |
|
| Back to top |
|
 |
skrommel
Joined: 30 Jul 2004 Posts: 190
|
Posted: Mon Feb 02, 2009 12:27 am Post subject: RemoteControl |
|
|
Sorry, Lexikos!
Here's a first version of my remote control tool. I'm having all kinds of problems with paths, is there any system variables list somewhere?
It will let you control your computer through a web interface, clicking and sending key presses.
It requires two files, index.hkml and CaptureScreen.ahk.
Skrommel
index.hkml goes in Sparrow's www folder:
| Code: | <html>
<head>
<title>Remote Control</title>
<script language="JavaScript">
function point_it(event)
{
pos_x=event.offsetX?(event.offsetX):event.pageX-document.getElementById("pointer_div").offsetLeft;
pos_y=event.offsetY?(event.offsetY):event.pageY-document.getElementById("pointer_div").offsetTop;
document.getElementById("cross").style.left=(pos_x-1);
document.getElementById("cross").style.top=(pos_y-15);
document.pointform.form_x.value=pos_x;
document.pointform.form_y.value=pos_y;
document.pointform.submit();
}
</script>
</head>
<body>
<form name="pointform" method="post">
<div id="pointer_div" onclick="point_it(event)" style="background-image:url('
<?ahk
#NoEnv
SetBatchLines,-1
SetWinDelay,0
x:=$_POST[form_x]/500*A_ScreenWidth
y:=$_POST[form_y]/333*A_ScreenHeight
SendMode,Input
If ($_POST[shift]="on")
Send,{Shift Down}
If ($_POST[ctrl]="on")
Send,{Ctrl Down}
If ($_POST[alt]="on")
Send,{Alt Down}
If ($_POST[win]="on")
Send,{Win Down}
Send,% $_POST[text]
CoordMode,Mouse,Screen
If ($_POST[button]="left")
MouseClick,Left,% x,% y,1,0
Else If ($_POST[button]="leftdown")
MouseClick,Left,% x,% y,1,0,D
Else If ($_POST[button]="leftup")
MouseClick,Left,% x,% y,1,0,U
Else If ($_POST[button]="leftdouble")
MouseClick,Left,% x,% y,2,0
Else If ($_POST[button]="right")
MouseClick,Right,% x,% y,,0
Else If ($_POST[button]="rightdown")
MouseClick,Right,% x,% y,1,0,D
Else If ($_POST[button]="rightup")
MouseClick,Right,% x,% y,1,0,U
Else If ($_POST[button]="rightdouble")
MouseClick,Right,% x,% y,2,0
If ($_POST[shift]="on")
Send,{Shift Up}
If ($_POST[ctrl]="on")
Send,{Ctrl Up}
If ($_POST[alt]="on")
Send,{Alt Up}
If ($_POST[win]="on")
Send,{Win Up}
Sleep,1000
RunWait,CaptureScreen.ahk
filename:=$_SERVER[REQUEST] "screen.jpg#"
echo(filename)
?>
');width:500px;height:333px;">
<img src="point.gif" id="cross" style="position:relative;visibility:hidden;z-index:2;">
</div>
X=<input type="text" name="form_x" size="4"> Y=<input type="text" name="form_y" size="4">
<input type="Submit" value="Submit">
<br>
Text: <input type="Edit" name="text">
<br>
<input type="CheckBox" name="shift"> Shift
<input type="CheckBox" name="ctrl"> Ctrl
<input type="CheckBox" name="shift"> Alt
<input type="CheckBox" name="win"> Win
<br>
<input type="radio" name="button" value="left" checked="checked"> LButton
<input type="radio" name="button" value="leftdown"> LButton Down
<input type="radio" name="button" value="leftup"> LButton Up
<input type="radio" name="button" value="leftdouble"> LeftDoubleClick
<br>
<input type="radio" name="button" value="right"> RButton
<input type="radio" name="button" value="rightdown"> RButton Down
<input type="radio" name="button" value="rightup"> RButton Up
<input type="radio" name="button" value="rightdouble"> RightDoubleClick
<br>
</form>
</map>
<?ahk
echo(nl2br("$_POST -> " $_POST "`n"))
echo(nl2br("$_POST[form_x] -> " $_POST[form_x] "`n"))
echo(nl2br("$_POST[form_y] -> " $_POST[form_y] "`n"))
echo(nl2br("$_POST[button] -> " $_POST[button] "`n"))
echo(nl2br("$_POST[shift] -> " $_POST[shift] "`n"))
echo(nl2br("$_POST[ctrl] -> " $_POST[ctrl] "`n"))
echo(nl2br("$_POST[alt] -> " $_POST[alt] "`n"))
echo(nl2br("$_POST[win] -> " $_POST[win] "`n"))
echo(nl2br("$_POST[text] -> " $_POST[text] "`n"))
?>
<script language="JavaScript">
</script>
</body></html> |
CaptureScreen.ahk goes in the main Sparrow folder:
| Code: | #NoEnv
SetBatchLines,-1
SetWinDelay,0
CaptureScreen("0,0," A_ScreenWidth "," A_ScreenHeight ",500,333",True,A_ScriptDir "\www\screen.jpg")
Return
/* CaptureScreen(aRect, bCursor, sFileTo, nQuality)
1) If the optional parameter bCursor is True, captures the cursor too.
2) If the optional parameter sFileTo is 0, set the image to Clipboard.
If it is omitted or "", saves to screen.bmp in the script folder,
otherwise to sFileTo which can be BMP/JPG/PNG/GIF/TIF.
3) The optional parameter nQuality is applicable only when sFileTo is JPG. Set it to the desired quality level of the resulting JPG, an integer between 0 - 100.
4) If aRect is 0/1/2, captures the screen/active window/client area of active window.
5) aRect can be comma delimited sequence of coordinates, e.g., "Left, Top, Right, Bottom" or "Left, Top, Right, Bottom, Width_Zoomed, Height_Zoomed".
In this case, only that portion of the rectangle will be captured. Additionally, in the latter case, zoomed to the new width/height, Width_Zoomed/Height_Zoomed.
Example:
CaptureScreen(0)
CaptureScreen(1)
CaptureScreen(2)
CaptureScreen("100, 100, 200, 200")
CaptureScreen("100, 100, 200, 200, 400, 400") ; Zoomed
*/
/* Convert(sFileFr, sFileTo, nQuality)
Convert("C:\image.bmp", "C:\image.jpg")
Convert("C:\image.bmp", "C:\image.jpg", 95)
Convert(0, "C:\clip.png") ; Save the bitmap in the clipboard to sFileTo if sFileFr is "" or 0.
*/
CaptureScreen(aRect = 0, bCursor = False, sFile = "", nQuality = "")
{
If !aRect
{
SysGet, Mon, Monitor, 1
nL := MonLeft
nT := MonTop
nW := MonRight - MonLeft
nH := MonBottom - MonTop
}
Else If aRect = 1
WinGetPos, nL, nT, nW, nH, A
Else If aRect = 2
{
WinGet, hWnd, ID, A
VarSetCapacity(rt, 16, 0)
DllCall("GetClientRect" , "Uint", hWnd, "Uint", &rt)
DllCall("ClientToScreen", "Uint", hWnd, "Uint", &rt)
nL := NumGet(rt, 0, "int")
nT := NumGet(rt, 4, "int")
nW := NumGet(rt, 8)
nH := NumGet(rt,12)
}
Else
{
StringSplit, rt, aRect, `,, %A_Space%%A_Tab%
nL := rt1
nT := rt2
nW := rt3 - rt1
nH := rt4 - rt2
znW := rt5
znH := rt6
}
mDC := DllCall("CreateCompatibleDC", "Uint", 0)
hBM := CreateDIBSection(mDC, nW, nH)
oBM := DllCall("SelectObject", "Uint", mDC, "Uint", hBM)
hDC := DllCall("GetDC", "Uint", 0)
DllCall("BitBlt", "Uint", mDC, "int", 0, "int", 0, "int", nW, "int", nH, "Uint", hDC, "int", nL, "int", nT, "Uint", 0x40000000 | 0x00CC0020)
DllCall("ReleaseDC", "Uint", 0, "Uint", hDC)
If bCursor
CaptureCursor(mDC, nL, nT)
DllCall("SelectObject", "Uint", mDC, "Uint", oBM)
DllCall("DeleteDC", "Uint", mDC)
If znW && znH
hBM := Zoomer(hBM, nW, nH, znW, znH)
If sFile = 0
SetClipboardData(hBM)
Else Convert(hBM, sFile, nQuality), DllCall("DeleteObject", "Uint", hBM)
}
CaptureCursor(hDC, nL, nT)
{
VarSetCapacity(mi, 20, 0)
mi := Chr(20)
DllCall("GetCursorInfo", "Uint", &mi)
bShow := NumGet(mi, 4)
hCursor := NumGet(mi, 8)
xCursor := NumGet(mi,12)
yCursor := NumGet(mi,16)
VarSetCapacity(ni, 20, 0)
DllCall("GetIconInfo", "Uint", hCursor, "Uint", &ni)
xHotspot := NumGet(ni, 4)
yHotspot := NumGet(ni, 8)
hBMMask := NumGet(ni,12)
hBMColor := NumGet(ni,16)
If bShow
DllCall("DrawIcon", "Uint", hDC, "int", xCursor - xHotspot - nL, "int", yCursor - yHotspot - nT, "Uint", hCursor)
If hBMMask
DllCall("DeleteObject", "Uint", hBMMask)
If hBMColor
DllCall("DeleteObject", "Uint", hBMColor)
}
Zoomer(hBM, nW, nH, znW, znH)
{
mDC1 := DllCall("CreateCompatibleDC", "Uint", 0)
mDC2 := DllCall("CreateCompatibleDC", "Uint", 0)
zhBM := CreateDIBSection(mDC2, znW, znH)
oBM1 := DllCall("SelectObject", "Uint", mDC1, "Uint", hBM)
oBM2 := DllCall("SelectObject", "Uint", mDC2, "Uint", zhBM)
DllCall("SetStretchBltMode", "Uint", mDC2, "int", 4)
DllCall("StretchBlt", "Uint", mDC2, "int", 0, "int", 0, "int", znW, "int", znH, "Uint", mDC1, "int", 0, "int", 0, "int", nW, "int", nH, "Uint", 0x00CC0020)
DllCall("SelectObject", "Uint", mDC1, "Uint", oBM1)
DllCall("SelectObject", "Uint", mDC2, "Uint", oBM2)
DllCall("DeleteDC", "Uint", mDC1)
DllCall("DeleteDC", "Uint", mDC2)
DllCall("DeleteObject", "Uint", hBM)
Return zhBM
}
Convert(sFileFr = "", sFileTo = "", nQuality = "")
{
If sFileTo =
sFileTo := A_ScriptDir . "\screen.bmp"
SplitPath, sFileTo, , sDirTo, sExtTo, sNameTo
If Not hGdiPlus := DllCall("LoadLibrary", "str", "gdiplus.dll")
Return sFileFr+0 ? SaveHBITMAPToFile(sFileFr, sDirTo . "\" . sNameTo . ".bmp") : ""
VarSetCapacity(si, 16, 0), si := Chr(1)
DllCall("gdiplus\GdiplusStartup", "UintP", pToken, "Uint", &si, "Uint", 0)
If !sFileFr
{
DllCall("OpenClipboard", "Uint", 0)
If DllCall("IsClipboardFormatAvailable", "Uint", 2) && (hBM:=DllCall("GetClipboardData", "Uint", 2))
DllCall("gdiplus\GdipCreateBitmapFromHBITMAP", "Uint", hBM, "Uint", 0, "UintP", pImage)
DllCall("CloseClipboard")
}
Else If sFileFr Is Integer
DllCall("gdiplus\GdipCreateBitmapFromHBITMAP", "Uint", sFileFr, "Uint", 0, "UintP", pImage)
Else DllCall("gdiplus\GdipLoadImageFromFile", "Uint", Unicode4Ansi(wFileFr,sFileFr), "UintP", pImage)
DllCall("gdiplus\GdipGetImageEncodersSize", "UintP", nCount, "UintP", nSize)
VarSetCapacity(ci,nSize,0)
DllCall("gdiplus\GdipGetImageEncoders", "Uint", nCount, "Uint", nSize, "Uint", &ci)
Loop, % nCount
If InStr(Ansi4Unicode(NumGet(ci,76*(A_Index-1)+44)), "." . sExtTo)
{
pCodec := &ci+76*(A_Index-1)
Break
}
If InStr(".JPG.JPEG.JPE.JFIF", "." . sExtTo) && nQuality<>"" && pImage && pCodec
{
DllCall("gdiplus\GdipGetEncoderParameterListSize", "Uint", pImage, "Uint", pCodec, "UintP", nSize)
VarSetCapacity(pi,nSize,0)
DllCall("gdiplus\GdipGetEncoderParameterList", "Uint", pImage, "Uint", pCodec, "Uint", nSize, "Uint", &pi)
Loop, % NumGet(pi)
If NumGet(pi,28*(A_Index-1)+20)=1 && NumGet(pi,28*(A_Index-1)+24)=6
{
pParam := &pi+28*(A_Index-1)
NumPut(nQuality,NumGet(NumPut(4,NumPut(1,pParam+0)+20)))
Break
}
}
If pImage
pCodec ? DllCall("gdiplus\GdipSaveImageToFile", "Uint", pImage, "Uint", Unicode4Ansi(wFileTo,sFileTo), "Uint", pCodec, "Uint", pParam) : DllCall("gdiplus\GdipCreateHBITMAPFromBitmap", "Uint", pImage, "UintP", hBitmap, "Uint", 0) . SetClipboardData(hBitmap), DllCall("gdiplus\GdipDisposeImage", "Uint", pImage)
DllCall("gdiplus\GdiplusShutdown" , "Uint", pToken)
DllCall("FreeLibrary", "Uint", hGdiPlus)
}
CreateDIBSection(hDC, nW, nH, bpp = 32, ByRef pBits = "")
{
NumPut(VarSetCapacity(bi, 40, 0), bi)
NumPut(nW, bi, 4)
NumPut(nH, bi, 8)
NumPut(bpp, NumPut(1, bi, 12, "UShort"), 0, "Ushort")
NumPut(0, bi,16)
Return DllCall("gdi32\CreateDIBSection", "Uint", hDC, "Uint", &bi, "Uint", 0, "UintP", pBits, "Uint", 0, "Uint", 0)
}
SaveHBITMAPToFile(hBitmap, sFile)
{
DllCall("GetObject", "Uint", hBitmap, "int", VarSetCapacity(oi,84,0), "Uint", &oi)
hFile:= DllCall("CreateFile", "Uint", &sFile, "Uint", 0x40000000, "Uint", 0, "Uint", 0, "Uint", 2, "Uint", 0, "Uint", 0)
DllCall("WriteFile", "Uint", hFile, "int64P", 0x4D42|14+40+NumGet(oi,44)<<16, "Uint", 6, "UintP", 0, "Uint", 0)
DllCall("WriteFile", "Uint", hFile, "int64P", 54<<32, "Uint", 8, "UintP", 0, "Uint", 0)
DllCall("WriteFile", "Uint", hFile, "Uint", &oi+24, "Uint", 40, "UintP", 0, "Uint", 0)
DllCall("WriteFile", "Uint", hFile, "Uint", NumGet(oi,20), "Uint", NumGet(oi,44), "UintP", 0, "Uint", 0)
DllCall("CloseHandle", "Uint", hFile)
}
SetClipboardData(hBitmap)
{
DllCall("GetObject", "Uint", hBitmap, "int", VarSetCapacity(oi,84,0), "Uint", &oi)
hDIB := DllCall("GlobalAlloc", "Uint", 2, "Uint", 40+NumGet(oi,44))
pDIB := DllCall("GlobalLock", "Uint", hDIB)
DllCall("RtlMoveMemory", "Uint", pDIB, "Uint", &oi+24, "Uint", 40)
DllCall("RtlMoveMemory", "Uint", pDIB+40, "Uint", NumGet(oi,20), "Uint", NumGet(oi,44))
DllCall("GlobalUnlock", "Uint", hDIB)
DllCall("DeleteObject", "Uint", hBitmap)
DllCall("OpenClipboard", "Uint", 0)
DllCall("EmptyClipboard")
DllCall("SetClipboardData", "Uint", 8, "Uint", hDIB)
DllCall("CloseClipboard")
}
Unicode4Ansi(ByRef wString, sString)
{
nSize := DllCall("MultiByteToWideChar", "Uint", 0, "Uint", 0, "Uint", &sString, "int", -1, "Uint", 0, "int", 0)
VarSetCapacity(wString, nSize * 2)
DllCall("MultiByteToWideChar", "Uint", 0, "Uint", 0, "Uint", &sString, "int", -1, "Uint", &wString, "int", nSize)
Return &wString
}
Ansi4Unicode(pString)
{
nSize := DllCall("WideCharToMultiByte", "Uint", 0, "Uint", 0, "Uint", pString, "int", -1, "Uint", 0, "int", 0, "Uint", 0, "Uint", 0)
VarSetCapacity(sString, nSize)
DllCall("WideCharToMultiByte", "Uint", 0, "Uint", 0, "Uint", pString, "int", -1, "str", sString, "int", nSize, "Uint", 0, "Uint", 0)
Return sString
} |
_________________ www.1HourSoftware.com |
|
| Back to top |
|
 |
|
|
You can post new topics in this forum You can reply to topics in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|