leonscottkfm

Unreal MVP
31 May 2015
1,521
5
215
63
28
(34) İstanbul Avrupa
store.steampowered.com
Konu dışı bir şey sormak istiyorum bilenler varsa. Unreal dışında visual basic ve C# ile de ilgilenmekteyim.
Form arayüzünde çalışıyorum oynadığım lol adında oyun için flood uygulaması yapmıştım. Fakat daha sonra oyuna başka bir şey entegre ettiler ve arkadaki tüm focuslar oyun açıkken kayboluyor

Dolayısıyla uygulmamam çalışmıyor çünkü focus u gidiyor. Oyun açıkken uygulamamın focusunu önceliğe nasıl alırım ? Ve arkaplanda tuş bastırma işlemi nasıl oluyor? Form üzerinde keydown ve keypress var fakat bunlar sadece forma focus olduğunda işe yarıyor ben backgroundda bile belirlediğim tuşa basarsam bir şeyler olsun istiyorum.

Bunu VB yada C# bilenler ikisinden birinde anlatabilir teşekkürler.
 
leonscottkfm' Alıntı:
Konu dışı bir şey sormak istiyorum bilenler varsa. Unreal dışında visual basic ve C# ile de ilgilenmekteyim.
Form arayüzünde çalışıyorum oynadığım lol adında oyun için flood uygulaması yapmıştım. Fakat daha sonra oyuna başka bir şey entegre ettiler ve arkadaki tüm focuslar oyun açıkken kayboluyor

Dolayısıyla uygulmamam çalışmıyor çünkü focus u gidiyor. Oyun açıkken uygulamamın focusunu önceliğe nasıl alırım ? Ve arkaplanda tuş bastırma işlemi nasıl oluyor? Form üzerinde keydown ve keypress var fakat bunlar sadece forma focus olduğunda işe yarıyor ben backgroundda bile belirlediğim tuşa basarsam bir şeyler olsun istiyorum.

Bunu VB yada C# bilenler ikisinden birinde anlatabilir teşekkürler.
Windows a kendi uygulamanın hotkey ini register ederek yapabilirsin. Uygulaman arkaplanda olsada hotkeye cevap verecektir. Şu şekilde: 
Şu şekilde ihtiyacın olan iki metodu form class a ekle:
Kod:
[DllImport("user32.dll")] 
public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);
[DllImport("user32.dll")]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
Şu şekilde hotkey atamana ID belirle
Kod:
const int MYACTION_HOTKEY_ID = 1;
Constructor da ya da başta çalışacak her hangi bir kodda şu şekilde hotkeyi register et:
Kod:
RegisterHotKey(this.Handle, MYACTION_HOTKEY_ID, 6, (int) Keys.F12);
     Not:Burda 6 Ctrl-Shift demek ( çünkü alt 1 dir ctrl 2 dir shift 4 tür. toplamı ile atanır)


Son olarak bu kodla ne  olacağını şu metodu forma ekleyerek yapmak istediğini yaptır.
Kod:
protected override void WndProc(ref Message m) {
    if (m.Msg == 0x0312 && m.WParam.ToInt32() == MYACTION_HOTKEY_ID) {
        // Hotkeye basıldı

        // Ne istiyorsan burada yapabilirsin
        // ...
    }
    base.WndProc(ref m);
}
 
erginegider' Alıntı:
leonscottkfm' Alıntı:
Konu dışı bir şey sormak istiyorum bilenler varsa. Unreal dışında visual basic ve C# ile de ilgilenmekteyim.
Form arayüzünde çalışıyorum oynadığım lol adında oyun için flood uygulaması yapmıştım. Fakat daha sonra oyuna başka bir şey entegre ettiler ve arkadaki tüm focuslar oyun açıkken kayboluyor

Dolayısıyla uygulmamam çalışmıyor çünkü focus u gidiyor. Oyun açıkken uygulamamın focusunu önceliğe nasıl alırım ? Ve arkaplanda tuş bastırma işlemi nasıl oluyor? Form üzerinde keydown ve keypress var fakat bunlar sadece forma focus olduğunda işe yarıyor ben backgroundda bile belirlediğim tuşa basarsam bir şeyler olsun istiyorum.

Bunu VB yada C# bilenler ikisinden birinde anlatabilir teşekkürler.
Windows a kendi uygulamanın hotkey ini register ederek yapabilirsin. Uygulaman arkaplanda olsada hotkeye cevap verecektir. Şu şekilde: 
Şu şekilde ihtiyacın olan iki metodu form class a ekle:
Kod:
[DllImport("user32.dll")] 
public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);
[DllImport("user32.dll")]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
Şu şekilde hotkey atamana ID belirle
Kod:
const int MYACTION_HOTKEY_ID = 1;
Constructor da ya da başta çalışacak her hangi bir kodda şu şekilde hotkeyi register et:
Kod:
RegisterHotKey(this.Handle, MYACTION_HOTKEY_ID, 6, (int) Keys.F12);
     Not:Burda 6 Ctrl-Shift demek ( çünkü alt 1 dir ctrl 2 dir shift 4 tür. toplamı ile atanır)


