[Çözüldü]  UserForm'daki Kontollerin Handle'larını Bulmak (hWnd))

API - Application Programming Interface
Yazılım Programlama Arayüz Uygulaması

UserForm'daki Kontollerin Handle'larını Bulmak (hWnd))

İleti#1)  rn_qwerty » 27 Eyl 2014 15:14

VBA, çoğu kontrolün hwnd bilgisini vermez. Bazı kontrollerin hWnd bilgisini bulmak için aşağıdaki kodları kullanabilirsiniz.
Örnek: hWnd=GetHWND(UserForm1.Frame1) veya hWnd=GetHWND(UserForm1.ListView1) gibi.


Kod: Tümünü seç
Public Declare Function apiGetFocus Lib "user32" Alias "GetFocus" () As Long

Public Function GetHWND(objCtl As Control) As Long
    On Error Resume Next
    objCtl.SetFocus
    If Err Then
        GetHWND = 0
    Else
        GetHWND = apiGetFocus
    End If
    On Error GoTo 0
End Function


Not: Tüm kontroller için geçerli değildir.
Kullanıcı avatarı
rn_qwerty
 
Kayıt: 04 Eyl 2014 15:47
Meslek: Serbest Meslek
Yaş: 33
İleti: 3
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Ankara/Çankaya

Cevap: UserForm'daki kontollerin handle'larını bulmak (hWnd)

İleti#2)  Enes Recep BAĞ » 27 Eyl 2014 16:04

Remzi Bey [TESEKKÜR] şkşk
Kullanıcı avatarı
Enes Recep BAĞ
Forum Moderatörü
 
Adı Soyadı:Enes Recep BAĞ
Kayıt: 30 Ağu 2010 17:39
Konum: 0 549 808 82 66
Meslek: Bilgi işlem
Yaş: 36
İleti: 8162
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Aksaray / Merkez

Cevap: UserForm'daki Kontollerin Handle'larını Bulmak (hWnd)

İleti#3)  Erhan Yavuz » 28 Eyl 2014 09:21

İşlenmemiş bir konuydu, bilgilendirme için teşekkürler.. şkşk
☾✭ Türkçemizi tam ve doğru kullanmaktan korkmayalım..
Teşekkür etmek Erdemdir. ECYavuz


OSMANLI OYUNU (1402-1566)
http://www.excelvba.net/viewtopic.php?f=41&t=9984

EXCEL-VBA KOD BANKASI PRO.7.0
http://www.excelvba.net/viewtopic.php?f=38&t=3304
Resim
Kullanıcı avatarı
Erhan Yavuz
Site Forum Yöneticisi
 
Adı Soyadı:Erhan Yavuz
Kayıt: 15 Haz 2008 02:13
Konum: Etiler / İstanbul
Meslek: Emekli Sb.
Yaş: 59
İleti: 5695
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul / Etiler

Cevap: UserForm'daki Kontollerin Handle'larını Bulmak (hWnd)

İleti#4)  Murat OSMA » 18 Ekm 2014 03:02

Bu konuda benim de önceden yabancı kaynaktan arşivime aldığım bir dosya mevcut.
Açık olan tüm pencerelerin, nesnelerin hWnd (handle id)'sini bulabilirsiniz.
Bu iletideki ekleri görmek için gerekli yetkilere sahip değilsiniz.
Kullanıcı avatarı
Murat OSMA
Site Forum Yöneticisi
 
Adı Soyadı:Murat OSMA
Kayıt: 05 Arl 2008 00:34
Konum: İstanbul
Meslek: Excel & VBA Eğitmeni
Yaş: 33
İleti: 14305
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Bağcılar - İSTANBUL

REKLAM
Excel Logo XML Oluşturucu
Logo Object Designer ile Uyarlama

Cevap: UserForm'daki Kontollerin Handle'larını Bulmak (hWnd)

İleti#5)  Erhan Yavuz » 19 Ekm 2014 14:22

Murat sağolasın..
☾✭ Türkçemizi tam ve doğru kullanmaktan korkmayalım..
Teşekkür etmek Erdemdir. ECYavuz


OSMANLI OYUNU (1402-1566)
http://www.excelvba.net/viewtopic.php?f=41&t=9984

EXCEL-VBA KOD BANKASI PRO.7.0
http://www.excelvba.net/viewtopic.php?f=38&t=3304
Resim
Kullanıcı avatarı
Erhan Yavuz
Site Forum Yöneticisi
 
