Katılım
14 Kas 2017
Mesajlar
4
Puanları
1
Yaş
35
merhaba arkadaşlar. aramadıyım yer kalmadı lütfen yardımcı olun...
vb6 da iki adet exe hazırladım. exe 1 den exe 2 nin textbox una değer ğöndermek istiyorum ama başaramıyorum. dll dosyası hazırladım dll dosyasını referans gösterdim olmadı yardımcı olacak bi arkadaş yokmu. saygılar
 
Eğer hangi HWND olduğunu biliyorsan textboxa yazı yazdırmak çok kolay

HWND windowsda her buton text pencere vs numarasıdır 32bit integer değerdir


SendMessage(hwndno,SETTEXT, (char *) yazi,0 );

bu C++ de

sendmessage windows api fonksiyonudur sen basicde yazacaksın değişen bişey yok.

Peki textboxun hwnd numarasını nasıl bulacağız ? bunun için çok yöntem var mesela mouse üzeindeki pencerenin nosunu veren fonksiyon

hwnd=WindowFromPoint(yerxy) bu fpnksiyon sana mousun üzerindeki windows nosunu verir.
daha birçok yöntem var önemli olan windows nosunu bulup sendmessage ile istediğin şeyi yaptırmak.
Bunlar windowsun kendi fonksiyonlarıdır hangi dilde yazarsan yaz.
 
Aşağıdaki kod ile istediğin bilgiyi string olarak gönderip bunu yapabilirsin ancak ikinci olarak açtığın programın handle ını bilmen lazim bunun için de uygulama açıldığında her programın kendi handle sini registry de bir anahtara yazdırıp sonra iki uygulamadan da bir birine mesaj gönderebilirsin.

Eğer registry ye nasıl bilgi kaydedilir bilmiyorsan bu konuda da yardımcı olabilirim.

frmSender.hWnd bilgisini registry de uygun bir anahtara yazdır. Hatta sadece registry kullanarakta bilgi transferi yapabilirsin eğer çok sık aralıklarla bilgi göndermeyeceksen registry üzerinden bilgi transferi yapabilirsin. Diğer başka bir yöntem de dosyaya yazmak konumu belli olan örneğin bir text dosyasına göndereceğin bilgileri kayıt edip diğer uygulamadan belirli aralıklarla okutup kullanabilirsin. Başka daha kullanışlı ve bana göre daha iyi bir yöntem de local web service yazabilirsin. node.js ile çok kolay local web service yazılabilmektedir. Böyle bir service üzerinden bilgi transferi gerçekleştirebilirsin. Hatta bu yöntemle uygulamalar aynı ağ üzerinde farklı bilgisayarlarda olsa dahi bilgi transferini gerçekleştirebilirler.

Kod:
Option Explicit

Private Const WM_COPYDATA As Long = &H4A 'An application sends the WM_COPYDATA message to pass data to another application.

Private Type COPYDATASTRUCT 'Contains data to be passed to another application by the WM_COPYDATA message.
    dwData As Long          '    The data to be passed to the receiving application.
    cbData As Long          '    The size, in bytes, of the data pointed to by the lpData member.
    lpData As Long          '    The data to be passed to the receiving application. This member can be NULL.
End Type                    'http://msdn.microsoft.com/en-us/library/ms649010(v=vs.85).aspx

Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageW" (ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Declare Function SysReAllocString Lib "oleaut32.dll" (ByVal pBSTR As Long, Optional ByVal pszStrPtr As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)

Public Sub SendData(ByRef frmSender As Form, ByVal OtherApphWnd As Long, ByRef strMsg As String)
    Dim CDS As COPYDATASTRUCT

    CDS.dwData = frmSender.hWnd       'WM_COPYDATA needs to know who sent
    CDS.cbData = LenB(strMsg) + 2&    'Include room for null terminator so SysReAllocString
    CDS.lpData = StrPtr(strMsg)       'can determine the string's length

   'SendMessage won't return until the data has been sent and the recipient has responded.
    SendMessage OtherApphWnd, WM_COPYDATA, CDS.dwData, CDS
End Sub

İkinci uygulamandan bu şekilde okutabilirsin.

