Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 13 kết quả

Đề tài: tự ấn phím

  1. #1
    Ngày gia nhập
    03 2008
    Bài viết
    1

    Mặc định tự ấn phím

    chương trình của mình đay:
    C++ Code:
    1. #include "stdafx.h"
    2. #include "windows.h"
    3. #include "iostream"
    4. using namespace std;
    5. int _tmain(int argc, _TCHAR* argv[])
    6. {
    7. HWND handle = GetForegroundWindow();
    8. cout<<handle;
    9. int n = 1;
    10. while (n != 0)
    11. {
    12.  
    13. HWND wCurrentHandle = GetForegroundWindow();
    14. if(wCurrentHandle != handle)
    15. {
    16. Sleep(1000);
    17. handle = GetForegroundWindow();
    18. n = 0;
    19. }
    20. }
    21. while (1)
    22. {
    23. cout<<handle;
    24. PostMessage(handle,WM_IME_KEYDOWN,VK_TAB,0);
    25. Sleep(1000);
    26. }
    27. return 0;
    28. }

    ý định của mình là sau khi chạy chương trình này lên, rồi bật của sổ của chương trình khác lên, chương trình của mình sẽ lấy handle của của sổ đó quà gửi phím TAB đến của sổ đó.
    mong muốn của mình là: của sổ dược gửi phím đến sẻ có tác dụng y như mình ấn bàn phím vậy
    vấn đề của mình là: ko hoàn toàn giống mình tự ấn phím, và có chương trình ấn dc có chương trình không ấn dc,
    ví dụ: khi chạy và cho khi chạy và thực hiện trên Visual studio thì tháy có hiệu dụng trên phần xoạn thảo của chương trình đó.nhưng bên microsoft Word thì không có hiện tượng trừ khi mình ấn và giữ chuột, có chương trình thì không có hiện tương gì luôn như của sổ game TRU TIÊN, notebab...
    mong các pro giúp đỡ, em đã mất máy ngày tìm hiểu rồi nhưng vẫn công cóc.

    Nhớ bọc code vào tag code nha bạn
    Đã được chỉnh sửa lần cuối bởi meoconlongvang : 01-03-2009 lúc 08:19 PM.

  2. #2
    Ngày gia nhập
    01 2009
    Bài viết
    89

    Bài của bạn sẽ không thành công trong hầu hết các app là phải rồi.
    Khi gửi message đó thì chỉ có main window là nhận được còn focus window thì không. Do đó bạn phải tìm được cái focused window trong cái app đó và gửi message cho nó. Bạn thử tham khảo doạn code của mình xem:

    C++ Code:
    1. #include <iostream>
    2. #include <windows.h>
    3.  
    4. using namespace std;
    5.  
    6. HWND GetChildActiveWindow(HWND hWnd)
    7. {  
    8.     GUITHREADINFO guiInfo;
    9.     guiInfo.cbSize = sizeof(GUITHREADINFO);
    10.     DWORD threadID = GetWindowThreadProcessId(hWnd,NULL);
    11.     if(!GetGUIThreadInfo(threadID,&guiInfo))
    12.     {      
    13.         return NULL;       
    14.     }
    15.     return guiInfo.hwndFocus;
    16. }
    17. int main(int argc, CHAR* argv[])
    18. {                              
    19.     while (1)                          
    20.     {  
    21.         Sleep(2000);
    22.         HWND hParent = GetForegroundWindow();
    23.         HWND hFocusedChild = GetChildActiveWindow(hParent);
    24.         if(hFocusedChild)
    25.         {
    26.             PostMessage(hFocusedChild,WM_KEYDOWN,VK_TAB,0);
    27.         }
    28.         else
    29.         {
    30.             cout<<"failed to send tap key!\n";
    31.         }
    32.     }
    33.     return 0;
    34. }
    Đã được chỉnh sửa lần cuối bởi ngocbig™ : 01-03-2009 lúc 11:32 AM.

  3. #3
    Ngày gia nhập
    02 2009
    Bài viết
    88

    Code:
    #include "stdafx.h"
    #include "windows.h"
    #include "iostream"
    using namespace std;
    int _tmain(int argc, _TCHAR* argv[])
    {
    	HWND handle = GetForegroundWindow();
    	cout<<handle;
    	int n = 1;
    	while (n != 0)
    	{
    
    		HWND wCurrentHandle = GetForegroundWindow();
    		if(wCurrentHandle != handle)
    		{
    			Sleep(1000);
    			handle = GetForegroundWindow();
    			n = 0;
    		}
    	}
    	while (1)
    	{
    		cout<<handle;
    		PostMessage(handle,WM_IME_KEYDOWN,VK_TAB,0);
    		Sleep(1000);
    	}
    	return 0;
    }
    bài của ngocbig mình không chạy được
    bài của bạn chủ topic thì bạn đang gửi phím tới cửa sổ chứ chưa chắc đã gửi đến con trỏ của bạn ,bạn muốn gửi phải dùng SendMessage và keyb_event
    Đã được chỉnh sửa lần cuối bởi RadiRadic : 01-03-2009 lúc 11:27 AM.

  4. #4
    Ngày gia nhập
    01 2009
    Bài viết
    89

    bài của ngocbig mình không chạy được
    Hehe! mình chỉ test trên vs2008

    bài của bạn chủ topic thì bạn đang gửi phím tới cửa sổ chứ chưa chắc đã gửi đến con trỏ của bạn ,bạn muốn gửi phải dùng SendMessage và keyb_event
    Một cách rất hay!

  5. #5
    Ngày gia nhập
    11 2008
    Bài viết
    73

    Thử tham khảo kỹ thuật Hook xem.

  6. #6
    Ngày gia nhập
    02 2009
    Bài viết
    88

    Mặc định tự ấn phím

    Hook chẳng có tý liên quan gì đến cái này ...

  7. #7
    Ngày gia nhập
    11 2008
    Bài viết
    73

    Sao bạn RadiRadic biết Hook không có liên quan hay là không phục vụ cho những mục đích đại loại như vậy?

  8. #8
    Ngày gia nhập
    02 2009
    Bài viết
    88

    Trích dẫn Nguyên bản được gửi bởi VaT Xem bài viết
    Sao bạn RadiRadic biết Hook không có liên quan hay là không phục vụ cho những mục đích đại loại như vậy?
    bản thân từ HOOK nghĩa là câu móc,có nghĩa là thao tác chặn hoặc theo dõi Message,không phải là hành động gửi key đến cửa sổ,nếu định làm như unikey hay vietkey thì người ta phải kết hợp cả Hook lẫn gửi key đến cửa sổ

  9. #9
    Ngày gia nhập
    11 2008
    Bài viết
    73

    Vậy theo ý của bạn RadiRadic là Unikey ứng dụng 2 kỹ thuật quan trọng là :
    - Kỹ thuật Hook
    - Kỹ thuật Send Key(Send Message) --> Cái này mình lần đầu nghe tới, nên chưa biết

  10. #10
    Ngày gia nhập
    02 2009
    Bài viết
    88

    Vậy theo ý của bạn RadiRadic là Unikey ứng dụng 2 kỹ thuật quan trọng là :
    - Kỹ thuật Hook
    - Kỹ thuật Send Key(Send Message) --> Cái này mình lần đầu nghe tới, nên chưa biết
    đúng vậy đó,Hook làm sao mà gửi key đến cửa sổ được

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn