AutoHotkey Community

It is currently May 25th, 2012, 10:49 pm

All times are UTC [ DST ]




Post new topic Reply to topic  [ 13 posts ] 

What is your favorite mode?
"i" - Original SendU
"c" - Clipboard (clear)
"r" - Clipboard (restore)
"a" - built-in {ASC nnnn}
You may select 1 option

View results
Author Message
 Post subject: Extended SendU function
PostPosted: November 13th, 2007, 6:23 pm 
Offline

Joined: October 28th, 2007, 10:41 am
Posts: 75
Location: Hungary, Érd
The original SendU function is very good and useful, but some program (like Total Commander) cannot receive characters with them. I extend this with clipboard function: copy the unicode char to clipboard and paste it to the program. It works well. Now it has a dynamic mode: it uses the original function, if it works well with the active process. Currently there is only few program detected. Please, send me AN EMAIL (fmate 144 at google's mail), if you find a best mode for a program.

SendU.ahk, SendUTest.ahk, Changelog.txt, CoHelper

File name: SendUTest.ahk
Code:
SendU_Init()
Hotkey, #F12, _SendU_Change_Dynamic_Mode
Hotkey, #F11, _SendU_Toggle_Clipboard_Restore_Mode
return

#q::
   ; Send Information Separator Four (In Total Commander: goto to the root directory)
   SendCh( 0x1c )
return

#s::
   ; Send with dynamic mode. Very easy. :)
   ; Is this O with double acute (O")?
   ; Try other modes (Win+F12)!
   SendU(0x150) ; O"
   SendU(0x151) ; o"
return


#Include SendU.ahk ; http://autohotkey.try.hu/SendU/SendU.ahk


Sorry my english.


Last edited by fmate14 on March 3rd, 2008, 7:39 pm, edited 7 times in total.

Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: November 13th, 2007, 7:30 pm 
Offline

Joined: February 14th, 2005, 4:05 pm
Posts: 4710
Location: Boulder, CO
Very useful collection of functions, and written cleanly, so they are easy to follow!

A few trivial (and unnecessary) simplifications:
- In the function SendUMode you could initialize the variable mode: “static mode = i”, so there will be no need to check if it is empty.
- In the function SendUSaveClipboard you could use “cb := ClipboardALL” to save non-text contents, too.
- In the function _SendUInput you can get rid of the variable “initialized”, if you check the allocated size of “buffer” (initially 0). Or, initialize it to an arbitrary value “static buffer = #” and check “if buffer = #”.
- The function _SendUGetGlobal could contain a single line: “ return %var% . "" ”.


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: November 13th, 2007, 7:42 pm 
Offline

Joined: February 14th, 2005, 4:05 pm
Posts: 4710
Location: Boulder, CO
For some reasons the Clipboard method does not work with the latest MS Word and Wordpad, under Vista. It is OK in Notepad.

Adding some delay (Sleep 50…500) in the _SendUClipboard function between “SendInput ^v” and “Clipboard = ;” fixes the problem. I guess, in the original the Clipboard gets cleared before the sent Ctrl-V could have pasted it.


Report this post
Top
 Profile  
Reply with quote  
 Post subject: Thank you
PostPosted: November 13th, 2007, 10:50 pm 
Offline

Joined: October 28th, 2007, 10:41 am
Posts: 75
Location: Hungary, Érd
Laszlo wrote:
A few trivial (and unnecessary) simplifications:

Thank you very much!


Last edited by fmate14 on November 14th, 2007, 5:38 pm, edited 1 time in total.

Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: November 13th, 2007, 11:12 pm 
Offline
User avatar

Joined: August 30th, 2005, 8:43 pm
Posts: 8666
Location: Salem, MA
please edit the first post to keep it updated.

_________________
Image
(Common Answers) - New Tutorials Forum - Humongous FAQ


Report this post
Top
 Profile  
Reply with quote  
 Post subject: UPDATED!
PostPosted: January 21st, 2008, 9:56 pm 
Offline

Joined: October 28th, 2007, 10:41 am
Posts: 75
Location: Hungary, Érd
I update my script with dynamic mode.
Clipboard mode for TotalCommander, original mode for Firefox, etc.
Easy to use, easy to switch.


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: March 2nd, 2008, 7:29 pm 
Offline

Joined: February 16th, 2008, 12:28 am
Posts: 43
Just a suggestion. Do all of the following:

Step 1. Remove the return that appears immediately before the gosub routine _SendU_Remove_Tooltip.

Step 2. Move the gosub routine _SendU_Remove_Tooltip from its position near the end of the file to inside the function _SendU_Dynamic_Mode_Tooltip, at the very end of the function, with a return immediately preceding it.

Step 3. In the same way, move the gosub routine _SendU_restore_Clipboard from its position near the end of the file to inside the function _SendU__SendU_Clipboard_Mode_Tooltip, at the very end of the function, with a return immediately preceding it.

Step 4. Comment out or delete the gosub routines _SendU_Try_Dynamic_Mode (which is co-labeled with _SendU_Change_Dynamic_Mode) and _SendU_Toggle_Clipboard_Restore_Mode, because they don't appear to be used at all. If they're meant to be used by a script that includes SendU, turn them into functions.

If you do this, the module can be #included anywhere within another script without fear that the return mentioned in Step 1 will cause non-execution of any code that follows the #include. This happened to me when I included SendU near the top of a script I wrote, so I made the above changes and everything works fine.

When you're done, the script should look like this (and if you delete the gosub routines at the end instead of commenting them out, the "LABELS AND INCLUDES" comment will be unnecessary):
Code:
/*
------------------------------------------------------------------------

SendU module for sending Unicode characters
http://www.autohotkey.com

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

Version: 0.0.9 2008-01-22 public beta
License: GNU General Public License
Author: FARKAS Máté <http://fmate14.try.hu> (My given name is Máté)

Tested Platform:  Windows XP/Vista
Tested AutoHotkey Version: 1.0.47.04
Lastest version: http://autohotkey.try.hu/SendU/SendU.ahk

Contributors:
   * Laszlo Hars <www.Hars.US>
      original SendU function, _SendU_UnicodeChar function
      and some bugfixes
   * Shimanov
      original SendU function

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

If you would like help to me...
Please correct my english misspellings...

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

TODO: save/load dynamic modes to/from file
TODO: detect best modes for processes (programs). I need help.

------------------------------------------------------------------------
*/

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;
; PUBLIC GLOBAL VARIABLES FOR LOCALIZE
; See the _SendU_Load_Locale() function!

; PRIVATE GLOBAL VARIABLES
; _SendU_*** : unicode number -> utf8 character

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; PUBLIC FUNCTIONS

SendCh( Ch ) ; Character number code, for example 97 (or 0x61) for 'a'
{
   Ch += 0
   if ( Ch < 0 ) {
      ; What do you want???
      return
   } else if ( Ch < 33 ) {
      ; http://en.wikipedia.org/wiki/Control_character#How_control_characters_map_to_keyboards
      Char = ;
      if ( Ch == 32 ) {
         Char = {Space}
      } else if ( Ch == 9 ) {
         Char = {Tab}
      } else if ( Ch > 0 && Ch <= 26 ) {
         Char := "^" . Chr( Ch + 64 )
      } else if ( Ch == 27 ) {
         Char = ^{VKDB}
      } else if ( Ch == 28 ) {
         Char = ^{VKDC}
      } else if ( Ch == 29 ) {
         Char = ^{VKDD}
      } else {
         SendU( Ch )
         return
      }
      Send %Char%
   } else if ( Ch < 129 ) {
      ; ASCII characters
      Char := "{" . Chr( Ch ) . "}"
      Send %Char%
   } else {
      ; Unicode characters
      SendU( Ch )
   }
}


SendU( UC )
{
   UC += 0
   if ( UC <= 0 )
      return
   mode := SendU_Mode()
   if ( mode = "d" ) { ; dymamic
      WinGet, pn, ProcessName, A
      mode := _SendU_Dynamic_Mode( pn )
   }
   
   if ( mode = "i" ) ; input
      _SendU_Input(UC)
   else if ( mode = "c" ) ; clipboard
      _SendU_Clipboard(UC)
   else if ( mode = "a" ) { ; {ASC nnnn}
      if ( UC < 256 )
         UC := "0" . UC
      Send {ASC %UC%}
   } else {
      _SendU_Input(UC)
      ; If dynamic mode is bad...
      ; SendU_Mode("d")
      ; SendU( UC )
   }
}

SendU_Mode( newMode = -1 )
{
   static mode := "i"
   if ( newmode == "d" || newMode == "i" || newmode == "a" || newmode == "c" )
      mode := newMode
   return mode
}

SendU_Clipboard_Restore_Mode( newMode = -1 )
{
   static mode := 1
   if ( newMode == 1 || newMode == 0 ) ; Enable, disable
      mode := newMode
   else if ( newMode == 2 ) ; Toggle
      mode := 1 - mode
   return mode
}

SendU_Try_Dynamic_Mode()
{
   WinGet, processName, ProcessName, A
   mode := _SendU_GetMode( processName )
   if ( mode == "i" )
      mode = a
   else if ( mode == "a" )
      mode = c
   else
      mode = i
   _SendU_Dynamic_Mode_Tooltip( processName, mode )
   _SendU_SetMode( processName, mode )
   _SendU_Dynamic_Mode( "", 1 ) ; Clears the PrevProcess variable
}

SendU_Init( mode = "d" )
{
   SendU_Mode( mode )
   _SendU_Load_Locale()
   _SendU_Load_Dynamic_Modes()
}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

; PRIVATE FUNCTIONS


_SendU_Input( UC )
{
   ; Original SendU function written by Shimanov and Laszlo
   ; http://www.autohotkey.com/forum/topic7328.html
   static buffer := "#"
   if buffer = #
   {
      VarSetCapacity( buffer, 56, 0 )
      DllCall("RtlFillMemory", "uint",&buffer,"uint",1, "uint", 1)
      DllCall("RtlFillMemory", "uint",&buffer+28, "uint",1, "uint", 1)
   }
   DllCall("ntdll.dll\RtlFillMemoryUlong","uint",&buffer+6, "uint",4,"uint",0x40000|UC) ;KEYEVENTF_UNICODE
   DllCall("ntdll.dll\RtlFillMemoryUlong","uint",&buffer+34,"uint",4,"uint",0x60000|UC) ;KEYEVENTF_KEYUP|

   Menu, Tray, Icon,,, 1 ; Freeze the icon
   Suspend On ; SendInput conflicts with scan codes (SC)!
   DllCall("SendInput", UInt,2, UInt,&buffer, Int,28)
   Suspend Off
   Menu, Tray, Icon,,, 0 ; Unfreeze the icon

   return
}

_SendU_Clipboard( UC )
{
   Critical
   restoreMode := SendU_Clipboard_Restore_Mode()
   utf := _SendU_GetVar(UC)
   if not utf
   {
      utf := _SendU_UnicodeChar(UC)
      _SendU_SetVar(UC, utf)
   }
   if restoreMode
      _SendU_SaveClipboard()
   Transform Clipboard, Unicode, %utf%
   ClipWait
   SendInput ^v
   Sleep, 50 ; see http://www.autohotkey.com/forum/viewtopic.php?p=159301#159306
   if restoreMode {
      _SendU_Last_Char_In_Clipboard( Clipboard )
      SetTimer, _SendU_restore_Clipboard, -3000
   }
   Critical, Off
   return

   _SendU_Restore_Clipboard:
      Critical
      if ( _SendU_Last_Char_In_Clipboard() == Clipboard )
         _SendU_RestoreClipboard()
      _SendU_Last_Char_In_Clipboard( "" )
      Critical, Off
   return
}

; --------------------- functions for clipboard mode ----------------------------

_SendU_RestoreClipboard()
{
   _SendU_SaveClipboard(1)
}

_SendU_SaveClipboard( restore = 0 )
{
   static cb
   if ( !restore && _SendU_Last_Char_In_Clipboard() == "" )
      cb := ClipboardALL
   else
      Clipboard := cb
}

_SendU_Last_Char_In_Clipboard( newChar = -1 )
{
   static ch := ""
   if ( newChar <> -1 )
      ch := newChar
   return ch
}

_SendU_UnicodeChar( UC )  ; Return the Utf-8 char from the Unicode numeric code (UC)
{ ; Written by Laszlo Hars
   VarSetCapacity(UText, 4, 0)
   NumPut(UC, UText, 0, "UShort")
   VarSetCapacity(AText, 4, 0)
   DllCall("WideCharToMultiByte"
      , "UInt", 65001  ; CodePage: CP_ACP=0 (current Ansi), CP_UTF7=65000, CP_UTF8=65001
      , "UInt", 0      ; dwFlags
      , "Str",  UText  ; LPCWSTR lpWideCharStr
      , "Int",  -1     ; cchWideChar: size in WCHAR values: Len or -1 (= null terminated)
      , "Str",  AText  ; LPSTR lpMultiByteStr
      , "Int",  4      ; cbMultiByte: Len or 0 (= get required size / allocate!)
      , "UInt", 0      ; LPCSTR lpDefaultChar
      , "UInt", 0)     ; LPBOOL lpUsedDefaultChar
   return %AText%
}

_SendU_Get_Mode_Name( mode )
{
   if ( mode == "c" && SendU_Clipboard_Restore_Mode() )
      mode = r
   m := _SendU_GetVar( "Mode_Name_" . mode )
   if ( m == "" )
      m := _SendU_GetVar( "Mode_Name_0" )
   return m
}

_SendU_Get_Mode_Type( mode )
{
   if ( mode == "c" && SendU_Clipboard_Restore_Mode() )
      mode = r
   m := _SendU_GetVar( "Mode_Type_" . mode )
   if ( m == "" )
      m := _SendU_GetVar( "Mode_Type_0" )
   return m
}

_SendU_Dynamic_Mode_Tooltip( processName = -1, mode = -1 )
{
   tt := _SendU_getVar("DYNAMIC_MODE_TOOLTIP")
   if not tt
      return
   if ( processName = -1 || mode == -1 ) {
      WinGet, processName, ProcessName, A
      mode := _SendU_GetMode( processName )
   }
   WinGetTitle, title, A
   StringReplace, tt,tt, $processName$, %processName%, A
   StringReplace, tt,tt, $title$, %title%, A
   StringReplace, tt,tt, $mode$, %mode%, A
   StringReplace, tt,tt, $modeType$, % _SendU_Get_Mode_Type( mode ), A
   StringReplace, tt,tt, $modeName$, % _SendU_Get_Mode_Name( mode ), A
   ToolTip, %tt%
   SetTimer, _SendU_Remove_Tooltip, 2000
   return

   _SendU_Remove_Tooltip:
      SetTimer, _SendU_Remove_Tooltip, Off
      ToolTip
   return
}

_SendU_Dynamic_Mode( processName, clearPrevProcess = -1 )
{
   static prevProcess := "fOyj9b4f79YmA7sZRBrnDbp75dGhiauj" ; Nothing
   static mode := ""
   if ( clearPrevProcess == 1 )
      prevProcess := "fOyj9b4f79YmA7sZRBrnDbp75dGhiauj" ; Nothing
   if ( processName == prevProcess )
      return mode
   prevProcess := processName
   mode := _SendU_GetMode( processName )
   if ( mode == "" )
      mode = i
   return mode
}

; http://www.autohotkey.com/forum/topic17838.html
_SendU_SetMode( sKey, sItm )
{
   static pdic := 0
   if ( pdic == 0 )
      _SendU_Get_Dictionary( pdic )
   pKey := SysAllocString(sKey)
   VarSetCapacity(var1, 8 * 2, 0)
   EncodeInteger(&var1 + 0, 8)
   EncodeInteger(&var1 + 8, pKey)
   pItm := SysAllocString(sItm)
   VarSetCapacity(var2, 8 * 2, 0)
   EncodeInteger(&var2 + 0, 8)
   EncodeInteger(&var2 + 8, pItm)
   DllCall(VTable(pdic, 8), "Uint", pdic, "Uint", &var1, "Uint", &var2)
   SysFreeString(pKey)
   SysFreeString(pItm)
}

; http://www.autohotkey.com/forum/topic17838.html
_SendU_GetMode( sKey )
{
   static pdic := 0
   if ( pdic == 0 )
      _SendU_Get_Dictionary( pdic )

   pKey := SysAllocString(sKey)
   VarSetCapacity(var1, 8 * 2, 0)
   EncodeInteger(&var1 + 0, 8)
   EncodeInteger(&var1 + 8, pKey)
   DllCall(VTable(pdic, 12), "Uint", pdic, "Uint", &var1, "intP", bExist)
   If bExist
   {
      VarSetCapacity(var2, 8 * 2, 0)
      DllCall(VTable(pdic, 9), "Uint", pdic, "Uint", &var1, "Uint", &var2)
      pItm := DecodeInteger(&var2 + 8)
      Unicode2Ansi(pItm, sItm)
      SysFreeString(pItm)
   }
   SysFreeString(pKey)
   Return sItm
}

_SendU_Get_Dictionary( ByRef mypdic )
{
   static pdic := 0
   if ( pdic == 0 ) {
      ; http://www.autohotkey.com/forum/topic17838.html
      CoInitialize()
      CLSID_Dictionary := "{EE09B103-97E0-11CF-978F-00A02463E06F}"
      IID_IDictionary := "{42C642C1-97E1-11CF-978F-00A02463E06F}"
      pdic := CreateObject(CLSID_Dictionary, IID_IDictionary)
      DllCall(VTable(pdic, 18), "Uint", pdic, "int", 1) ; Set text mode, i.e., Case of Key is ignored. Otherwise case-sensitive defaultly.
   }
   mypdic := pdic
}

_SendU_Load_Dynamic_Modes()
{
   _SendU_SetMode( "totalcmd.exe", "c" )
   _SendU_SetMode( "skype.exe", "c" )
}

; --------------------- other functions ----------------------------

_SendU_SetVar( var, value )
{
   global
   _SendU_%var% := value
}

_SendU_GetVar( var )
{
   global
   return _SendU_%var% . ""
}

_SendU_Default_Value( var, value )
{
   global
   if ( _SendU_%var% . "" == "" )
      _SendU_%var% := value
}

_SendU_Load_Locale()
{
   stringLower, lang, A_Language
   if ( lang == "040e" ) { ; Hungarian
      _SendU_Default_Value("DYNAMIC_MODE_TOOLTIP", "Új mód a(z) $processName$ programhoz`n($title$)`n ""$mode$"" ($modeName$ - $modeType$)")
     
      _SendU_Default_Value("Mode_Name_i", "SendInput")
      _SendU_Default_Value("Mode_Name_c", "Vágólap")
      _SendU_Default_Value("Mode_Name_r", "Vágólap helyreállítással")
      _SendU_Default_Value("Mode_Name_a", "Alt+Számbillentyuzet")
      _SendU_Default_Value("Mode_Name_d", "Dinamikus")
      _SendU_Default_Value("Mode_Name_0", "Ismeretlen")
     
      _SendU_Default_Value("Mode_Type_i", "a legjobb, ha muködik")
      _SendU_Default_Value("Mode_Type_c", "törli a vágólapot")
      _SendU_Default_Value("Mode_Type_r", "talán lassú")
      _SendU_Default_Value("Mode_Type_a", "talán nem muködik")
      _SendU_Default_Value("Mode_Type_d", "programoktól függo dinamikus mód")
      _SendU_Default_Value("Mode_Type_0", "ismeretlen mód")
   } else { ; English -- please, correct my mispellings!
      _SendU_Default_Value("DYNAMIC_MODE_TOOLTIP", "New mode for $processName$`n($title$)`nis ""$mode$"" ($modeName$ - $modeType$)")
     
      _SendU_Default_Value("Mode_Name_i", "SendInput")
      _SendU_Default_Value("Mode_Name_c", "Clipboard")
      _SendU_Default_Value("Mode_Name_r", "Restore Clipboard")
      _SendU_Default_Value("Mode_Name_a", "Alt+Numbers")
      _SendU_Default_Value("Mode_Name_d", "Dynamic")
      _SendU_Default_Value("Mode_Name_0", "Unknown")
     
      _SendU_Default_Value("Mode_Type_i", "the best, if works")
      _SendU_Default_Value("Mode_Type_c", "clears the clipboard")
      _SendU_Default_Value("Mode_Type_r", "maybe slow")
      _SendU_Default_Value("Mode_Type_a", "maybe not work")
      _SendU_Default_Value("Mode_Type_d", "dynamic mode for the programs")
      _SendU_Default_Value("Mode_Type_0", "unknown mode")
   }
}


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; LABELS AND INCLUDES
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

/*
_SendU_Try_Dynamic_Mode:
_SendU_Change_Dynamic_Mode:
   SendU_Try_Dynamic_Mode()
return

_SendU_Toggle_Clipboard_Restore_Mode:
   SendU_Clipboard_Restore_Mode( 2 )
   _SendU_Dynamic_Mode_Tooltip()
return
*/

#include CoHelper.ahm

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; END OF SENDU MODULE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


Report this post
Top
 Profile  
Reply with quote  
 Post subject: Version 0.0.11
PostPosted: March 3rd, 2008, 7:45 pm 
Offline

Joined: October 28th, 2007, 10:41 am
Posts: 75
Location: Hungary, Érd
Piz wrote:
Just a suggestion. Do all of the following:
...
If you do this, the module can be #included anywhere within another script without fear that the return mentioned in Step 1 will cause non-execution of any code that follows the #include. This happened to me when I included SendU near the top of a script I wrote, so I made the above changes and everything works fine.


Thank your for reporting this. But... you forgot one think: write you as contributor. :) I upload the new version, you can download, see the first post.

