First, is their a reason not to stick with 0 as the value for the delay? Please review previous notes for what the delay does -- it's only helpful for situations where you have _any_ window on your system that has failed or is CPU-intensive and does not respond to required for text or icon.
If you still want to leave the parameter non-zero: Have you reviewed the notes I sent about optimizing the loop by moving the gethandle outside of it, rather than doing a caption match within the loop? Have a look if you have not already. That optimization may help.
I don't understand why you are using unicode unless sendstring is unicode. Is it?
I don't see why using native win.sendcopydata would be more efficient that using unicode plugin. Do you have a reason you want to do that?
If you think you do, there is a win.sendcopydatau in the unicode version of win. and you could call it from .35 by:
Getting the win plugin from the Unicode install (install .37 to some other folder).
Rename it to (say) winu.dll and
copy .winu.dll to 35 plugins folder under exe folder.
Then you'd use unicode plugin to make UTF16 as utf8
then sending that UTF8 with winu.sendcopydatau.
There's a bit more on renaming plugins the help as well, (although not specifically for this purpose). However, as per above, doubt this will matter.
The unicode plugin is not obsolete. Although many of its functions can now be performed from .37, some cannot. If you are interested in details, see the help second on unicode support, subsection on, using the unicode plugin.