Adı Soyadı:Erhan Yavuz
Kayıt: 15 Haz 2008 02:13
Konum: Etiler / İstanbul
Meslek: Emekli Sb.
Yaş: 59
İleti: 5695
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul / Etiler

Cevap: UserForm'daki Kontollerin Handle'larını Bulmak (hWnd)

İleti#6)  sinanplater » 19 Ekm 2014 22:54

HWnd değişkeni pencere referansıdır. Yıllar önce Bill Gates amcamız Windows'un arabirimini tasarlarken arabirimi oluşturan her küçük pencereye bir numara vermeyi ve pencereleri numaralarıyla adlandırmayı düşünmüş. İşletim sisteminiz proje her çağrıldığında HWnd değişkenine bir tam sayı atar. Her zaman değişken olan bu tam sayı herhangi bir kontrol veya pencerenin referansını belirtir. Bu referans değişkendir çünkü çalıştırılan diğer uygulamalar ve yüklenen kontroller zaten kendilerine birer HWnd değeri alır.

Bir nesnenin HWnd değerini öğrenmek için X = nesne.hWnd gibi bir ifade kullanabilir X değerini öğrenerek Hwnd değerini okuyabilirsiniz.

Kod: Tümünü seç
Option Explicit
 
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
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
(ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) 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 x As Integer
 
Private Type winEnum
    winHandle As Integer
    winClass As Integer
    winTitle As Integer
    winHandleClass As Integer
    winHandleTitle As Integer
    winHandleClassTitle As Integer
End Type
Dim winOutputType As winEnum


Kod: Tümünü seç
Public Sub GetWindows()
    x = 0
    winOutputType.winHandle = 0
    winOutputType.winClass = 1
    winOutputType.winTitle = 2
    winOutputType.winHandleClass = 3
    winOutputType.winHandleTitle = 4
    winOutputType.winHandleClassTitle = 5

    GetWinInfo 0&, 0, winOutputType.winHandleClassTitle
End Sub


Kod: Tümünü seç
Private Sub GetWinInfo(hParent As Long, intOffset As Integer, OutputType As Integer)
   
    Dim hWnd As Long, lngRet As Long, y As Integer
    Dim strText As String
    hWnd = FindWindowEx(hParent, 0&, vbNullString, vbNullString)
    While hWnd <> 0
        Select Case OutputType
        Case winOutputType.winClass
            strText = String$(100, Chr$(0))
            lngRet = GetClassName(hWnd, strText, 100)
            Range("a1").Offset(x, intOffset) = Left$(strText, lngRet)
        Case winOutputType.winHandle
            Range("a1").Offset(x, intOffset) = hWnd
        Case winOutputType.winTitle
            strText = String$(100, Chr$(0))
            lngRet = GetWindowText(hWnd, strText, 100)
            If lngRet > 0 Then
                Range("a1").Offset(x, intOffset) = Left$(strText, lngRet)
            Else
                Range("a1").Offset(x, intOffset) = "N/A"
            End If
        Case winOutputType.winHandleClass
            Range("a1").Offset(x, intOffset) = hWnd
            strText = String$(100, Chr$(0))
            lngRet = GetClassName(hWnd, strText, 100)
            Range("a1").Offset(x, intOffset + 1) = Left$(strText, lngRet)
        Case winOutputType.winHandleTitle
            Range("a1").Offset(x, intOffset) = hWnd
            strText = String$(100, Chr$(0))
            lngRet = GetWindowText(hWnd, strText, 100)
            If lngRet > 0 Then
                Range("a1").Offset(x, intOffset + 1) = Left$(strText, lngRet)
            Else
                Range("a1").Offset(x, intOffset + 1) = "N/A"
            End If
        Case winOutputType.winHandleClassTitle
            Range("a1").Offset(x, intOffset) = hWnd
            strText = String$(100, Chr$(0))
            lngRet = GetClassName(hWnd, strText, 100)
            Range("a1").Offset(x, intOffset + 1) = Left$(strText, lngRet)
            strText = String$(100, Chr$(0))
            lngRet = GetWindowText(hWnd, strText, 100)
            If lngRet > 0 Then
                Range("a1").Offset(x, intOffset + 2) = Left$(strText, lngRet)
            Else
                Range("a1").Offset(x, intOffset + 2) = "N/A"
            End If
        End Select
         'check for children
        y = x
        Select Case OutputType
        Case Is > 4
            GetWinInfo hWnd, intOffset + 3, OutputType
        Case Is > 2
            GetWinInfo hWnd, intOffset + 2, OutputType
        Case Else
            GetWinInfo hWnd, intOffset + 1, OutputType
        End Select
         'increment by 1 row if no children found
        If y = x Then
            x = x + 1
        End If
         'now get next window
        hWnd = FindWindowEx(hParent, hWnd, vbNullString, vbNullString)
    Wend
     
End Sub


:)
Kullanıcı avatarı
sinanplater
Site Dostu
 
Adı Soyadı:SİNAN POLATER
Kayıt: 12 Şub 2012 19:41
Meslek: Serbest yazılımcı ve güvenlik merkezi koordinatörü
Yaş: 37
İleti: 1381
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İSTANBUL



REKLAM
ETA - Excel Konsolide Raporlama
ETA Excel Personel Entegre Raporu

Cevap: UserForm'daki Kontollerin Handle'larını Bulmak (hWnd)

İleti#7)  Tarkan VURAL » 19 Ekm 2014 23:31

Peki handle id numarasını bildiğimiz bir pencerenin üzerinde bulunan kontrollerinin isimlerini bulabilir miyiz ?
Resim
www.tarkanvural.com.tr

İnnâ lillâhi ve innâ ileyhi raciûn
Şüphesiz ki; biz Allah’a âidiz ve vakti geldiğinde O’na döndürüleceğiz.

HasbunAllâhu ve nimel vekîl
Bize Allah yeter. O ne güzel vekildir.


ExcelVBA.NET' e katkıda bulunmak ister misiniz ? O halde BAĞIŞ butonunu tıklayın...
Kullanıcı avatarı
Tarkan VURAL
Yönetim Kurulu
 
Adı Soyadı:Tarkan VURAL
Kayıt: 14 Haz 2008 20:27
Konum: tarkan@excelvba.net
Meslek: LUU, Yazılım Geliştirme Müdürü
Yaş: 45
İleti: 26766
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: İstanbul - Beylikdüzü

Cevap: Cevap: UserForm'daki Kontollerin Handle'larını Bulmak

İleti#8)  chngrcn » 14 Nis 2016 16:28

Tarkan VURAL yazdı:Peki handle id numarasını bildiğimiz bir pencerenin üzerinde bulunan kontrollerinin isimlerini bulabilir miyiz ?



Tarkan hocamın sorusunu bende tekrar etmek istiyorum..

handle id numarasını bildiğimiz bir pencerenin üzerinde bulunan kontrollerinin isimlerini, başlıklarını, HANDLE numaralarını bulabilir miyiz ?

örneğin Userform üzerinde bir kaç objemiz var,

textbox1.handle
combobox1.handle
listbox1.handle
checkbox1.handle
commandbutton1.handle
optionbutton1.handle gibi nesnelerin handle referans değerlerini nasıl bulabiliriz ?

(not: sadece userform için değil, windows altında çalışan diğer uygulamalar altındaki text kutuları içinde geçerli bir kodlama varmıdır ? ) MESELA MASA ÜSTÜNDE AKTİF OLAN HERHANGİ BİR PENCERE İÇERİSİNDEKİ TEXTBOXLARIN HANDLE NUMARASI NASIL BULUNUR.

şimdiden teşekkür ederim.. yardımlarınızı rica ederim.
Kullanıcı avatarı
chngrcn
İsimsiz Üye
 
Kayıt: 06 Şub 2016 00:45
Meslek: aaaaa
Yaş: 34
İleti: 1
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: istanbul

Cevap: UserForm'daki Kontollerin Handle'larını Bulmak (hWnd)

İleti#9)  Erkan Akayay » 14 Nis 2016 18:02

İsimsiz kullanıcılar grubuna destek verilmemektedir. Profilinizi güncelledikten sonra bilgi verilecektir.
Sorularınızı düzgün bir Türkçe ile, detay vererek ve örnek dosyayla destekleyerek sorunuz.
Örnek dosyalarınızda Application.Visible veya hide gibi sayfa gizlemelerini iptal ediniz.
Kullanıcı avatarı
Erkan Akayay
Site Dostu
 
Kayıt: 20 Ağu 2008 13:59
Konum: YALOVA
Meslek: Bilgi İşlem
Yaş: 48
İleti: 3912
 
Cinsiyet: Bay
Bulunduğunuz İl / Semt: Ümraniye


Forum Excel ve API

Online Kullanıcılar

Bu forumu görüntüleyenler: Kayıtlı kullanıcı yok ve 1 misafir

Bumerang - Yazarkafe