But... issues with #include is... a really problem, not only with my script. (I correct it in this file)

You can use this:

Filename: n.ahk
Code:
valueOfN = 42
return ; Problem with #include !!!


Filename m.ahk
Code:
initn()
{
   global
   #include n.ahk
}

initn()
MsgBox, %valueOfN%

_________________
Portable Keyboard Layout
Happy Sunday


Report this post
Top
 Profile  
Reply with quote  
 Post subject: Re: Version 0.0.11
PostPosted: March 3rd, 2008, 9:24 pm 
Offline

Joined: February 16th, 2008, 12:28 am
Posts: 43
fmate14 wrote:
Thank your for reporting this. But... you forgot one think: write you as contributor. :) I upload the new version, you can download, see the first post.

Thanks, glad to help.

fmate14 wrote:
But... issues with #include is... a really problem, not only with my script. (I correct it in this file)

You can use this:

Filename: n.ahk
Code:
valueOfN = 42
return ; Problem with #include !!!


Filename m.ahk
Code:
initn()
{
   global
   #include n.ahk
}

initn()
MsgBox, %valueOfN%

True, unless the included file contains functions, which can't be defined within other functions. We just have to rely on authors to be careful. :)


Report this post
Top
 Profile  
Reply with quote  
 Post subject: Re: Version 0.0.11
