線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2645
推到 Plurk!
推到 Facebook!

如何得知游標所在處的 window handle

答題得分者是:aip999
鈴鐺
初階會員


發表:33
回覆:81
積分:35
註冊:2002-03-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-30 16:28:04 IP:211.21.xxx.xxx 未訂閱
我寫的程式是 a.exe, 想要去設定別的程式的 title, 所以需要一個功能, 將以游標點選其他程式的視窗, 並取得其 window handle. 想請問各位前輩, 是否有做過類似的程式, 該怎麼做呢?
aip999
初階會員


發表:10
回覆:63
積分:44
註冊:2002-03-29

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-30 18:15:58 IP:218.187.xxx.xxx 未訂閱
引言: 我寫的程式是 a.exe, 想要去設定別的程式的 title, 所以需要一個功能, 將以游標點選其他程式的視窗, 並取得其 window handle. 想請問各位前輩, 是否有做過類似的程式, 該怎麼做呢?
在a.exe用Timer 去抓取Handle值 在要抓的視窗要是是Active時可以用GetActiveWindow; 如果只是要Mouse移動到那個的視窗就要取得Handle就用 HWND WindowFromPoint(pt);
鈴鐺
初階會員


發表:33
回覆:81
積分:35
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-30 18:22:13 IP:192.72.xxx.xxx 未訂閱
可是我若將滑鼠 click 之後, 程式控制權就被別的程式取走. 這時怎麼回來 a.exe 呢?
aip999
初階會員


發表:10
回覆:63
積分:44
註冊:2002-03-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-30 23:52:08 IP:218.187.xxx.xxx 未訂閱
引言: 可是我若將滑鼠 click 之後, 程式控制權就被別的程式取走. 這時怎麼回來 a.exe 呢?
你只是要改title? 那你用EnumWindowsProc先抓取所有視窗的title 跟Handle 存起來 然後在程式中讓使用者選擇..在用SetWindowText(hwnd,'要改的Title'); 這樣他的Title就變了..
鈴鐺
初階會員


發表:33
回覆:81
積分:35
註冊:2002-03-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-10-01 15:01:20 IP:192.72.xxx.xxx 未訂閱
引言: 你只是要改title?
非也, 只是為了簡化問題, 我不想用 enum 的方式, 因為要讓 user 設定. 我看到蠻類似的程式, 但它是 VB 寫的 http://140.116.253.138/~cww/html/q00014.html 也許假以時日, 我可以把它翻譯成 delphi
aip999
初階會員


發表:10
回覆:63
積分:44
註冊:2002-03-29

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-10-01 18:59:38 IP:218.187.xxx.xxx 未訂閱
引言:
引言: 你只是要改title?
非也, 只是為了簡化問題, 我不想用 enum 的方式, 因為要讓 user 設定. 我看到蠻類似的程式, 但它是 VB 寫的 http://140.116.253.138/~cww/html/q00014.html 也許假以時日, 我可以把它翻譯成 delphi
還是不懂你要怎麼做@@ 底下是我之前回答你的... procedure TForm1.Timer1Timer(Sender: TObject); var pt : TPoint; hWnd : THandle; CharArray: array[0..254] of char; begin GetCursorPos(pt); hWnd := WindowFromPoint(pt); GetClassName(hWnd,CharArray,255); Label1.Caption:=CharArray; GetWindowText(hWnd,CharArray,255); Label2.Caption:=CharArray; end;
鈴鐺
初階會員


發表:33
回覆:81
積分:35
註冊:2002-03-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-10-25 16:37:18 IP:61.220.xxx.xxx 未訂閱
謝謝 aip999, 因為找不到較好的寫法, 所以我目前採用你提供的方法, 即-使用 timer 來取得設定值.
frankiech
中階會員


發表:7
回覆:78
積分:52
註冊:2002-08-29

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-10-26 09:31:54 IP:218.32.xxx.xxx 未訂閱
引言: 謝謝 aip999, 因為找不到較好的寫法, 所以我目前採用你提供的方法, 即-使用 timer 來取得設定值.
你可以參考這篇文章: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=22391 應該可以省去Timer的方法
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-10-26 11:26:17 IP:203.217.xxx.xxx 未訂閱
你可以參考這篇文章: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=22391 SetwindowsHookEx有一個項目是HM_MOUSE,可是似乎抓不到其他AP, 以下用WH_JOURNALRECORD一樣可取得所有Window下之MouseDown
var hHook:Integer;
function HookProc(iCode:Integer;wParam:wParam;lParam:lParam):LRESULT;stdcall;
var msg:TEventMsg;
begin
  Result:=0;
  if iCode < 0 then //必須將消息傳遞到消息鏈的下一個接受單元
    Result := CallNextHookEx(hHook,iCode,wParam,lParam)
  else if icode=HC_ACTION then begin
    msg:=pEventMSG(lParam)^;
    if msg.message=WM_LBUTTONDOWN then begin
//此行只是顯示Window Handle及x,y座標
      form1.Memo1.Lines.add(inttostr(msg.hwnd) ':' 
                 inttostr(msg.paramL) '-' inttostr(msg.paramH));
    end;
  end;
end;    procedure TForm1.Button1Click(Sender: TObject);
begin
  hHook:=SetwindowsHookEx(WH_JOURNALRECORD,hookProc,HInstance,0);
end;    procedure TForm1.Button2Click(Sender: TObject);
begin
  UnHookWindowsHookEx(hHook);
  hHook:=0;
end;    procedure TForm1.FormDestroy(Sender: TObject);
begin
  if hHook <> 0 then begin
    UnHookWindowsHookEx(hHook);
    hHook:=0;
  end;
end;
系統時間:2024-11-23 20:35:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!