Vb.net Manuel Uygulama Açmayı Engellemek Hakkında Yardım

Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Onaylı Üye
Katılım
16 Eki 2019
Mesajlar
70
Tepki puanı
13
Ödüller
2
Yaş
23
6 HİZMET YILI
Arkadaşlar, benim loader ve bir çok uygulamam var. Bu, uygulamaları loader üzerinden açabiliyorum ama klasörden uygulamaya çift tıklayarak ta açılabiliyor.
Manuel olarak açılmaması için bir kaç basit kod denedim(if yapısı, my.settings falan) ama pek işe yaramadı. Rica etsem uygulamayı manuel açınca "Lütfen uygulamayı loader üzerinden açınız." diye mesaj kutusu veren ve onaylayınca uygulamayı kapatan. bir kod paylaşabilir misiniz?
 
Süper Üye
Katılım
5 Ara 2018
Mesajlar
628
Çözümler
6
Tepki puanı
180
Ödüller
9
7 HİZMET YILI
Bu uygulamaların her birine bir kod ekle arkada çalışan işlemleri çeksinler eğer loader algılanmıyorsa çekilen işlemlerde programlar mesajı verip kapatsın..
en basit haliyle görev yöneticisinden çekebilir verileri loader.exe yoksa kapatılır mesajı verip
 
Uzman Üye
Katılım
8 Ocak 2020
Mesajlar
190
Tepki puanı
22
Yaş
32
6 HİZMET YILI
İstediğin şeyin başka yöntemler ile kesinlikle yapılabileceğini biliyorum fakat ben bu yöntemi kullanıyorum.
Olay şu "Loader" uygulamamız "Çalıştırılan" uygulamaya veri gönderiyor ve gönderdiği veri bir butona tıklama olayı yani gönderdiğimiz veri ile uygulamanın sonlandırılmasını engelliyoruz. Uygulamanın başlangıcına timer ekleyip 5 saniye delay vermeni öneririm sen loader ile uygulamayı çalıştırdığında aşağıdaki kodu uygulayacaksın bu sayede butona tıklandığında uygulamayı sonlandıran timer'ı durdurucak. Eğer uygulama tek başına çalıştırılırsa durdurulma butonuna tıklanmadığı için uygulama otomatik sonlandırılacak yani çalıştırılma izini verilmemiş olucak.

Kod:
    Const BM_CLICK As Integer = &HF5
    Declare Function FindClose Lib "kernel32.dll" (
    ByVal hFindFile As Long) As Long
    Const WM_SETTEXT As Long = &HC

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, ByVal childAfter As IntPtr, ByVal lclassName As String, ByVal windowTitle As String) As IntPtr
    End Function

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As Integer, ByVal lParam As Integer) As IntPtr
    End Function
Loader ile uygulamayı başlattığında aşağıdaki kodu uygulayacaksın timer'a ekleyebilirsin.
Kod:
 Dim hParent As IntPtr = FindWindowEx(IntPtr.Zero, hParent, "Uygulama Sınıf adı", "Uygulama Başlıgı")
        If Not hParent.Equals(IntPtr.Zero) Then
            Dim hChild As IntPtr = FindWindowEx(hParent, hChild, "Child Class", "Butonun üstündeki yazı")
            If Not hChild.Equals(IntPtr.Zero) Then
                SendMessage(hChild, BM_CLICK, 0, 0)
                SendMessage(hChild, WM_SETTEXT, 0, 0)
            Else
                MessageBox.Show("Girilen veriler ile ilişkin uygulama bulundu.")
            End If
        Else
            MessageBox.Show("Girilen veriler ile ilişkin uygulama bulunamadı.")
        End If

Tüm bu dediğim sınıf değerlerini bulmak için ise
Bağlantıları görmek için lütfen Giriş Yap
isimli uygulamayı indirmen gerekiyor.
Uygulamanın Adı : "AutoIt Window Info"
Finder tool butonu ile uygulamanın üzerine gelip butonu seçmen gerekiyor ve tüm bilgiler listeleniyor.

Eğer anlamadıysan özelden ulaşırsın daha detaylı anlatırım.
 
Onaylı Üye
Katılım
16 Eki 2019
Mesajlar
70
Tepki puanı
13
Ödüller
2
Yaş
23
6 HİZMET YILI
Bu uygulamaların her birine bir kod ekle arkada çalışan işlemleri çeksinler eğer loader algılanmıyorsa çekilen işlemlerde programlar mesajı verip kapatsın..
en basit haliyle görev yöneticisinden çekebilir verileri loader.exe yoksa kapatılır mesajı verip
Tavsiyen için teşekkürler, test edeceğim.
İstediğin şeyin başka yöntemler ile kesinlikle yapılabileceğini biliyorum fakat ben bu yöntemi kullanıyorum.
Olay şu "Loader" uygulamamız "Çalıştırılan" uygulamaya veri gönderiyor ve gönderdiği veri bir butona tıklama olayı yani gönderdiğimiz veri ile uygulamanın sonlandırılmasını engelliyoruz. Uygulamanın başlangıcına timer ekleyip 5 saniye delay vermeni öneririm sen loader ile uygulamayı çalıştırdığında aşağıdaki kodu uygulayacaksın bu sayede butona tıklandığında uygulamayı sonlandıran timer'ı durdurucak. Eğer uygulama tek başına çalıştırılırsa durdurulma butonuna tıklanmadığı için uygulama otomatik sonlandırılacak yani çalıştırılma izini verilmemiş olucak.

