PDA

View Full Version : سوال: گرفتن هندل کنترلی که فوکوس دارد .



just4froum
یک شنبه 27 شهریور 1390, 06:43 صبح
با سلام :


حتما می دونید که با تابع getfocus() هندل کنترلی که فوکوس دارد را برمیگرداند اما این تابع فقط مربوط به برنامه خودمان می شود.
حالا به نظر دوستان راهی هست که بشه هندل کنترلی که فوکوس دارد رو گرفت حتی اگر آن کنترل در برنامه ی خودمان نباشد ؟؟؟

با تشکر

setroyd
یک شنبه 27 شهریور 1390, 14:20 عصر
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

با این تو api میتونی .

just4froum
یک شنبه 27 شهریور 1390, 15:42 عصر
با تشکر از شما جناب setroyd

اما با تابع اول که هندل یک پنجره را پیدا می کنیم و با تابع دوم هندل اجزای آن پنجره را پیدا می کنیم.
من می خوام که کاربر هر کنترلی را که انتخاب کرد(در واقع هر کنترلی که دارای فوکوس شد) هندلش رو پیدا کنم مثل تابع getfocus که هر کنترلی رو که انتخاب کنید هندلش را بر می گرداند البته به شرطی که کنترل در برنامه ی خودتان باشد نه برنامه ی دیگر.

حالا من برنامه ای رو می خوام که کار همین getfocus رو انجام بده حتی خارج از برنامه ی من.

امید وارم تونسته باشم منظورم رو رسونده باشم.
البته شاید هم من سواد کافیش رو ندارم و با این دو تابع بشه چنین کاری رو کرد.

البته یک راه الان به ذهنم رسید :
خوب ما یک تایمر و تابع GetCursorPos مختصات ماوس رو میگیریم و با GetAsyncKeyState چک می کنیم که کی کلیکی صورت می گیرد و بعد از هر بار کلیک شدن هندل کنترل را توسط WindowFromPoint بدست میاریم خوب البته با این روش اگر کاربر از کیبرد استفاده کنه مشکل پیش میاد حالا دوستان روش بهتری ندارند ؟

با تشکر

setroyd
یک شنبه 27 شهریور 1390, 16:37 عصر
این رو فقط میشه برای موس اجرا کرد .درسته شما گفتی نوشتی گفتم شاید این هم به دردت بخوره چون وقتی نوشتمش منظورتو فهمیدم . کیبورد رو هم سعی میکنم شاید بتونم .

setroyd
یک شنبه 27 شهریور 1390, 17:52 عصر
Private Declare Function GetFocus Lib "user32" () As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long


Private Sub Timer1_Timer()
Dim clas As String
Dim tex As String
clas = String(255, 0)
tex = String(255, 0)
h = GetFocus()
i = GetWindowText(h, tex, Len(tex))
tex = Left(tex, i)
Me.Caption = tex
End Sub

چندتا کنترل بنداز تو صفحه و رو هر کدوم کلیک کن بهت میده handel رو و name رو