मैं अजगर में हॉटस्ट्रिंग बनाना चाहता हूं जो कुछ प्रसंस्करण के बाद एक शब्द को दूसरे में टाइप करने पर परिवर्तित करता है, क्योंकि एएचके बहुत सीमित है जब यह निर्धारित करने की बात आती है कि किस शब्द को टाइप करना है। अभी, मैं एएचके में एक हॉटस्ट्रिंग का उपयोग कर रहा हूं जो कमांड लाइन पर कोड चलाता है जो एक पायथन स्क्रिप्ट को उस शब्द के साथ चलाता है जिसे मैंने तर्क के रूप में टाइप किया था। फिर मैं शब्द टाइप करने के लिए pyautogui का उपयोग करता हूं। हालाँकि, यह बहुत धीमा है और गति से टाइप करने पर काम नहीं करता है। मैं यह सब अजगर के साथ और आह के बिना करने का एक तरीका ढूंढ रहा हूं, लेकिन मुझे अजगर में हॉटस्ट्रिंग करने का कोई तरीका नहीं मिला है। उदाहरण के लिए, हर बार जब मैं "परीक्षण" शब्द टाइप करता हूं तो यह इसे "परीक्षण" से बदल देता है। आपकी सहायता के लिए धन्यवाद। मैं पायथन और विंडोज 10 का नवीनतम संस्करण चला रहा हूं, अगर यह किसी के लिए भी उपयोगी है।
1 उत्तर
(यदि आप इसे संसाधित करना चाहते हैं क्योंकि प्रत्येक अक्षर टाइप किया गया है (टी, टी, टीईएस, टेस्ट), तो आपको अपना प्रश्न संपादित करना चाहिए)
मैं ahk हॉटकी का उपयोग करके अपने SymPy फ़ंक्शन को कॉल करता हूं। मैं अजगर स्क्रिप्ट को COM सर्वर के रूप में पंजीकृत करता हूं और ahk का उपयोग करके इसे लोड करता हूं।
मुझे कोई विलंबता नहीं दिखाई दे रही है।
आपको pywin32 की आवश्यकता होगी, लेकिन pip install pywin32
. का उपयोग करके डाउनलोड न करें https://github.com/mhammond/pywin32/releases
से डाउनलोड करें या फिर यह AutoHotkeyU64.exe के लिए काम नहीं करेगा, यह केवल AutoHotkeyU32.exe के लिए काम करेगा।
amd64 डाउनलोड करना सुनिश्चित करें, (मैंने pywin32-300.win-amd64-py3.8.exe डाउनलोड किया)
ऐसा क्यों है: 64bit python COM सर्वर को कैसे रजिस्टर करें< /ए>
Toअपरकेस COM server.py
class BasicServer:
# list of all method names exposed to COM
_public_methods_ = ["toUppercase"]
@staticmethod
def toUppercase(string):
return string.upper()
if __name__ == "__main__":
import sys
if len(sys.argv) < 2:
print("Error: need to supply arg (""--register"" or ""--unregister"")")
sys.exit(1)
else:
import win32com.server.register
import win32com.server.exception
# this server's CLSID
# NEVER copy the following ID
# Use "print(pythoncom.CreateGuid())" to make a new one.
myClsid="{C70F3BF7-2947-4F87-B31E-9F5B8B13D24F}"
# this server's (user-friendly) program ID
myProgID="Python.stringUppercaser"
import ctypes
def make_sure_is_admin():
try:
if ctypes.windll.shell32.IsUserAnAdmin():
return
except:
pass
exit("YOU MUST RUN THIS AS ADMIN")
if sys.argv[1] == "--register":
make_sure_is_admin()
import pythoncom
import os.path
realPath = os.path.realpath(__file__)
dirName = os.path.dirname(realPath)
nameOfThisFile = os.path.basename(realPath)
nameNoExt = os.path.splitext(nameOfThisFile)[0]
# stuff will be written here
# HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\${myClsid}
# HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{C70F3BF7-2947-4F87-B31E-9F5B8B13D24F}
# and here
# HKEY_LOCAL_MACHINE\SOFTWARE\Classes\${myProgID}
# HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Python.stringUppercaser
win32com.server.register.RegisterServer(
clsid=myClsid,
# I guess this is {fileNameNoExt}.{className}
pythonInstString=nameNoExt + ".BasicServer", #toUppercase COM server.BasicServer
progID=myProgID,
# optional description
desc="return uppercased string",
#we only want the registry key LocalServer32
#we DO NOT WANT InProcServer32: pythoncom39.dll, NO NO NO
clsctx=pythoncom.CLSCTX_LOCAL_SERVER,
#this is needed if this file isn't in PYTHONPATH: it tells regedit which directory this file is located
#this will write HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{C70F3BF7-2947-4F87-B31E-9F5B8B13D24F}\PythonCOMPath : dirName
addnPath=dirName,
)
print("Registered COM server.")
# don't use UseCommandLine(), as it will write InProcServer32: pythoncom39.dll
# win32com.server.register.UseCommandLine(BasicServer)
elif sys.argv[1] == "--unregister":
make_sure_is_admin()
print("Starting to unregister...")
win32com.server.register.UnregisterServer(myClsid, myProgID)
print("Unregistered COM server.")
else:
print("Error: arg not recognized")
आपको सबसे पहले अजगर COM सर्वर को पंजीकृत करना होगा:
सबसे पहले, अपना स्वयं का CLSID प्राप्त करें: बस एक अजगर खोल का उपयोग करें।
import pythoncom
print(pythoncom.CreateGuid())
फिर, उस आउटपुट पर myClsid
सेट करें
रजिस्टर करने के लिए:
python "toUppercase COM server.py" --register
अपंजीकृत करने के लिए:
python "toUppercase COM server.py" --unregister
हॉटस्ट्रिंग अजगर toUppercase.ahk
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
#SingleInstance, force
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
SetBatchLines, -1
#KeyHistory 0
ListLines Off
#Persistent
#MaxThreadsPerHotkey 4
pythonComServer:=ComObjCreate("Python.stringUppercaser")
; OR
; pythonComServer:=ComObjCreate("{C70F3BF7-2947-4F87-B31E-9F5B8B13D24F}") ;use your own CLSID
; * do not wait for string to end
; C case sensitive
:*:hello world::
savedHotstring:=A_ThisHotkey
;theActualHotstring=savedHotstring[second colon:end of string]
theActualHotstring:=SubStr(savedHotstring, InStr(savedHotstring, ":",, 2) + 1)
send, % pythonComServer.toUppercase(theActualHotstring)
return
f3::Exitapp
आप हॉटस्ट्रिंग hello world
की गति का परीक्षण कर सकते हैं, यह मेरे लिए बहुत तेज़ है।
अपनी पसंद के अनुसार def toUppercase(string):
संपादित करें
python COM server.py
नाम की एक फ़ाइल बनाने की आवश्यकता है, हालाँकि आप फ़ाइल नाम बदल सकते हैं, लेकिन आपको इसे हर जगह बदलना होगाऔर कोड को कॉपी पेस्ट करना होगा
फिर फ़ाइल के अंदर
python COM server.py
, बदलें आपके अपने CLSID के लिए _reg_clsid_
का मान जो मैंने आपको बताया थाफिर USING COMMAND LINE को चलाएं (मैंने cmd का उपयोग किया)
python "python COM server.py" --register
क्या आपने ऐसा किया? क्या यह सफल रहा? (सीएमडी को
Registered: Python.stringUppercaser
कहना चाहिए)
मुझे मेरा कोड [इस सटीक जगह] से मिला है [1], मुझे कोड को थोड़ा संपादित करना पड़ा। मुझे अपने जैसे लोगों की मदद के लिए इस कोड को उस थ्रेड पर पोस्ट करना चाहिए... [1]: autohotkey.com/boards/viewtopic.php?t=29394
import admin
और व्यवस्थापक को अन्य संदर्भों पर टिप्पणी करनी थी। जाहिर है, यह डिफ़ॉल्ट रूप से पायथन का हिस्सा नहीं है?
संबंधित सवाल
जुड़े हुए प्रश्न
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।
OnMessage()
के लिए दस्तावेज एक सरल दिखाता है कस्टम संदेश प्राप्त करने का तरीका।