Kod:
    Const BM_CLICK As Integer = &HF5
    Declare Function FindClose Lib "kernel32.dll" (
    ByVal hFindFile As Long) As Long
    Const WM_SETTEXT As Long = &HC

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, ByVal childAfter As IntPtr, ByVal lclassName As String, ByVal windowTitle As String) As IntPtr
    End Function

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As UInteger, ByVal wParam As Integer, ByVal lParam As Integer) As IntPtr
    End Function
Loader ile uygulamayı başlattığında aşağıdaki kodu uygulayacaksın timer'a ekleyebilirsin.
Kod:
 Dim hParent As IntPtr = FindWindowEx(IntPtr.Zero, hParent, "Uygulama Sınıf adı", "Uygulama Başlıgı")
        If Not hParent.Equals(IntPtr.Zero) Then
            Dim hChild As IntPtr = FindWindowEx(hParent, hChild, "Child Class", "Butonun üstündeki yazı")
            If Not hChild.Equals(IntPtr.Zero) Then
                SendMessage(hChild, BM_CLICK, 0, 0)
                SendMessage(hChild, WM_SETTEXT, 0, 0)
            Else
                MessageBox.Show("Girilen veriler ile ilişkin uygulama bulundu.")
            End If
        Else
            MessageBox.Show("Girilen veriler ile ilişkin uygulama bulunamadı.")
        End If

Tüm bu dediğim sınıf değerlerini bulmak için ise
Bağlantıları görmek için lütfen Giriş Yap
isimli uygulamayı indirmen gerekiyor.
Uygulamanın Adı : "AutoIt Window Info"
Finder tool butonu ile uygulamanın üzerine gelip butonu seçmen gerekiyor ve tüm bilgiler listeleniyor.

Eğer anlamadıysan özelden ulaşırsın daha detaylı anlatırım.
Teşekkürler, test edeceğim. Bilgisayarda AutoIt kurulu ama ek olarak onu da indiririm.
 
Tutti mi chiedono perché ho imparato questa lingua
Süper Üye
Katılım
17 Mar 2016
Mesajlar
634
Çözümler
5
Tepki puanı
112
Ödüller
11
10 HİZMET YILI
Kanka basit olarak form açılınca laoderden açtırmak istediğin uygulamayı kapattırırsın, eğer açıksa forma mesaj yollar ve timer başlatırsın timer sürekli çalışacağı için program yine kapanır eğer sen formdan buton ile basarsan timeri durdurur programı başlatırsın bu kadar basit eğer program açıldıktan sonra tekrar kapanırsa bool yardımıyla tekrardan timeri başlatırsın böylece program kapandığında tekrardan loader üzerinden çalıştırman gerekir mantığı böyle
 
Onaylı Üye
Katılım
16 Eki 2019
Mesajlar
70
Tepki puanı
13
Ödüller
2
Yaş
23
6 HİZMET YILI
Kanka basit olarak form açılınca laoderden açtırmak istediğin uygulamayı kapattırırsın, eğer açıksa forma mesaj yollar ve timer başlatırsın timer sürekli çalışacağı için program yine kapanır eğer sen formdan buton ile basarsan timeri durdurur programı başlatırsın bu kadar basit eğer program açıldıktan sonra tekrar kapanırsa bool yardımıyla tekrardan timeri başlatırsın böylece program kapandığında tekrardan loader üzerinden çalıştırman gerekir mantığı böyle
Mantığı çözdüm reisim, dün haber vermeyi unuttum konu kilitlenebilir.
 
Onaylı Üye
Katılım
16 Eki 2019
Mesajlar
70
Tepki puanı
13
Ödüller
2
Yaş
23
6 HİZMET YILI
nasıl çözdün bilgilendirirsen bizimde belki işimize yarar
Loader'e onay formu ve onayı algılaması için nesne ekledim. Uygulamayı manuel çalıştırıldığında sadece onay formunu algılayacak şekilde ayarladım ki açılmasın, kapansın. Loader'den başlatıldığında ise onay formunu ve onay nesnesini algılayacak şekilde ayarladım. Sadece kontrol ayarlarını değiştirdim gibi bir şey.
 
Durum
Üzgünüz bu konu cevaplar için kapatılmıştır...
Üst