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ố 15 kết quả

Đề tài: Sử dụng hook in C# để thay đổi text của label?

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

    Thumbs down Sử dụng hook in C# để thay đổi text của label?

    mình đang tập tành hook trên C#.

    mình có 1 chuơng trình(demo) với 1 label ở trên form đó

    => làm thế nào để change text của label này ! (1 dạng hook vào chuơng trình khác và change text của nó)

    mình nghĩ suốt mấy ngày mà ko ra ! bạn nào biết giúp mình với .

    Đã được chỉnh sửa lần cuối bởi sona9qt : 03-08-2011 lúc 11:43 PM.

  2. #2
    Ngày gia nhập
    05 2011
    Bài viết
    299

    tiêu đề tiếng Anh mà sao nội dung lại tiếng Việt thế ?
    Programming tutorials and source code examples

    Trong nhà không vợ không con
    Uống bia gặm thịt sao ngon thế này
    Nhậu nhẹt không bị la rầy
    Một tuần ta cứ bảy ngày " nâng ly "....

  3. #3
    Ngày gia nhập
    08 2011
    Nơi ở
    Hà Nội | http://ipmac.vn
    Bài viết
    198

    Trích dẫn Nguyên bản được gửi bởi sona9qt Xem bài viết
    mình đang tập tành hook trên C#.

    mình có 1 chuơng trình(demo) với 1 label ở trên form đó

    => làm thế nào để change text của label này ! (1 dạng hook vào chuơng trình khác và change text của nó)

    mình nghĩ suốt mấy ngày mà ko ra ! bạn nào biết giúp mình với .

    Trước tiên bạn cần bắt được handle của cửa sổ đó.
    Mình gửi bạn ví dụ bắt title của cửa sổ đang active -> khi bắt được handle của cửa sổ này bạn có thể dùng API để get child windows được.
    Attached Files Attached Files

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

    Trích dẫn Nguyên bản được gửi bởi anhnt3 Xem bài viết
    Trước tiên bạn cần bắt được handle của cửa sổ đó.
    Mình gửi bạn ví dụ bắt title của cửa sổ đang active -> khi bắt được handle của cửa sổ này bạn có thể dùng API để get child windows được.
    thank bạn. phần get handle này mình làm được rùi !

    mình vẫn lúng túng trong khâu chặn Lời gọi hàm API và chuyển hướng sang hàm mình cần thực hiện.

    bạn có thể demo trường hợp change text of label được không ! thank bạn nhiều .

  5. #5
    Ngày gia nhập
    08 2011
    Nơi ở
    Hà Nội | http://ipmac.vn
    Bài viết
    198

    Trích dẫn Nguyên bản được gửi bởi sona9qt Xem bài viết
    thank bạn. phần get handle này mình làm được rùi !

    mình vẫn lúng túng trong khâu chặn Lời gọi hàm API và chuyển hướng sang hàm mình cần thực hiện.

    bạn có thể demo trường hợp change text of label được không ! thank bạn nhiều .
    Mình đã code thêm phần lấy toàn bộ child windows của một cửa sổ.
    Bây giờ bạn chỉ cần check xem child window nào là textbox dựa vào window class và chính giá trị của nó. Và đổi text cho nó bằng API SetWindowText
    Attached Files Attached Files

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

    Mặc định Sử dụng hook in C# để thay đổi text của label?

    Trích dẫn Nguyên bản được gửi bởi anhnt3 Xem bài viết
    Mình đã code thêm phần lấy toàn bộ child windows của một cửa sổ.
    Bây giờ bạn chỉ cần check xem child window nào là textbox dựa vào window class và chính giá trị của nó. Và đổi text cho nó bằng API SetWindowText
    thank cậu ! mình làm được rùi

  7. #7
    Ngày gia nhập
    06 2011
    Bài viết
    121

    Trích dẫn Nguyên bản được gửi bởi anhnt3 Xem bài viết
    Mình đã code thêm phần lấy toàn bộ child windows của một cửa sổ.
    Bây giờ bạn chỉ cần check xem child window nào là textbox dựa vào window class và chính giá trị của nó. Và đổi text cho nó bằng API SetWindowText
    hook quả là khó, bạn có thể demo cho mình cái giống như yêu cầu của chủ thớt không,mình cũng biết sơ sơ thui, mình muốn tìm hiểu cái đơn giản nhất

  8. #8
    Ngày gia nhập
    08 2011
    Nơi ở
    Hà Nội | http://ipmac.vn
    Bài viết
    198

    Trích dẫn Nguyên bản được gửi bởi chitviv Xem bài viết
    hook quả là khó, bạn có thể demo cho mình cái giống như yêu cầu của chủ thớt không,mình cũng biết sơ sơ thui, mình muốn tìm hiểu cái đơn giản nhất
    Đấy không phải là hook mà là dùng API của Windows thôi bạn.
    Các bạn máu me nên dành thời gian đọc quyển Windows Programming http://www.charlespetzold.com/pw5/

    C# chẳng qua là gọi Pinvoke từ managed code sang unmanaged.

    Hook thì mình sẽ làm bài tut riêng sau.

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

    Code:
            [DllImport("User32.dll")]
            public static extern bool SetForegroundWindow(IntPtr hWnd);
            [DllImport("user32.dll")]
            static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
            [DllImport("user32.dll", EntryPoint = "SetWindowText", CharSet = CharSet.Ansi)]
            public static extern bool SetWindowText(IntPtr hWnd, String strNewWindowName);
            [DllImport("user32.dll")]
            public static extern int UpdateWindow(IntPtr hWnd);
            [DllImport("user32.dll", SetLastError = true)]
            static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
    
            [DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
            static extern int GetWindowTextLength(IntPtr hWnd);
    
            [DllImport("user32.dll")]
            static extern IntPtr GetForegroundWindow();
    
            private void Form1_Load(object sender, EventArgs e)
            {
                IntPtr hwnd = IntPtr.Zero;
                IntPtr hwndChild = IntPtr.Zero;
                foreach (Process proc in Process.GetProcesses())
                {
                    if (proc.MainWindowTitle.Contains("Calculator"))
                    {
                        SetForegroundWindow(proc.MainWindowHandle);
                        Thread.Sleep(1000);
                        hwnd = GetForegroundWindow();
                        //MessageBox.Show(hwnd.ToString());
                        hwndChild = FindWindowEx((IntPtr)hwnd, IntPtr.Zero, "Button", "Backspace");
                        //MessageBox.Show(hwndChild.ToString());
    
                        int length = GetWindowTextLength(hwndChild);
                        StringBuilder sb = new StringBuilder(length + 1);
                        GetWindowText(hwndChild, sb, sb.Capacity);
                        MessageBox.Show(sb.ToString());
    
                        SetWindowText(hwndChild, "aaaaa");  //<==  loi o day
                    }
                }
            }
    đây là code mình muốn thay đổi TEXT nút Backspace của Calculator . Nhưng khi SetWindowText xong ! TEXT của BUTTON Backspace vẫn không thay dổi !
    Mình thiếu ở chỗ nào :( .. bạn nào biết giúp mình với

  10. #10
    Ngày gia nhập
    07 2011
    Bài viết
    20

    Cái này hình như là kỹ thuật subclass chứ phải hook. bác anhnt demo cho ae 1 chút về subclass trong c# dc K? mình thử toàn thấy SetWindownLong trả về 0. Mà subclass này có thể thực hiện với control của chương trình khác được không nhỉ?
    Mong nhận dc reply của bác.

Các đề tài tương tự

  1. Tạo vòng lặp để thay đổi text trên Label
    Gửi bởi vltd trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 29-04-2013, 12:47 PM
  2. Thay thế header Text được load từ field trong db bằng text theo ý muốn ?
    Gửi bởi toanzoom trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 17-05-2012, 09:38 PM
  3. Cách làm cho label thay đổi text liên tục trong C#?
    Gửi bởi hikagu2000 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 10
    Bài viết cuối: 01-02-2012, 04:42 PM
  4. Cách random text cho 1 mảng label
    Gửi bởi Chicken2 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 8
    Bài viết cuối: 10-11-2011, 05:00 PM
  5. Lấy giá trị của label(label.Text) trong datalist
    Gửi bởi nhatnghe_thuong trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 7
    Bài viết cuối: 16-02-2011, 04:48 PM

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