取得別的程式的classname和handle後,如何輸入字串 |
答題得分者是:taishyang
|
maplefog
一般會員 ![]() ![]() 發表:16 回覆:24 積分:13 註冊:2008-11-08 發送簡訊給我 |
我目前的需求是想要由程式開啟一個已經加密的pdf檔 也就是打開時需要輸入密碼才行 現在的進度已經到可以取得那個輸入密碼edit的classname了, 但是不知道如何由程式輸入字串到那個edit,請教各位先進,謝謝 以下是我目前的程式碼 [code cpp] void __fastcall TForm1::Button1Click(TObject *Sender) { ShellExecute(Handle,"open","c:\\a.pdf",NULL,NULL,SW_MAXIMIZE); Sleep(2000); HWND h = ::FindWindow(NULL,"密碼"); if (h != 0) EnumChildWindows(h, reinterpret_cast } //--------------------------------------------------------------------------- HANDLE hArray[10]; int Count = 0; bool CALLBACK EnumChildProc(HWND h, LPARAM a) { char classname[128]; ZeroMemory(classname,128); GetClassName(h,classname,128); if (AnsiString(classname) == "RICHEDIT50W") hArray[Count ] = h; return true; } //--------------------------------------------------------------------------- [/code] |
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
maplefog
一般會員 ![]() ![]() 發表:16 回覆:24 積分:13 註冊:2008-11-08 發送簡訊給我 |
先取得Handle 再使用PostMessage就可以解決了
[code cpp] void __fastcall TForm1::Button1Click(TObject *Sender) { ShellExecute(Handle,"open","c:\\a.pdf",NULL,NULL,SW_MAXIMIZE); Sleep(1000); HWND LastEditHandle = ::GetForegroundWindow(); AttachThreadInput(GetCurrentThreadId(), GetWindowThreadProcessId (LastEditHandle, NULL), true); HWND hFocusWin = GetFocus(); AttachThreadInput(GetCurrentThreadId(), GetWindowThreadProcessId (LastEditHandle, NULL), false); int i; Byte ch; AnsiString str = "參考看看"; for( i = 1; i <= str.Length(); i ) { ch = Byte(str[i]); if( IsDBCSLeadByte(ch) ) PostMessage(hFocusWin, WM_IME_CHAR, MAKEWORD(Byte(str[ i]), ch), 0); else PostMessage(hFocusWin, WM_IME_CHAR, WORD(ch), 0); } } [/code] |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |