Jump to content

All my products and services are free. All my costs are met by donations I receive from my users. If you enjoy using any of my products, please donate to support me. My bare hosting costs are currently not met so please consider donating by either clicking this text or the Patreon link on the right.

Patreon

Recommended Posts

Posted

I've been working on a script to use the steering wheel in my driving cab to control Gameex. The script below works well to navigate in Notepad, but for some reason does not work in Gameex.

I have tried:

1. Setting "Use Mouse" to Yes, and No

2. Setting "Cab control friendly" to No

I can navigate using left/right, and up/down on the keyboard just fine, so I don't know why this script will navigate in Notepad, but not Gameex. Ideas?

 

#NoEnv
SetBatchLines -1
Process Priority,,R

BlockInput Mouse ; user mouse input is ignored during MouseMove
CoordMode Mouse, Screen ; absolute coordinates
SetMouseDelay -1 ; fastest action

MouseGetPos x0, y0 ; get initial mouse pointer location
SetTimer WatchMouse, 1 ; run the subroutine fast (10..16ms)
Return

WatchMouse:
MouseGetPos x, y ; get current mouse position
GetKeyState, state, LCtrl ; Check if "a" key is pressed
if state = D ; "LCtrl" is down (left/right)
{
If (x < x0)
{
SendPlay {Blind}{left}
}
Else If (x > x0)
{
SendPlay {Blind}{right}
}
} ; "LCtrl" is not down (up/down)
else
{
If (x < x0)
{
SendPlay {Blind}{up}
}
Else If (x > x0)
{
SendPlay {Blind}{down}
}
}

MouseMove x0, y0, 0 ; set mouse to original location
Return

z::ExitApp ; stop the madness; make the script persistent

I have posted at AHK forum, so far nobody has been able to help...

Posted

Just curious if there's a reason you didn't like my script? :unsure:

I wrote it with the express purpose of controlling GameEx with a steering wheel. The only thing I could see it not having is the ability to use the filters. BUT, after spending the time to incorporate that feature (which was in there in the first place), it turned out there were few enough games that a filter wasn't worth it. As a result, I have both the left and right steering wheels mapped to do the same commands. That way, both left and right players can pick games.

EDIT: I reviewed your code and it looks like you are trying to accomplish this with a slightly different approach. I personally think your way is a bit cleaner if you can get it to work. I was trying to include a buffer zone so that the wheel would have to move more than a minimum distance. This was an attempt to minimize unwanted movement (or nonexistent user input).

Posted

Brian - yes, its a mouse device

Bkenobi - I never got your script to work either...it was too complicated for me (no disrespect intended, I couldn't figure it out :blink: ), so I tried making my own. Now that you mention it though, my script works just like yours, Gameex does not respond to either one...

I've got AHK installed on the computer, do I need something else? Why does it move the cursor in notepad, but not GX? Especially if you are able to navigate GX with a script. I'm sure you'll try mine when you get time, and let me know?

BTW: It navigates in Notepad really well!

Posted

Yeah, I had the same problem initially. I ended up getting some help from Stu as I recall. The solution was incorporated in my script, but I can't remember what it was. Like I said before, make sure you don't have custom inputs turned on. I recall those screwed things up with scripts. I also recall some problems with enabling mouse input. I don't have any other programs installed related to getting this to work, so it should work. My racing cab's setup is pretty simple. I'll compare my script to yours to see if you are doing something different from me. Also, I can try to remember to upload my GameEx.ini so you can compare it to your setup.

Posted

Ok, so the biggest difference I see between your script and mine is the method used to send the key press. You call:

SendPlay {Blind}{up}

where I call

SendInput {Blind}{%NormalUp% DownTemp}
SendInput {Blind}{%NormalUp% Up}

where %NormalUp% is set to the up key.

Posted

Ok, so I grabbed the config stuff for my racing cabinet. The main files that configure the controls are GameEx.ini, Mouse2key.ahk, and an XPadder profile. I've zipped them up in case you want to take a look at them. I haven't done anything special other than that, so perhaps if you do a diff on the gameex.ini file, you will see an important difference in the setup.

RacerX_Config.zip

Posted

OK - Good news - Bad news....

Good news:

It works! :) The script included in the zip file was different than the one I had. Maybe there is more than one version on the forums? The version I had of Mouse2key had alot of lines commented out (the whole section for pg up/down, among others.)

Bad News:

It did not work with my config, so I used Beyond Compare, and made some changes to make my config look more like yours. I then went crazy, and deleted alot of the B.S. out of my config (unused emulators, and paths). I ran Gameex, and it worked the first time, but when I shut Gameex down, and started again it crashed. I tried replacing the Gameex.ini file with the same one that ran sucessfully the first time, but it didn't help. I restarted my computer, and Gameex ran again... once. I'm sure I can start over, and get this working, but this doesn't make any sense to me.

Here is my log:

09:47:22.4  8/2/2008:  GameEx: Version 9.42: Starting Log
09:47:22.4 8/2/2008: Operating System Platform: Win32NT
09:47:22.4 8/2/2008: Operating System Name: Windows XP
09:47:22.4 8/2/2008: Operating System Version: 5.1.2600
09:47:22.4 8/2/2008: Checking for versions of .net Framework installed
09:47:22.4 8/2/2008: .net Framework 2.0 Installed
09:47:22.4 8/2/2008: Intel(R) Pentium(R) 4 CPU 1.70GHz, 511MB
09:47:22.4 8/2/2008: 1.7Ghz
09:47:22.4 8/2/2008: Running Randomize()
09:47:22.4 8/2/2008: Loading PlugIns
09:47:22.4 8/2/2008: Checking for applications to Launch On Startup
09:47:22.4 8/2/2008: Launching and not waiting: C:\Mouse2Key (GameEx)
09:47:22.8 8/2/2008: Running Misc startup tasks
09:47:22.8 8/2/2008: Setting Menu types
09:47:22.8 8/2/2008: Opening Configuration File
09:47:22.8 8/2/2008: Getting Configuration Values
09:47:22.8 8/2/2008: Using Theme: Default - BlueEx - MCE1024x768
09:47:22.8 8/2/2008: Checking for alternate Image Directory for Theme: Default - BlueEx - MCE1024x768
09:47:22.8 8/2/2008: Launching HideOS.exe
09:47:22.8 8/2/2008: Initialising Video/MNG DLL's
09:47:22.9 8/2/2008: Hiding Taskbar
09:47:22.9 8/2/2008: Is Media Center running?
09:47:22.9 8/2/2008: Checking/Creating LCD Registry values
09:47:22.9 8/2/2008: Check Media Center Exit/Start Mode
09:47:22.9 8/2/2008: Media Center Mode 0
09:47:22.9 8/2/2008: Video previews on. Warning: Only recommended on modern systems
09:47:23.0 8/2/2008: Snap Delay set to: 2
09:47:23.0 8/2/2008: Get other settings
09:47:23.0 8/2/2008: Mouse Input is disabled
09:47:23.0 8/2/2008: Desktop set to Hide ICONS and set Background to Black
09:47:23.0 8/2/2008: Backing up Registry Wallpaper Settings
09:47:23.0 8/2/2008: Set: Find emulator artwork on best match basis
09:47:23.0 8/2/2008: Start work for Form
09:47:23.0 8/2/2008: Getting Original Screen Size
09:47:23.0 8/2/2008: Opening Database Connection
09:47:23.1 8/2/2008: Initializing Component
09:47:23.3 8/2/2008: Retrieving resolution setting
09:47:23.3 8/2/2008: MAME Path is: C:\MameUI32
09:47:23.4 8/2/2008: MAME EXE file is: MameUI32.exe
09:47:23.4 8/2/2008: ROM Path is: C:\MameUI32\roms
09:47:23.4 8/2/2008: Catver.ini is located at: C:\Program Files\GameEx\DATA\catver.ini
09:47:23.4 8/2/2008: History.dat is located at: C:\Program Files\GameEx\DATA\history.dat
09:47:23.4 8/2/2008: nplayers.ini is located at: C:\Program Files\GameEx\DATA\nplayers.ini
09:47:23.4 8/2/2008: MAMEinfo.dat is located at: C:\Program Files\GameEx\DATA\mameinfo.dat
09:47:23.4 8/2/2008: Loading Controls.ini map file
09:47:23.4 8/2/2008: Snap Path is: C:\MameUI32\snap
09:47:23.4 8/2/2008: AVI Snap Path is: C:\MameUI32\video snap
09:47:23.4 8/2/2008: Flyer Path is: C:\MameUI32\flyers
09:47:23.4 8/2/2008: Cabinet Path is: C:\MameUI32\cabinets
09:47:23.4 8/2/2008: Title Path is: C:\MameUI32\titles
09:47:23.4 8/2/2008: PCB Path: Not Found
09:47:23.4 8/2/2008: Artwork Preview Path is: C:\MameUI32\artwork
09:47:23.4 8/2/2008: Panel Path is: C:\MameUI32\cpanel
09:47:23.4 8/2/2008: Manual Path is: C:\MameUI32\manuals
09:47:23.4 8/2/2008: Icon Path is: C:\MameUI32\icons
09:47:23.4 8/2/2008: Marquee Path is: C:\MameUI32\marquees
09:47:23.5 8/2/2008: Loading Custom Emulators
09:47:23.8 8/2/2008: Using 2D Animations
09:47:23.8 8/2/2008: Using General Font: Verdana
09:47:23.8 8/2/2008: Using Title Font: Joystix
09:47:23.8 8/2/2008: Attempting to load game list
09:47:23.9 8/2/2008: Initialising DirectDraw
09:47:24.0 8/2/2008: Creating DirectDraw Device
09:47:24.0 8/2/2008: Using Device: Primary Display Driver
09:47:24.5 8/2/2008: 13mb video memory available
09:47:24.6 8/2/2008: Setting Resolution to 1024x768 32 bit color
09:47:24.6 8/2/2008: Creating DirectDraw Surfaces
09:47:24.6 8/2/2008: Creating Primary Surface - Full Screen Mode
09:47:24.7 8/2/2008: Creating Back Buffer
09:47:24.7 8/2/2008: Loading graphic Surfaces
09:47:24.7 8/2/2008: Display is running at: 1024x768 32bit color, 60hz
09:47:24.8 8/2/2008: Creating Surfaces Flags
09:47:24.8 8/2/2008: Creating Surfaces Misc and Dialogs
09:47:24.9 8/2/2008: Creating Surfaces Volume
09:47:24.9 8/2/2008: Creating Surfaces Arrows
09:47:24.9 8/2/2008: Creating Surfaces GameEXlogo Text
09:47:24.9 8/2/2008: Creating Surfaces Toolbar
09:47:25.0 8/2/2008: Creating Surfaces Backgrounds
09:47:25.1 8/2/2008: Creating Surfaces Toolbar Controls
09:47:25.1 8/2/2008: Creating Surfaces GameEx Logo
09:47:25.1 8/2/2008: Creating Surface Unselected
09:47:25.1 8/2/2008: Creating Surfaces Home & Exit
09:47:25.1 8/2/2008: Creating Surfaces Snaps
09:47:25.1 8/2/2008: Creating Surfaces Menu and List Bars
09:47:25.3 8/2/2008: Creating Fonts
09:47:25.3 8/2/2008: Creating Game Font
09:47:25.5 8/2/2008: Creating Menu Font
09:47:25.5 8/2/2008: Restoring Menu Font From Cache
09:47:25.6 8/2/2008: Creating Font Black
09:47:26.0 8/2/2008: Creating Font Black Small
09:47:26.2 8/2/2008: Creating Game Font Faded
09:47:26.4 8/2/2008: Creating Title Font
09:47:26.4 8/2/2008: Restoring Title Font From Cache
09:47:26.7 8/2/2008: Fonts Created Succesfully
09:47:26.7 8/2/2008: 0mb video memory left available
09:47:26.7 8/2/2008: Creating instance of global keyboard hook
09:47:26.7 8/2/2008: Text/Language: English
09:47:26.7 8/2/2008: Applying Language/Text
09:47:26.8 8/2/2008: Initialising Bass Audio Library
09:47:27.1 8/2/2008: MAME CMD options: -nowindow -joy -skip_gameinfo
09:47:27.1 8/2/2008: Loading last used Game List
09:47:27.1 8/2/2008: Loading Start Page
09:47:27.2 8/2/2008: Setting Music Volume
09:47:27.2 8/2/2008: Creating DirectSound Device
09:47:27.2 8/2/2008: Trying: Primary Sound Driver
09:47:27.2 8/2/2008: Loading Sound Files
09:47:27.3 8/2/2008: DirectSound Device Created Successfully
09:47:27.3 8/2/2008: Creating ICONS
09:47:27.3 8/2/2008: Recreating ICONS
09:47:27.8 8/2/2008: Gamepad/Joystick disabled
09:47:27.8 8/2/2008: Initializing MCE Remote
09:47:27.8 8/2/2008: Playing intro sound file
09:47:27.8 8/2/2008: Initialization OK! Starting GameEx!
09:47:27.8 8/2/2008: Testing Main Loop Once: Processing Frame
09:47:28.9 8/2/2008: Testing Main Loop Once: Main Loop ran successfully
09:47:29.0 8/2/2008: 21 Consecutive Exceptions Occured
09:47:29.0 8/2/2008: Index was outside the bounds of the array.
09:47:29.1 8/2/2008: at q.d()
at q.am()
09:47:29.1 8/2/2008: Trying reinitialising the display after sleeping for 4 seconds
09:47:29.1 8/2/2008: Exception count will be dropped to 15
09:47:35.7 8/2/2008: --**--
09:47:35.7 8/2/2008: 21 Consecutive Exceptions Occured: Exiting
09:47:35.7 8/2/2008: Closing database connection
09:47:35.7 8/2/2008: First Exception:
09:47:35.7 8/2/2008: Index was outside the bounds of the array.
09:47:35.7 8/2/2008: at q.d()
09:47:35.7 8/2/2008: at q.am()
09:47:35.7 8/2/2008: Last Exception:
09:47:35.7 8/2/2008: Index was outside the bounds of the array.
09:47:35.7 8/2/2008: at q.a(Boolean A_0, Boolean A_1, Boolean A_2, Boolean A_3)
09:47:35.7 8/2/2008: at q.am()
09:47:37.3 8/2/2008: Exiting GameEx!
09:47:37.3 8/2/2008: Saving Settings
09:47:38.4 8/2/2008: Disposing Plugins
09:47:38.4 8/2/2008: Checking for applications to Launch On Exit

I ran the Gamex.ini through Beyond Compare before, and after the crash. It doesn;t show too much... the differences are shown in blue...

Text Compare

Produced: 8/2/2008 9:59:23 AM

Mode: Differences, With Context

Left file: H:\RacerX_Config\myGameEx.ini Right file: H:\GameEx.ini

EMU_4_ShowDesktop=True = EMU_4_ShowDesktop=True

EMU_4_Debug=False EMU_4_Debug=False

EMU_4_Command=mess.exe nes -cart

[ROMPath]\[RomFile]
-joy -now -nonewui EMU_4_Command=mess.exe nes -cart
[ROMPath]\[RomFile]
-joy -now -nonewui

EMU_4_DATABASE=[Console] Nintendo NES EMU_4_DATABASE=[Console] Nintendo NES

EMU_4_GamesIn7Zips=False EMU_4_GamesIn7Zips=False

EMU_4_PlayInScreenSaver=False EMU_4_PlayInScreenSaver=False

------------------------------------------------------------------------

TimesRunCount=0 <> TimesRunCount=3

------------------------------------------------------------------------

EMU_9LastFolderWrite=6/12/08 1:24:58 AM = EMU_9LastFolderWrite=6/12/08 1:24:58 AM

EMU_9LastRomFilter= EMU_9LastRomFilter=

EMU_9_ROMFilter=*.* EMU_9_ROMFilter=*.*

EMU_9_RomsInFolders=True EMU_9_RomsInFolders=True

EMU_9_RomPath=J:\Roms\vectrex EMU_9_RomPath=J:\Roms\vectrex

EMU_9_WorkingPath=C:\Emulators\MESS\ EMU_9_WorkingPath=C:\Emulators\MESS\

------------------------------------------------------------------------

------------------------------------------------------------------------

GLaunchListSelected_18=1 = GLaunchListSelected_18=1

GLaunchListTop_18=1 GLaunchListTop_18=1

GLaunchListSelected_40=1 GLaunchListSelected_40=1

GLaunchListTop_40=1 GLaunchListTop_40=1

GLaunchListSelected_39=1 GLaunchListSelected_39=1

GLaunchListTop_39=1 GLaunchListTop_39=1

------------------------------------------------------------------------

-+ CatFilter=

ManuFilter=

YearFilter=

ROMName=

ROMName2=

SpecialFilter=

------------------------------------------------------------------------

=

[DVD] [DVD]

EnableDVD=False EnableDVD=False

Codec=0 Codec=0

DVDFFDSHOW=0 DVDFFDSHOW=0

EnableDVDDisk=False EnableDVDDisk=False

------------------------------------------------------------------------

Edit: The file comparison doesn't show as well as I hoped. If somebody wants to look at this (Tom) I will upload the two versions of my Gameex.ini

Posted

This is the problem I was having for a while. Things would work the first time. I would quit and load again. GameEx would crash. I found that one or two of the "GLaunchListSelected" items was being set to something weird. I think it has to do with moving the selection before GameEx is ready to move it. The result is that it puts the selection out of bounds (like -1 or something) and when GameEx starts up completely, -1 in a list = crash. I think the problem was caused by the pageup/pagedown part of the code, so I commented it out and things seem to work.

Also, are you using any other programs than XPadder, the script, and GameEx? Perhaps something else is moving the mouse without you knowing about it.

Oh, and with BeyondCompare, you can export a report in html format.

Posted

I looked at your script, and changed:

SendPlay {Blind}{up}

To:

SendInput {up DownTemp}

SendInput {up Up}

As you suggested previously....

My code now looks like this:

 

#NoEnv
#SingleInstance force
SetBatchLines -1
Process Priority,,R

BlockInput Mouse ; user mouse input is ignored during MouseMove
CoordMode Mouse, Screen ; absolute coordinates
SetMouseDelay -1 ; fastest action

MouseGetPos x0, y0 ; get initial mouse pointer location
SetTimer WatchMouse, 1 ; run the subroutine fast (10..16ms)
Return

WatchMouse:
IfWinActive GameEx|
{
MouseGetPos x, y ; get current mouse position
GetKeyState, state, LCtrl ; Check if "a" key is pressed
if state = D ; "LCtrl" is down (left/right)
{
If (x < x0)
{
SendInput {left DownTemp}
SendInput {left Up}
}
Else If (x > x0)
{
SendInput {right DownTemp}
SendInput {right Up}
}
} ; "LCtrl" is not down (up/down)
Else
{
If (x < x0)
{
SendInput {down DownTemp}
SendInput {down Up}
}
Else If (x > x0)
{
SendInput {up DownTemp}
SendInput {up Up}
}
}
MouseMove x0, y0, 0 ; set mouse to original location
}
Return

z::ExitApp ; stop the madness

It works, and Gameex does not crash!

Thanks for the help! :)

Posted

Good stuff. Does your code interact with GameEx in any way other than what you send it? If I change themes with mine to one that has the filter stuff in the area where the mouse is 'trapped', it will freak out. I dealt with it by simply moving where I was trapping the mouse.

Posted
Good stuff. Does your code interact with GameEx in any way other than what you send it? If I change themes with mine to one that has the filter stuff in the area where the mouse is 'trapped', it will freak out. I dealt with it by simply moving where I was trapping the mouse.

I could be reading this the wrong way but.... I think what you are saying is that if I have problems, then I should put in the code that you have to place the mouse in a position that will not interfere with GX. Another problem that I assume could happen without that code is that if the cursor was in one of the extreme edges, then the script would not work, because X may not be able to be < or > XO.

You see I don't think you were really asking me a question, because I'm pretty sure you knew the answer, especially since you answered it yourself. :P

Don't take me wrong, I appreciate the help, and advice, but you pretty much have to club me over the head with something before it sinks in. If that weren't true, then I would have done this:

I looked at your script, and changed:

SendPlay {Blind}{up}

To:

SendInput {up DownTemp}

SendInput {up Up}

sooner... ;)

From now on, I would like it if when you are trying to help if you would begin your post with LJA (look jack-ass), "Insert advice here" :lol:

You won't hurt my feelings... I Promise! :)

Posted

EDIT: LJA... ;)

Naw, I was curious if your script worked better...really! I was new to writing AHK scripts when I put that one together, so I didn't know all the tricks (not that I know that many more now). If there's a way to get the AHK script to keep the mouse from sending GameEx inputs, that would be ideal.

I was hoping to check out your version today, but my wife and I took the pup up to the mountains today and didn't get back till late. I want to check it out, so when I do, I'll let you know how much better than mine it is :P

Posted

First off, I'm a little disappointed that your post didn't start off with "LJA"... :P

I haven't had any problems with my script so far...But as you know, I spend way more time getting things to work than I do playing the games. When I do play, I have a tendency to play on my Tempest machine. (I've been having issues with that too, so I call it "testing".) I found a loose wire on it, which I thought fixed everything, but a couple of days ago it started acting weird again (graphics FU), so I cleaned the edge connectors, and so far so good... What were we talking about? Oh yeah...

I guess I couldn't tell you a whole lot. For some reason, your script crashes GX on my machine, and mine doesn't. If yours works for you, then the biggest advatage I can see with mine is that it would be real easy to convert Left/right to pg up/down with the existing key combo... Or ypu could add a separate keypress for pg up/down. Of course if you wanted to use a key combo, it wouldn't be difficult to add the code to your script either....

I still think the biggest thing is that I'm asking for trouble leaving the mouse where the user left it, but I haven't tested that either... I'll have to put it on my "to do" list.

This was my first script as well, and I started with a script from AHK forums... This line:

BlockInput Mouse		  ; user mouse input is ignored during MouseMove

came from there, and I assume it would fix your problems.

I look forward to hearing the results of your testing...

Edit: I looked up "blockinput mouse" in the AHK help file. I'm sure it was the correct code for the script I copied, but in my script it should probably be "blockinput mousemove".

Posted

I had a couple of minutes to play with this... I don't think that any variation of "Block input" belongs in this script... If you see it differently let me know.

Posted

I've been playing with the script you uploaded and ended up rewriting mine since it had "features" that didn't work and basically made it very complicated. I also changed the way I did things so I don't have the mouse trapped in a small box, I use the whole screen. This probably won't make a difference for anything right now, but I really want to figure out a way to use this for playing 270° steering wheel games in MAME at some point. In fact, if this could work in other games, maybe I can get NFS going! That would be sweet!!!!!!

Mouse2Key_v2.1.zip

  • 2 weeks later...
Posted

BK,

Would you mind taking a minute and explaining to me about the 270 steering wheel issue? From what I've read, you should be able to play 270 steering wheel (paddle) games with a 360 steering wheel (spinner). As usual, I feel I'm missing something, maybe I should get off of my butt, and actually try playing a game? :P

Copied from BYOAC:

"Most emulators will let you play paddle games with a spinner, but spinner games are generally not playable with paddles, mostly due to the fact that paddles just don't spin that well."

Posted

I read that before deciding to go with the 360 cabinet build. I was anticipating being able to play 270 games without any problems. In practice though, the steering wheel didn't work as well as I had hoped. I can't remember exactly what the issues were, if you got off your lazy butt, you might figure them out yourself ;)

As I recall, turning the wheel past 135 left or right would stop rotation in the game (as it should), but when you turned back the other way, it didn't act quite right. I think moved the center of the wheel in a way that didn't feel natural. The best way to go would be to install physical blocks to keep the wheel from turning past 135 each way, but that's a bit complicated. Try a couple games and tell me if I'm off my rocker...

  • 2 weeks later...
Posted

BK,

I don't know what I did, but the script was working great, but now it doesn't! I re-downloaded your Mouse2key v2.1 script, and it didn't help. The strange thing is that if I run the script with the Advanced Configuration program open, it will navigate in that. I must have changed a setting in Gameex... Do you have any ideas?

Posted

Did you enable custom inputs? I think that might have caused some problems. I'm out of town now, but can check my config against yours tomorrow if you upload your ini. I have to pick up my dog from the trainer, but should have some time to take a look.

Posted

Damn! That was a good idea!

I downloaded your racer_x.zip again, and compared your .ini to mine. I would have bet money that I hadn't changed anything, but obviously I did. Not only did I enable custum keyboard input, but I also enabled keyboard direct input, apparently either of which will stop the script from running.

Thanks for the tip! I have to go now... (and make a backup of my Gameex.ini)! :P

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...