• 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
Bài viết: 363
Ngày tham gia: T.Bảy 26/04/2008 6:10 pm
Has thanked: 16 time
Been thanked: 10 time

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

Gửi bàigửi bởi tindl88 » T.Ba 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.
  1. 'Vẽ lên Form 1 Textbox , 1 Checkbox, 1 Commandbutton, 2 RadioButton(OptionButton)
  2. 'Dán đoạn code vào form rồi Compile thành file EXE
  3.  
  4. Option Explicit
  5.  
  6. Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
  7. Private Const SND_ASYNC = &H1
  8. Private Const SND_NODEFAULT = &H2
  9.  
  10. Private Sub Command1_Click()
  11.     sndPlaySound "C:\WINDOWS\Media\ding.wav", SND_ASYNC Or SND_NODEFAULT
  12. End Sub
  13.  
  14. Private Sub Form_Load()
  15.     Text1.Text = ""
  16. End Sub

Biên dịch cả 2 thành EXE rồi chạy cả 2 cái...
Tập tin đính kèm
Send X (No Focus).rar
Đã làm sẵn
(9.78 KiB) Đã tải 1189 lần


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

quoctinvn
Thành viên chính thức
Thành viên chính thức
Bài viết: 22
Ngày tham gia: T.Bảy 20/09/2008 9:11 pm

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

Gửi bàigửi bởi quoctinvn » T.Bảy 27/12/2008 5:01 pm

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

Hình đại diện của người dùng
lanlan
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 310
Ngày tham gia: T.Năm 05/06/2008 8:49 am
Been thanked: 1 time

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

Gửi bàigửi bởi lanlan » T.Hai 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
Bài viết: 363
Ngày tham gia: T.Bảy 26/04/2008 6:10 pm
Has thanked: 16 time
Been thanked: 10 time

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

Gửi bàigửi bởi tindl88 » T.Năm 01/01/2009 12:10 pm

quoctinvn đã viết: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
Bài viết: 363
Ngày tham gia: T.Bảy 26/04/2008 6:10 pm
Has thanked: 16 time
Been thanked: 10 time

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

Gửi bàigửi bởi tindl88 » T.Năm 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
Bài viết: 363
Ngày tham gia: T.Bảy 26/04/2008 6:10 pm
Has thanked: 16 time
Been thanked: 10 time

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

Gửi bàigửi bởi tindl88 » T.Năm 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

Hình đại diện của người dùng
vietteiv
Quản trị
Quản trị
Bài viết: 1323
Ngày tham gia: T.Bảy 10/02/2007 12:17 am
Đến từ: 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 time
Been thanked: 71 time
Liên hệ:

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

Gửi bàigửi bởi vietteiv » T.Năm 01/01/2009 12:52 pm

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

Mã: Chọn hết

  1. form2.Show vbModeless, form1

newbi
Thành viên chính thức
Thành viên chính thức
Bài viết: 46
Ngày tham gia: T.Năm 20/11/2008 8:01 am

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

Gửi bàigửi bởi newbi » T.Năm 15/01/2009 10:23 am

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

Hình đại diện của người dùng
trungtrung
Thành viên tích cực
Thành viên tích cực
Bài viết: 171
Ngày tham gia: T.Tư 17/09/2008 10:14 am
Been thanked: 1 time
Liên hệ:

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

Gửi bàigửi bởi trungtrung » T.Hai 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!

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4763
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 14 time
Been thanked: 518 time

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

Gửi bàigửi bởi truongphu » T.Hai 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
Bài viết: 15
Ngày tham gia: T.Hai 06/09/2010 6:14 pm

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

Gửi bàigửi bởi conan52 » T.Ba 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 ạ

Hình đại diện của người dùng
tuyen_dt18
Guru
Guru
Bài viết: 259
Ngày tham gia: T.Bảy 19/04/2008 8:46 pm
Đến từ: Hưng Yên
Been thanked: 43 time
Liên hệ:

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

Gửi bàigửi bởi tuyen_dt18 » T.Tư 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.


Quay về “[VB] Mẹo vặt khác”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.0 khách