PostPosted: March 3rd, 2008, 10:30 pm 
Piz wrote:
True, unless the included file contains functions, which can't be defined within other functions.

Oh, I forgot this. Sorry.

Then... you can use this:
Code:
gosub initn
MsgBox, %valueOfN%

initn:
   #include n.ahk
return


Report this post
Top
  
Reply with quote  
 Post subject: shorter procedure?
PostPosted: April 26th, 2008, 4:00 pm 
Offline

Joined: August 1st, 2006, 10:41 am
Posts: 36
Szia Máté,

I need exactly this function, a SendU that can be switched to using the clipboard.
I just wanted to start programming it myself when I came across this thread.

However, your procedure is quite long (compared to the original Shimanov version that I currently use) and you seem to have added some functions that are convenient but not critically necessary.

How would the code loook like for a SendU just with additional clipboard mode?

Nagyon köszönöm

Bernd


Report this post
Top
 Profile  
Reply with quote  
 Post subject:
PostPosted: February 27th, 2010, 4:48 pm 
can this functions handle Null character a.k.a CHR(0)?
I need this Null chraracter in AHK for my project.

Thanks in advance
;)


Report this post
Top
  
Reply with quote  
 Post subject:
PostPosted: February 28th, 2010, 4:04 am 
Offline

Joined: October 17th, 2006, 4:15 pm
Posts: 7501
Location: Australia
It seems to send the appropriate message. I confirmed by watching KeyHistory for this:
Code:
E7  000   i   d   0.03   not found         
E7  000   i   u   0.00   not found         
E7 is VK_PACKET, which is generated by SendInput(). 000 shows the first byte of the Unicode character code.

Most/all controls appear to ignore these null messages; why do you think you need it?


Btw, AHKL supports sending Unicode natively.
Code:
Send ∞      ; 0x221e
Send {U+0}  ; null char, probably won't have any effect


Report this post
Top
 Profile  
Reply with quote  
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 13 posts ] 

All times are UTC [ DST ]


Who is online

Users browsing this forum: ELengefeld and 6 guests


You can post new topics in this forum
You can reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Powered by phpBB® Forum Software © phpBB Group