2015-04-20 14:26:30 +02:00
|
|
|
# -----------------------------------------------------------------------
|
|
|
|
# Standalone and testing code
|
|
|
|
import sys
|
|
|
|
try:
|
|
|
|
import pywraps
|
|
|
|
pywraps_there = True
|
|
|
|
print "Using pywraps"
|
|
|
|
except:
|
|
|
|
pywraps_there = False
|
|
|
|
print "Not using pywraps"
|
|
|
|
|
|
|
|
try:
|
|
|
|
import _idaapi
|
|
|
|
except:
|
|
|
|
print "Please try me from inside IDA"
|
|
|
|
sys.exit(0)
|
|
|
|
|
|
|
|
if pywraps_there:
|
|
|
|
_idaapi.execute_sync = pywraps.py_execute_sync
|
|
|
|
_idaapi.add_hotkey = pywraps.py_add_hotkey
|
|
|
|
_idaapi.del_hotkey = pywraps.py_del_hotkey
|
|
|
|
|
|
|
|
# -----------------------------------------------------------------------
|
|
|
|
#<pycode(py_kernwin)>
|
|
|
|
DP_LEFT = 0x0001
|
|
|
|
DP_TOP = 0x0002
|
|
|
|
DP_RIGHT = 0x0004
|
|
|
|
DP_BOTTOM = 0x0008
|
|
|
|
DP_INSIDE = 0x0010
|
|
|
|
# if not before, then it is after
|
|
|
|
# (use DP_INSIDE | DP_BEFORE to insert a tab before a given tab)
|
|
|
|
# this flag alone cannot be used to determine orientation
|
|
|
|
DP_BEFORE = 0x0020
|
|
|
|
# used with combination of other flags
|
|
|
|
DP_TAB = 0x0040
|
|
|
|
DP_FLOATING = 0x0080
|
|
|
|
|
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
def load_custom_icon(file_name=None, data=None, format=None):
|
|
|
|
"""
|
|
|
|
Loads a custom icon and returns an identifier that can be used with other APIs
|
|
|
|
|
|
|
|
If file_name is passed then the other two arguments are ignored.
|
|
|
|
|
|
|
|
@param file_name: The icon file name
|
|
|
|
@param data: The icon data
|
|
|
|
@param format: The icon data format
|
|
|
|
|
|
|
|
@return: Icon id or 0 on failure.
|
|
|
|
Use free_custom_icon() to free it
|
|
|
|
"""
|
|
|
|
if file_name is not None:
|
|
|
|
return _idaapi.py_load_custom_icon_fn(file_name)
|
|
|
|
elif not (data is None and format is None):
|
|
|
|
return _idaapi.py_load_custom_icon_data(data, format)
|
|
|
|
else:
|
|
|
|
return 0
|
|
|
|
|
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
def asklong(defval, format):
|
|
|
|
res, val = _idaapi._asklong(defval, format)
|
|
|
|
|
|
|
|
if res == 1:
|
|
|
|
return val
|
|
|
|
else:
|
|
|
|
return None
|
|
|
|
|
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
def askaddr(defval, format):
|
|
|
|
res, ea = _idaapi._askaddr(defval, format)
|
|
|
|
|
|
|
|
if res == 1:
|
|
|
|
return ea
|
|
|
|
else:
|
|
|
|
return None
|
|
|
|
|
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
def askseg(defval, format):
|
|
|
|
res, sel = _idaapi._askseg(defval, format)
|
|
|
|
|
|
|
|
if res == 1:
|
|
|
|
return sel
|
|
|
|
else:
|
|
|
|
return None
|
|
|
|
|
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
class action_handler_t:
|
|
|
|
def __init__(self):
|
|
|
|
pass
|
|
|
|
|
|
|
|
def activate(self, ctx):
|
|
|
|
return 0
|
|
|
|
|
|
|
|
def update(self, ctx):
|
|
|
|
pass
|
|
|
|
|
|
|
|
#</pycode(py_kernwin)>
|
|
|
|
|
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
from threading import Thread
|
|
|
|
import time
|
|
|
|
|
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
def myfunction(cnt):
|
|
|
|
i = 1
|
|
|
|
while i <= cnt:
|
|
|
|
print "i=", i
|
|
|
|
i += 1
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
print "done!"
|
|
|
|
|
|
|
|
def test_thread():
|
|
|
|
t = Thread(target=myfunction, args=(2,))
|
|
|
|
|
|
|
|
t.start()
|
|
|
|
t.join()
|
|
|
|
|
|
|
|
# ----------------------------------------------------------------------
|
|
|
|
def hotkey_func1():
|
|
|
|
print "Hello from hotkey handler in Python!"
|