• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Send Key, Send Text sang Handle khác (không cần Focus)

Các mẹo vặt linh tinh khác, không thuộc nhóm nào
tindl88
Thành viên tâm huyết
Thành viên tâm huyết
Posts: 363
Joined: Sat 26/04/2008 6:10 pm
Has thanked: 16 times
Been thanked: 10 times

Send Key, Send Text sang Handle khác (không cần Focus)

Postby tindl88 » Tue 11/11/2008 5:48 pm

Thủ thuật: Send Key, Send Text no focus
Tác giả: tindl88
Mô tả: Send Key, Send Text no focus


  1. 'Vẽ lên Form 1 TextBox, 1 Checkbox, 2 Commandbutton, 2 RadioButton(OptionButton)
  2. 'Dán đoạn code này vào Form
  3. Option Explicit
  4.  
  5. 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
  6. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  7. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  8. Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  9.  
  10. Private Const WM_SETTEXT = &HC
  11. Private Const WM_KEYDOWN = &H100
  12. Private Const WM_KEYUP = &H101
  13. Private Const VK_SPACE = &H20
  14.  
  15. Dim WinHwnd As Long
  16. Dim ExHwnd As Long
  17.  
  18. Private Sub Form_Load()
  19.     Me.Caption = "Không dung hàng"
  20.     Text1.Text = "TextText"
  21. End Sub
  22.  
  23. Private Sub Check1_Click()
  24.     'lây' handle cua? Form
  25.    WinHwnd = FindWindow("ThunderRT6FormDC", "Form1")
  26.     'lây' handle cua? CheckBox
  27.    ExHwnd = FindWindowEx(WinHwnd, 0&, "ThunderRT6CheckBox", "Check1")
  28.     If WinHwnd = 0 Then
  29.         MsgBox "Không tìm thây' cua? sô? nào có tên ''Form1''"
  30.     Else
  31.         SendMessage ExHwnd, WM_KEYDOWN, VK_SPACE, 0&
  32.         SendMessage ExHwnd, WM_KEYUP, VK_SPACE, 0&
  33.     End If
  34. End Sub
  35.  
  36. Private Sub Command1_Click()
  37.     'lây' handle cua? Form
  38.    WinHwnd = FindWindow("ThunderRT6FormDC", "Form1")
  39.     'lây' handle cua? Textbox
  40.    ExHwnd = FindWindowEx(WinHwnd, 0&, "ThunderRT6TextBox", vbNullString)
  41.     If WinHwnd = 0 Then
  42.         MsgBox "Không tìm thây' cua? sô? nào có tên ''Form1''"
  43.     Else
  44.         SendMessage ExHwnd, WM_SETTEXT, 0&, ByVal Text1.Text
  45.     End If
  46. End Sub
  47.  
  48. Private Sub Command2_Click()
  49.     'lây' handle cua? Form
  50.    WinHwnd = FindWindow("ThunderRT6FormDC", "Form1")
  51.     'lây' handle cua? CommandButton
  52.    ExHwnd = FindWindowEx(WinHwnd, 0&, "ThunderRT6CommandButton", "Command1")
  53.     If WinHwnd = 0 Then
  54.         MsgBox "Không tìm thây' cua? sô? nào có tên ''Form1''"
  55.     Else
  56.         SendMessage ExHwnd, WM_KEYDOWN, VK_SPACE, 0&
  57.         SendMessage ExHwnd, WM_KEYUP, VK_SPACE, 0&
  58.     End If
  59. End Sub
  60.  
  61. Private Sub Option1_Click()
  62.     'lây' handle cua? Form
  63.    WinHwnd = FindWindow("ThunderRT6FormDC", "Form1")
  64.     'lây' handle cua? CommandButton
  65.    ExHwnd = FindWindowEx(WinHwnd, 0&, "ThunderRT6OptionButton", "Option1")
  66.     If WinHwnd = 0 Then
  67.         MsgBox "Không tìm thây' cua? sô? nào có tên ''Form1''"
  68.     Else
  69.         SendMessage ExHwnd, WM_KEYDOWN, VK_SPACE, 0&
  70.         SendMessage ExHwnd, WM_KEYUP, VK_SPACE, 0&
  71.     End If
  72. End Sub
  73.  
  74. Private Sub Option2_Click()
  75.     'lây' handle cua? Form
  76.    WinHwnd = FindWindow("ThunderRT6FormDC", "Form1")
  77.     'lây' handle cua? CommandButton
  78.    ExHwnd = FindWindowEx(WinHwnd, 0&, "ThunderRT6OptionButton", "Option2")
  79.     If WinHwnd = 0 Then
  80.         MsgBox "Không tìm thây' cua? sô? nào có tên ''Form1''"
  81.     Else
  82.         SendMessage ExHwnd, WM_KEYDOWN, VK_SPACE, 0&
  83.         SendMessage ExHwnd, WM_KEYUP, VK_SPACE, 0&
  84.     End If
  85. End Sub

Tạo Project mới.
[vb]'Vẽ lên Form 1 Textbox , 1 Checkbox, 1 Commandbutton, 2 RadioButton(OptionButton)
'Dán đoạn code vào form rồi Compile thành file EXE

Option Explicit

Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Private Const SND_ASYNC = &H1
Private Const SND_NODEFAULT = &H2

Private Sub Command1_Click()
sndPlaySound "C:\WINDOWS\Media\ding.wav", SND_ASYNC Or SND_NODEFAULT
End Sub

Private Sub Form_Load()
Text1.Text = ""
End Sub[/vb]
Biên dịch cả 2 thành EXE rồi chạy cả 2 cái...
Attachments
Send X (No Focus).rar
Đã làm sẵn
(9.78 KiB) Downloaded 1201 times


cứng nhắc...vớ vẩn

quoctinvn
Thành viên chính thức
Thành viên chính thức
Posts: 22
Joined: Sat 20/09/2008 9:11 pm

Re: Send Key, Send Text sang Handle khác (không cần Focus)

Postby quoctinvn » Sat 27/12/2008 5:01 pm

Cái này dùng API bình thường mà ? Có j đâu

User avatar
lanlan
Thành viên tâm huyết
Thành viên tâm huyết
Posts: 310
Joined: Thu 05/06/2008 8:49 am
Been thanked: 1 time

Re: Send Key, Send Text sang Handle khác (không cần Focus)

Postby lanlan » Mon 29/12/2008 8:38 am

Cái này cũng rất hợp với cái em đang mong muốn nhưng cho em hỏi tí nhé là nếu em có 2 form em muốn khi form 1 nhận focus form 2 vẫn hiển thị trên form 1 có được không :-?
"•´¨*•.¸¸.*..^_^ one love-one heart ^_^..*.¸¸.•*¨."
_______"•´`•.(¸.•´(¸.•* *•.¸)`•.¸).•´`•"
________________*(¨`•.•´¨)*
__________________`•.¸.•’

tindl88
Thành viên tâm huyết
Thành viên tâm huyết
Posts: 363
Joined: Sat 26/04/2008 6:10 pm
Has thanked: 16 times
Been thanked: 10 times

Re: Send Key, Send Text sang Handle khác (không cần Focus)

Postby tindl88 » Thu 01/01/2009 12:10 pm

quoctinvn wrote:Cái này dùng API bình thường mà ? Có j đâu


Mình không đỡ nổi câu này.
cứng nhắc...vớ vẩn

tindl88
Thành viên tâm huyết
Thành viên tâm huyết
Posts: 363
Joined: Sat 26/04/2008 6:10 pm
Has thanked: 16 times
Been thanked: 10 times

Re: Send Key, Send Text sang Handle khác (không cần Focus)

Postby tindl88 » Thu 01/01/2009 12:12 pm

@lanlan - đọc mãi mà chẳng hiểu lanlan muốn nói gì
cứng nhắc...vớ vẩn

tindl88
Thành viên tâm huyết
Thành viên tâm huyết
Posts: 363
Joined: Sat 26/04/2008 6:10 pm
Has thanked: 16 times
Been thanked: 10 times

Re: Send Key, Send Text sang Handle khác (không cần Focus)

Postby tindl88 » Thu 01/01/2009 12:15 pm

À có phải là cả 2 form cùng nhận focus.
cứng nhắc...vớ vẩn

User avatar
vietteiv
Quản trị
Quản trị
Posts: 1325
Joined: Sat 10/02/2007 12:17 am
Location: Cung cấp giải pháp quản lý doanh nghiệp, dự án, tư vấn xây dựng
Has thanked: 6 times
Been thanked: 71 times
Contact:

Re: Send Key, Send Text sang Handle khác (không cần Focus)

Postby vietteiv » Thu 01/01/2009 12:52 pm

ý lanlan là form2 luôn ở dạng ontop mặc dù form1 đang nhận focus.

Code: Select all

  1. form2.Show vbModeless, form1

newbi
Thành viên chính thức
Thành viên chính thức
Posts: 46
Joined: Thu 20/11/2008 8:01 am

Re: Send Key, Send Text sang Handle khác (không cần Focus)

Postby newbi » Thu 15/01/2009 10:23 am

Thì cứ cho form 1 nhận forcus, còn form 2 set cho nó ontop ấy.

User avatar
trungtrung
Thành viên tích cực
Thành viên tích cực
Posts: 171
Joined: Wed 17/09/2008 10:14 am
Been thanked: 1 time
Contact:

Re: Send Key, Send Text sang Handle khác (không cần Focus)

Postby trungtrung » Mon 19/01/2009 9:45 am

Private Const VK_SPACE = &H20

Ngoài nút Space ra còn nút nào nữa ko cho cháu biết với T_T
Hello!

User avatar
truongphu
VIP
VIP
Posts: 4766
Joined: Sun 04/11/2007 10:57 am
Location: Cam Đức, Khánh hòa
Has thanked: 14 times
Been thanked: 520 times

Re: Send Key, Send Text sang Handle khác (không cần Focus)

Postby truongphu » Mon 19/01/2009 12:10 pm

Khi cài VB6, tại thư mục ... Common\Tools\Winapi có APILOAD.EXE kèm 3 file TXT
Bạn hãy chạy chương trình nầy (Cái nầy ít người biết!)
vào File menu Load text file, chọn file Win32API.txt
ở cửa sổ API Type, bạn chọn: Constants

Trở lại bài viết, thấy có:
Private Const WM_SETTEXT = &HC
Private Const WM_KEYDOWN = &H100
Private Const WM_KEYUP = &H101
Private Const VK_SPACE = &H20

Vậy thì bạn cứ tra VK sẽ có rất nhiều hằng liên quan các phím, rất dễ hiểu: vd VK_HOME = &H24 là nút Home
Tương tự WM_KEYFIRST = &H100 là nút key left
Dòng họ WM có rất nhiều và khó hiểu, nếu muốn hiểu, bạn chịu khó tra trên Google
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

conan52
Thành viên chính thức
Thành viên chính thức
Posts: 15
Joined: Mon 06/09/2010 6:14 pm

Re: Send Key, Send Text sang Handle khác (không cần Focus)

Postby conan52 » Tue 16/11/2010 10:45 pm

bạn nào có tài liệu hướng dẫn về hàm Sendkeys post lên cho mình xin. Mình cảm ơn trước ạ

User avatar
tuyen_dt18
Guru
Guru
Posts: 261
Joined: Sat 19/04/2008 8:46 pm
Location: Hưng Yên
Been thanked: 43 times
Contact:

Re: Send Key, Send Text sang Handle khác (không cần Focus)

Postby tuyen_dt18 » Wed 17/11/2010 12:58 am

Trích từ VBLib

Tên hàm:
SendKeys

Mô tả:
SendKeys string[, wait]
Giả lập một sự kiện nhấn phím

Tham số:
string:
Chuỗi phím muốn gửi đi
wait:
Thờii gian chờ

Ghi chú:
Dùng cho tham số key
BACKSPACE = {BACKSPACE}, {BS}, or {BKSP}
BREAK = {BREAK}
CAPS LOCK = {CAPSLOCK}
DEL or DELETE = {DELETE} or {DEL}
DOWN ARROW = {DOWN}
END = {END}
ENTER = {ENTER} or ~
ESC = {ESC}
HELP = {HELP}
HOME = {HOME}
INS or INSERT = {INSERT} or {INS}
LEFT ARROW = {LEFT}
NUM LOCK = {NUMLOCK}
PAGE DOWN = {PGDN}
PAGE UP = {PGUP}
PRINT SCREEN = {PRTSC}
RIGHT ARROW = {RIGHT}
SCROLL LOCK = {SCROLLLOCK}
TAB = {TAB}
UP ARROW = {UP}
F1 = {F1}
F2 = {F2}
F3 = {F3}
F4 = {F4}
F5 = {F5}
F6 = {F6}
F7 = {F7}
F8 = {F8}
F9 = {F9}
F10 = {F10}
F11 = {F11}
F12 = {F12}
F13 = {F13}
F14 = {F14}
F15 = {F15}
F16 = {F16}
SHIFT = +
CTRL = ^
ALT = %

Ví dụ:
  1. Option Explicit
  2. Private Sub Form_Load()
  3. Dim ReturnValue, I
  4.     ReturnValue = Shell("CALC.EXE", 1)' Run Calculator.
  5.    AppActivate ReturnValue' Activate Calculator.
  6.    'Gui mot day phep cong tu 1 den 100
  7.    For I = 1 To 100'
  8.        SendKeys I & "{+}", True
  9.     Next I
  10.     SendKeys "=", True' Tinh ket qua
  11.    SendKeys "%{F4}", True' ALT+F4 de dong chuong trinh
  12. End Sub
  13.  

Chú ý lần sau không hỏi tại Box này, nên tạo một chủ đề mới trong Box thắc mắc
Hỏi ý kiến tác giả trước khi sử dụng hoặc trích dẫn rõ nguồn bài viết khi sử dụng.


Return to “[VB] Mẹo vặt khác”

Who is online

Users browsing this forum: No registered users and 1 guest