PDA

View Full Version : سوال: بررسی کلید های فشرده شده در هر جای ویندوز



ali.hojjati
دوشنبه 17 فروردین 1388, 20:31 عصر
با سلام من در حال نوشتن یک برنامه هستم می خواهم وقت برنامه اکتیو نیست و برنامه های دیگر در حال اجرا هستند وقتی یک کلید ترکیبی مشخص در هر جایی از ویندوز که فشرده شد برنامه اکتیو بشه. منظورم اینه که چجوری می شه روی کلید های فشرده شده بر ری کیبورد در همه حال در زمانی که برنامه در حال اجرا شدن است اشراف داشت. من یک کدی را داشتم که در محیط vb6 بود و فقط تک کلید را بر می گرداند و این کد به کارم نیومد.
لطفا راهنمایی کنید

baidin
پنج شنبه 20 فروردین 1388, 14:28 عصر
دوست عزیز بایستی از API استفاده کنی و توی سایت Code Project من یه چنین پروژه ای را دیده ام. در صورتی که پروژه ای را که گفتی بگذاری شاید بهتر بتونیم کمکت کنیم

ali.hojjati
شنبه 29 فروردین 1388, 20:02 عصر
اگه ممکنه اون سورس را برام بگزارید تا هم من و هم بقیه بتونن استفاده کنن.
با تشکر.

baidin
چهارشنبه 02 اردیبهشت 1388, 03:30 صبح
اگه ممکنه اون سورس را برام بگزارید تا هم من و هم بقیه بتونن استفاده کنن.
با تشکر.

دوست عزیز برنامه را باید بگردم و پیدا کنم میتونی یه سرچ توی CodeProject بکنی و اگه پیدا نکردی یه خبری بده تا .....:عصبانی++:

mostafaaa
چهارشنبه 02 اردیبهشت 1388, 10:39 صبح
سلام دوست من
این باید کارت رو راه بندازه

Imports System.Runtime.InteropServices
Public Class Form1
Private Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As IntPtr, ByVal id As Integer, _
ByVal fsModifiers As Integer, ByVal vk As Integer) As Integer
Private Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As IntPtr, ByVal id As Integer) As Integer
Private Declare Function GlobalAddAtom Lib "kernel32" Alias "GlobalAddAtomA" (ByVal lpString As _
String) As Short
Private Declare Function GlobalDeleteAtom Lib "kernel32" (ByVal nAtom As Short) As Short
Private Const MOD_ALT As Integer = 1
Private Const MOD_CONTROL As Integer = 2
Private Const MOD_SHIFT As Integer = 4
Private Const MOD_WIN As Integer = 8
Private Sub Form1_Closed(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Closed
' unregister the hotkey (NEVER FORGET THIS!)
UnregisterGlobalHotKey()
End Sub
' unregister a global hotkey
Public Sub UnregisterGlobalHotKey()
If Me.hotkeyID <> 0 Then
UnregisterHotKey(Me.Handle, hotkeyID)
' clean up the atom list
GlobalDeleteAtom(hotkeyID)
hotkeyID = 0
End If
End Sub
' the id for the hotkey
Dim hotkeyID As Short
' register a global hot key
Public Sub RegisterGlobalHotKey(ByVal hotkey As Keys, ByVal modifiers As Integer)
Try
' use the GlobalAddAtom API to get a unique ID (as suggested by MSDN docs
Dim atomName As String = AppDomain.GetCurrentThreadId.ToString("X8") & Me.Name
hotkeyID = GlobalAddAtom(atomName)
If hotkeyID = 0 Then
Throw New Exception("Unable to generate unique hotkey ID. Error code: " & _
Marshal.GetLastWin32Error().ToString)
End If
' register the hotkey, throw if any error
If RegisterHotKey(Me.Handle, hotkeyID, modifiers, CInt(hotkey)) = 0 Then
Throw New Exception("Unable to register hotkey. Error code: " & _
Marshal.GetLastWin32Error.ToString)
End If
Catch ex As Exception
' clean up if hotkey registration failed
UnregisterGlobalHotKey()
End Try
End Sub
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
' let the base class process the message
MyBase.WndProc(m)
' if this is a WM_HOTKEY message, notify the parent object
Const WM_HOTKEY As Integer = &H312
If m.Msg = WM_HOTKEY Then
' do whatever you wish to do when the hotkey is pressed
' in this example we activate the form and display a messagebox
Me.WindowState = FormWindowState.Normal
Me.Activate()
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' register the Shift+Ctrl+F6 hot key
RegisterGlobalHotKey(Keys.F6, MOD_SHIFT Or MOD_CONTROL)
End Sub
End Class


یا علی