C#, GetWindowText, 如何得到 text 的字串 |
答題得分者是:sryang
|
xiaolaba
一般會員 ![]() ![]() 發表:10 回覆:17 積分:5 註冊:2010-05-15 發送簡訊給我 |
// http://www.brainbell.com/tutors/C_Sharp/Using_Callback_Functions_with_C.htm // 2013-03-30 C# 的源碼是從這個網站抄來的, 試驗過, 確實可以引用 WINDOWS CALLBACK 的功能, 得到每個 WINDOW 的 HANDLE 當然, 每個 WINDOWS 的 CAPTION 也是可以全部列印出來. 俺嘗試改了一下, 希望過濾這個 WINDOWS 的 CAPTION, 找到屬於俺自己寫的一個小工具的 WINDOW, 然後記住他的 HANDLE 供後面的動作使用 可是 GetWindowText(hWnd, text, 255) 的第二個參數, 根據 WIN32 API 的描述是 lpString, 意思就是一個 POINTER 俺用 WIN32ASM 很容易, 只要直接寫成存取 OFFSET, 就得到內容 不過 C# 是試了好一陣子都不得要領. 請教 如果 用 C# 的語法, 得到這個 POINTER 指向的內容呢, 謝謝 [code c#] // http://www.brainbell.com/tutors/C_Sharp/Using_Callback_Functions_with_C.htm // 2013-03-30, xiaolaba using System; using System.Runtime.InteropServices; using System.Text; class CallbackApp { [DllImport("user32.dll")] static extern int GetWindowText(int hWnd, StringBuilder text, int count); delegate bool CallbackDef(int hWnd, int lParam); [DllImport("user32.dll")] static extern int EnumWindows (CallbackDef callback, int lParam); static bool PrintWindow(int hWnd, int lParam) { string mystring; StringBuilder text = new StringBuilder(255); GetWindowText(hWnd, text, 255); mystring <-*text; // 編譯錯誤, 無法得到 text 包含的字串 Console.WriteLine("Window caption: {0}, Handle {1}", text, hWnd); Console.WriteLine("hWnd - Window Handle = {0}", hWnd); return true; } static void Main() { CallbackDef callback = new CallbackDef(PrintWindow); EnumWindows(callback, 0); } } [/code]
------
http://xiaolaba.wordpress.com |
sryang
尊榮會員 ![]() ![]() ![]() ![]() ![]() ![]() 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
|
xiaolaba
一般會員 ![]() ![]() 發表:10 回覆:17 積分:5 註冊:2010-05-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |