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

取得前景視窗的鍵盤游標位置

缺席
twinstart
一般會員


發表:4
回覆:7
積分:17
註冊:2007-12-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-12-16 13:39:20 IP:140.113.xxx.xxx 未訂閱
我的程式是利用F9呼叫Form1,希望Form1出現的位置是在前景視窗(如記事本)鍵盤游標下方,
所以我利用GetWindowRect(Handle, &pos)取得前景視窗在螢幕上的座標位置,
再利用GetCaretPos(&pt)取得鍵盤游標位置,
GetWindowRect可正確取得前景視窗的座標,
但是GetCaretPos取得的數值卻不會隨前景視窗鍵盤游標的位置改變,
每次取得的數值都是x=0, y=0。
請問要如何才能正確取得前景視窗的鍵盤游標位置呢?
謝謝。程式碼如下:

[code cpp]
Unit1.h
RECT pos;
POINT pt;
HWND hTarg;
char str1[30], str2[30];
void __fastcall MsgOcur(tagMSG &Msg, bool &Handled);

Unit1.cpp
void __fastcall TForm1::FormCreate(TObject *Sender)
{
RegisterHotKey(hTarg,89,NULL,VK_F9);
Application->OnMessage = MsgOcur;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MsgOcur(tagMSG &Msg, bool &Handled)
{
if(Msg.message == WM_HOTKEY)
{
hTarg = GetForegroundWindow();
GetWindowRect(hTarg, &pos);
GetCaretPos(&pt);
Form1->Top = pos.top pt.y;
Form1->Left = pos.left pt.x;
SetForegroundWindow(Form1->Handle);
sprintf(str1,"top=%d, left=%d",pos.top,pos.left);
sprintf(str2,"x=%d, y=%d",pt.x,pt.y);
Form1->Canvas->TextOutA(10,10,str1);
Form1->Canvas->TextOutA(10,30,str2);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
UnregisterHotKey(hTarg,89);
}
//---------------------------------------------------------------------------
[/code]
附加檔案:4764ba0826724_Q.rar
系統時間:2024-04-24 22:33:13
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!