Son olarak bu kodla ne  olacağını şu metodu forma ekleyerek yapmak istediğini yaptır.
Kod:
protected override void WndProc(ref Message m) {
    if (m.Msg == 0x0312 && m.WParam.ToInt32() == MYACTION_HOTKEY_ID) {
        // Hotkeye basıldı

        // Ne istiyorsan burada yapabilirsin
        // ...
    }
    base.WndProc(ref m);
}

Senin çözümde güzel ama C# olduğu için ben visual basic'e bunu çevirmekte zorlanırım şimdi. VB de yaptım çünkü şuan projeyi.

Fakat şunu buldum ve heryerde çalışıyor..



Public Const MOD_ALT As Integer = &H1           'Alt key
Public Const WM_HOTKEY As Integer = &H312       '


<DllImport("User32.dll")> _
Public Shared Function RegisterHotKey(ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer,  ByVal vk As Integer) As Integer
End Function

<DllImport("User32.dll")> _
Public Shared Function UnregisterHotKey(ByVal hwnd As IntPtr, ByVal id As Integer) As Integer
End Function

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
   If m.Msg = WM_HOTKEY Then
       Dim id As IntPtr = m.WParam
       Select Case (id.ToString)
           Case "100"
               MessageBox.Show("You pressed ALT+D key combination")
           Case "200"
               MessageBox.Show("You pressed ALT+C key combination")
       End Select
   End If
   MyBase.WndProc(m)
End Sub

Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs)  Handles MyBase.FormClosing
   UnregisterHotKey(Me.Handle, 100)
   UnregisterHotKey(Me.Handle, 200)
End Sub


Private Sub Form_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
   RegisterHotKey(Me.Handle, 100, MOD_ALT, Keys.D)
   RegisterHotKey(Me.Handle, 200, MOD_ALT, Keys.C)
end sub



BASINCA ALGILIYOR FAKAT BEN KODLA NASIL BASTIRABİLİRİM BU TUŞLARA? DIŞARDAN BASILSIN İSTİYORUM MACRO GİBİ BİR ŞEY..
 
leonscottkfm' Alıntı:
erginegider' Alıntı:
Windows a kendi uygulamanın hotkey ini register ederek yapabilirsin. Uygulaman arkaplanda olsada hotkeye cevap verecektir. Şu şekilde: 
Şu şekilde ihtiyacın olan iki metodu form class a ekle:
Kod:
[DllImport("user32.dll")] 
public static extern bool RegisterHotKey(IntPtr hWnd, int id, int fsModifiers, int vlc);
[DllImport("user32.dll")]
public static extern bool UnregisterHotKey(IntPtr hWnd, int id);
Şu şekilde hotkey atamana ID belirle
Kod:
const int MYACTION_HOTKEY_ID = 1;
Constructor da ya da başta çalışacak her hangi bir kodda şu şekilde hotkeyi register et:
Kod:
RegisterHotKey(this.Handle, MYACTION_HOTKEY_ID, 6, (int) Keys.F12);
     Not:Burda 6 Ctrl-Shift demek ( çünkü alt 1 dir ctrl 2 dir shift 4 tür. toplamı ile atanır)


Son olarak bu kodla ne  olacağını şu metodu forma ekleyerek yapmak istediğini yaptır.
Kod:
protected override void WndProc(ref Message m) {
    if (m.Msg == 0x0312 && m.WParam.ToInt32() == MYACTION_HOTKEY_ID) {
        // Hotkeye basıldı

        // Ne istiyorsan burada yapabilirsin
        // ...
    }
    base.WndProc(ref m);
}

Senin çözümde güzel ama C# olduğu için ben visual basic'e bunu çevirmekte zorlanırım şimdi. VB de yaptım çünkü şuan projeyi.

Fakat şunu buldum ve heryerde çalışıyor..



Public Const MOD_ALT As Integer = &H1           'Alt key
Public Const WM_HOTKEY As Integer = &H312       '


<DllImport("User32.dll")> _
Public Shared Function RegisterHotKey(ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer,  ByVal vk As Integer) As Integer
End Function

<DllImport("User32.dll")> _
Public Shared Function UnregisterHotKey(ByVal hwnd As IntPtr, ByVal id As Integer) As Integer
End Function

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
   If m.Msg = WM_HOTKEY Then
       Dim id As IntPtr = m.WParam
       Select Case (id.ToString)
           Case "100"
               MessageBox.Show("You pressed ALT+D key combination")
           Case "200"
               MessageBox.Show("You pressed ALT+C key combination")
       End Select
   End If
   MyBase.WndProc(m)
End Sub

Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs)  Handles MyBase.FormClosing
   UnregisterHotKey(Me.Handle, 100)
   UnregisterHotKey(Me.Handle, 200)
End Sub


Private Sub Form_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
   RegisterHotKey(Me.Handle, 100, MOD_ALT, Keys.D)
   RegisterHotKey(Me.Handle, 200, MOD_ALT, Keys.C)
end sub