Kod:
Public Function MainWndProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Dim mainRect As RECT
    Dim wp As WINDOWPOS

    Select Case uMsg
        Case WM_COPYDATA
            Dim CDS As COPYDATASTRUCT, strMsg As String  'It would be more efficient if no vars were dim'ned in the subclass procedure

            CopyMemory CDS, ByVal lParam, LenB(CDS)      'Copy the data into a local buffer
            SysReAllocString VarPtr(strMsg), CDS.lpData  'Retrieve a copy of the string data into strMsg
            MainWndProc = 1&                             'Return TRUE to signal that the message was processed
            MsgBox """" & strMsg & """"
            Exit Function

        Case 12
            Form1.Text1 = "Message from App1"
            Form1.Text2 = uMsg
            Form1.Text3 = wParam
            Form1.Text4 = lParam
            MainWndProc = 1&
            Exit Function
    End Select

    MainWndProc = CallWindowProc(MainOldWindPoc, hWnd, uMsg, wParam, lParam)
End Function
 
Son düzenleme:
ayhan bey ilginiz için teşekkürler.
bu örnekleri inceleyeceğim. benim aklıma yatan text dosyası açtırıp ordan okutmak ama ben daha kalıcı bişey olmasını istiyorum.
bu konuda sizin kadar iyi deyilim kendeimce öğrenmeye çalışıyorum,
dll konusunu araştırdım tam anlayabilmiş deyilim ancak,dll içine yazılan program parçalarını referans gösterilen farklı programlar kullanabiliyolar. bende burdan yola çıkarak dll dosyasının içindeki değişken değeri 1. programdan veri gönderip 2. programdanda okutmayı düşündüm nitekim şu sonuca vardım;
dll dosyasını her iki programda aynı anda kullansa bile içindeki değişen değer ikinci programı etkilemiyor.. acaba ben sorumun cevabını dll dosyasında aramakla hatamı ediyorum. birde
dll hakkında beni bilgilendirirmisinz nedir ne işe yarar. saygılar
 
İşletim sisteminin izin verdiği ölçüde aynı hafıza adresine bilgi yazarak diğer uygulamadan da aynı adresteki verileri okuyarak bir çözüm üretebilirsiniz ancak bunlar çok sağlıklı olmayacaktır. Bilginin türü ve iletim sıklığına göre çeşitli yöntemler geliştirilebilir. Sadece windows sistemlerde çalışan bir çözüm için windows service bile kurabilirsin. Microsoft'un geniş kapsamda OLE automation adı altında kullandığı yöntemleri seçebilirsin. Programlama dilleri çok gelişti bir framework çatısı kullanan dilleri seçmen senin için daha avantajlı olabilir. (VB.NET, C#, java gibi)

DLL ile ilgili türkçe yazıları bu linki takip ederek sırayla okuyabilirsin.
https://www.google.com/search?q=DLL+nedir+ne+işe+yarar&oq=DLL+nedir+ne+işe+yarar&aqs=chrome..69i57.8134j0j7&sourceid=chrome&ie=UTF-8
 
ayhan bey bilgileriniz için teşekkürler,bu yöntemler benim için biraz zor ama yinede bi ışık oldu
bundan sonrası benim anlama yeteneğime düşüyor galiba.
vaktiniz olursa açıklayıcı bir örnek yazarsanız daha makbul olur. yinede ilgilendiğiniz için saolun.
 
ben bu yöntemi kullanmaya karar verdim.

Option Explicit

Private Sub Command1_Click() 'butona basılınca

Open "C:\Veri\Test.TXT" For Output As #1 'budızede dosyaaç
Print #1, "deneme yazı" 'ıcıne bunu yaz
Close
End Sub


burayakadar sıkıntı yok.

peki içine veri yazdiğim text den, başka programla okumayı nasıl yapıcam.

1 satıra ''55''

2 satıra ''88''

3satıra ''943'' gibi değerler göndericem..

okuma yaparkende tek tek okutmam gerek.

yardımcı olacak arkadaşlara şimdiden teşekkürler.
 
Bir text dosyası yerine xml dosyasında yazıp okumanız daha kullanışlı olacağı kanısındayım veya alternatif olarak bir database de olabir. Kodundan anladığım kadarı ile V.Basic te yazıyorsun ms Access üzerinde yazman ve okuman çok basit olur.
 
Haklısınız kesinlikle txt dosyasına yazmak hem basit hem de hızlı bir kullanış şekli.
 

Forum istatistikleri

Konular
128,126
Mesajlar
915,253
Kullanıcılar
449,841
Son üye
nazoyata

Yeni konular

Geri
Üst