tSIP: calling selected number
tSIP 0.2.07.06 adds option to run script file directly on hotkey (without using programmable button as middleman which was not too elegant) and keybd_event Lua function (WinAPI equivalent, but with 4th parameter ignored).
Script below uses this function to send Ctrl+C key combination (possibly copying selected text to clipboard from other application if assigned to global hotkey) and calls to number from clipboard.
Notes:
- script waits up to 10 seconds until all keys are up first to ensure that Ctrl+C are the only active keys
- you might want to modify character filter ("[^+0123456789*#ABCD]") according to your dialing rules; additional number processing can be added
- according to your needs you might choose another action (e.g. sending DTMFs) if call is already active/confirmed
local function testflag(set, flag)
return set % (2*flag) >= flag
end
local winapi = require("tsip_winapi")
-- wait until all keys are up
local allUp
for i = 1, 500 do
allUp = true
for j = 1, 255 do
local keyState = winapi.GetAsyncKeyState(j)
if testflag(keyState, 32768) then
allUp = false
break
end
end
if allUp == true then
break;
end
Sleep(20)
end
if allUp == false then
print("Timed-out waiting for key release, can't send key combination!\n")
return
end
local KEYEVENTF_KEYDOWN = 0x0000
local KEYEVENTF_EXTENDEDKEY = 0x0001
local KEYEVENTF_KEYUP = 0x0002
-- simulating Ctrl+C keypress
winapi.keybd_event(0xA2, 0, KEYEVENTF_KEYDOWN) -- 0xA2 = Left Ctrl
winapi.keybd_event(0x43, 0, KEYEVENTF_KEYDOWN) -- 0x43 = 'C' key
Sleep(20)
winapi.keybd_event(0x43, 0, KEYEVENTF_KEYUP)
winapi.keybd_event(0xA2, 0, KEYEVENTF_KEYUP)
Sleep(50)
local clipboardText = GetClipboardText()
print(string.format("Clipboard text = [%s]\n", clipboardText))
-- this removes all characters outside of defined set
target = clipboardText:gsub("[^+0123456789*#ABCD]", "")
if target ~= "" then
Call(target)
end
Back to howto list.