BASINCA ALGILIYOR FAKAT BEN KODLA NASIL BASTIRABİLİRİM BU TUŞLARA? DIŞARDAN BASILSIN İSTİYORUM MACRO GİBİ BİR ŞEY..

Soruyu tam anlayamadım.Kodla bastırmak? Oyuna keypress mi göndermek istiyorsun. Şurada yine c# la kod var:https://github.com/EasyAsABC123/Keyboard
 
erginegider' Alıntı:
leonscottkfm' Alıntı:
Senin çözümde güzel ama C# olduğu için ben visual basic'e bunu çevirmekte zorlanırım şimdi. VB de yaptım çünkü şuan projeyi.

Fakat şunu buldum ve heryerde çalışıyor..



Public Const MOD_ALT As Integer = &H1           'Alt key
Public Const WM_HOTKEY As Integer = &H312       '


<DllImport("User32.dll")> _
Public Shared Function RegisterHotKey(ByVal hwnd As IntPtr, ByVal id As Integer, ByVal fsModifiers As Integer,  ByVal vk As Integer) As Integer
End Function

<DllImport("User32.dll")> _
Public Shared Function UnregisterHotKey(ByVal hwnd As IntPtr, ByVal id As Integer) As Integer
End Function

Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
   If m.Msg = WM_HOTKEY Then
       Dim id As IntPtr = m.WParam
       Select Case (id.ToString)
           Case "100"
               MessageBox.Show("You pressed ALT+D key combination")
           Case "200"
               MessageBox.Show("You pressed ALT+C key combination")
       End Select
   End If
   MyBase.WndProc(m)
End Sub

Private Sub Form1_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs)  Handles MyBase.FormClosing
   UnregisterHotKey(Me.Handle, 100)
   UnregisterHotKey(Me.Handle, 200)
End Sub


Private Sub Form_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
   RegisterHotKey(Me.Handle, 100, MOD_ALT, Keys.D)
   RegisterHotKey(Me.Handle, 200, MOD_ALT, Keys.C)
end sub



BASINCA ALGILIYOR FAKAT BEN KODLA NASIL BASTIRABİLİRİM BU TUŞLARA? DIŞARDAN BASILSIN İSTİYORUM MACRO GİBİ BİR ŞEY..

Soruyu tam anlayamadım.Kodla bastırmak? Oyuna keypress mi göndermek istiyorsun. Şurada yine c# la kod var:https://github.com/EasyAsABC123/Keyboard

Oyunda alt+a yaptım diyelim timer çalışacak bu timerde sürekli 1 tuşuna bastıracak örneğin oyunca 1 can almaysa sürekli 1 basacak ve can alacak.
ama bu sistem oldu gibi şuan fakat şu key kodları var ya &H456 falan tarzda bunların tam listesini bulamadım nedense &H tam olarak ne tipi oluyor ki
 
leonscottkfm' Alıntı:
erginegider' Alıntı:
Soruyu tam anlayamadım.Kodla bastırmak? Oyuna keypress mi göndermek istiyorsun. Şurada yine c# la kod var:https://github.com/EasyAsABC123/Keyboard

Oyunda alt+a yaptım diyelim timer çalışacak bu timerde sürekli 1 tuşuna bastıracak örneğin oyunca 1 can almaysa sürekli 1 basacak ve can alacak.
ama bu sistem oldu gibi şuan fakat şu key kodları var ya &H456 falan tarzda bunların tam listesini bulamadım nedense &H tam olarak ne tipi oluyor ki
Basic bilmiyorum ama keylerin Hexadecimal kodudur. Yani 16 lık tabanda ifade edilmesi. Mesela &HFF =255 . Kendinde 10 luk düzenden 16 liğa direk çevirebilirsin ama şu linkte var gibi
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/keycode-constants
 
erginegider' Alıntı:
leonscottkfm' Alıntı:
Oyunda alt+a yaptım diyelim timer çalışacak bu timerde sürekli 1 tuşuna bastıracak örneğin oyunca 1 can almaysa sürekli 1 basacak ve can alacak.
ama bu sistem oldu gibi şuan fakat şu key kodları var ya &H456 falan tarzda bunların tam listesini bulamadım nedense &H tam olarak ne tipi oluyor ki
Basic bilmiyorum ama keylerin Hexadecimal kodudur. Yani 16 lık tabanda ifade edilmesi. Mesela &HFF =255 . Kendinde 10 luk düzenden 16 liğa direk çevirebilirsin ama şu linkte var gibi
https://docs.microsoft.com/en-us/office/vba/language/reference/user-interface-help/keycode-constants

Çalışmıyor ne yaptıysam. açıyorum programı oyuna giriyorum chatı açıyorum z yazıyor mesela z ye bastığı anlamına geliyor fakat yerdeki itemi normalde z basıp alması gerekirken alamıyor. Almıyor yani. Metin 2 de z basınca item alınıyor yerden program chate z yazsa bile yerdeki itemi almıyor.
Mesela sendkeys yöntemi ile capslocka basıtrıyorum ışık yanıp sönüyor sanki basıp çekiyor tam basmıyormuş gibi.