取得任一时刻的活动窗体的标题?有高人会吗??分少了还可给 ( 积分: 60 )

  • 主题发起人 主题发起人 student.dai
  • 开始时间 开始时间
S

student.dai

Unregistered / Unconfirmed
GUEST, unregistred user!
我用的是GetActiveWindow与GetWindowText来取得活动窗口与标题,也写成了DLL,但是它就是只能取得自己的窗口标题,而不能取得其它活动窗口的标题,例如我现在用写字板或是打开网页等,这些都取不到,急,请高手帮忙呀!!
 
我用的是GetActiveWindow与GetWindowText来取得活动窗口与标题,也写成了DLL,但是它就是只能取得自己的窗口标题,而不能取得其它活动窗口的标题,例如我现在用写字板或是打开网页等,这些都取不到,急,请高手帮忙呀!!
 
用GetForegroundWindow来试试
 
一样的结果
 
你的程序不会在做这些动作前把自己ACTIVE了吧?<br>为何要用DLL呢?<br>我便用这一句便取到了<br>GetWindowText(GetForegroundWindow(), @pcaption[1], 128);
 
我试一下,多谢了
 
to someset<br> &nbsp; &nbsp; &nbsp;还是有问题,当我的程序用Application.ShowMainForm := False;隐藏起来时,程序就取不到窗口标题了, 我是把窗口标题定时写入文件的
 
用个timer,随时写文件,然后把自己程序最小化,应该就可以了
 
我是用了个timer定时写文件,但是当自己的程序窗口隐藏时,它就好像取不到窗口标题一样了,我的是要做成一个后台程序
 
真的吗你说的我试试先
 
你的意思是,只要窗口一隐藏timer的事件就不执行了吗?这可需要好好研究一下了,要是作个后台程序吗》?那就写到线程里好了
 
如果用Timer的话,天知道用户会多长时间切换一次窗体呢。如果在两次Timer之间切换窗体的话,就获取不到了。如果用户长时间不切换窗体,又会多次取相同的标题。<br>楼主如果要求的是只要有窗体被切换到前台,则获取窗体的标题,并记录的话。建议用全局的Hook做。
 
没有啊,我的一切正常,HIDE后也一样<br>另外注意调用参数用array of char,而不用string[]
 
我用的两句代码<br> &nbsp; &nbsp;GetWindowText(GetForegroundWindow(), @cap[1], 128);<br> &nbsp; &nbsp;ShowMessage(string(cap));<br>间隔5秒<br>切换到任何地方均可弹出工作窗口标题。
 
someset,hys_peter,不好意思,浪费你们时间了,是我犯了个错,能写,不过这样好像取不到一些应用程序的Hint信息,再就是会取到重复的标题。
 
hook?挂WH_CBT(是一个基于计算机钩子调用,发生在激活、创建、关闭、最小化、最大化、移动或改变一个窗口的大小之前,在完成一个系统命令、清除一个鼠标或者键盘事件、设置焦点,以及在同步系统消息队列之前)类型?
 
是,只要截取HCBT_ACTIVATE就行,
 
HOOK 用SHELL HOOK就可以啊,能在任务栏有变动时拦截
 
to someset:<br>前辈,发个例子看看吧,shell hook早就久仰了,可是没有实用过,msdn上也没个delphi例子,是不是和普通钩子一样呢?有什么区别吗?
 
刚开始我就是用的Dll,但是好像只能取要自己窗口的,下面是我的DLL,麻烦你们帮我看一下,是哪里的问题<br><br> Tcallbackfun=procedure(info:pchar);<br><br> TWinTitlehook=record<br> &nbsp; isrun:boolean;<br> &nbsp; hook:hhook;<br> &nbsp; callbackfun:Tcallbackfun;<br> end;<br><br>var<br>myWinTitlehook:TWinTitlehook;<br><br>{$R *.res}<br>function gethookinfo(code:integer;wp:WPARAM;lp:LPARAM):LResult;stdcall;<br>var<br> &nbsp;FileName, Info:string;<br> &nbsp;Buffer: array[0..128] of char;<br> &nbsp;F: TextFile;<br>begin<br> &nbsp;if code&lt;0 then<br> &nbsp;begin<br> &nbsp; &nbsp;result:= CallNextHookEx(myWinTitlehook.hook,code,wp,lp);<br> &nbsp; &nbsp;exit;<br> &nbsp;end;<br> &nbsp;info:='';<br> &nbsp;FillChar(Buffer, sizeof(Buffer), #0);<br> &nbsp;if GetWindowText(GetForegroundWindow(),Buffer, 255)&gt;0 then<br> &nbsp;begin<br> &nbsp; &nbsp;try<br> &nbsp; &nbsp; &nbsp;FileName := 'E:/Filelog.txt';<br> &nbsp; &nbsp; &nbsp;AssignFile(F, FileName);<br> &nbsp; &nbsp; &nbsp;if FileExists(FileName) then<br> &nbsp; &nbsp; &nbsp; &nbsp;Append(F)<br> &nbsp; &nbsp; &nbsp;else<br> &nbsp; &nbsp; &nbsp; &nbsp;Rewrite(F);<br> &nbsp; &nbsp; &nbsp;Writeln(F,Buffer);<br> &nbsp; &nbsp; &nbsp;Info := StrPas(Buffer);<br> &nbsp; &nbsp;finally<br> &nbsp; &nbsp; &nbsp;CloseFile(F);<br> &nbsp; &nbsp;end;<br> &nbsp;end;<br> &nbsp;info := Info + 'Size' + IntToStr(SizeOf(info)); &nbsp;<br> &nbsp;myWinTitlehook.callbackfun(pchar(info));<br> &nbsp;result:= CallNextHookEx(myWinTitlehook.hook,code,wp,lp);<br>end;<br><br>procedure installmousehook(callbackF:Tcallbackfun); &nbsp;stdcall;<br>begin<br> &nbsp;if not myWinTitlehook.isrun then<br> &nbsp;begin<br> &nbsp; &nbsp;myWinTitlehook.hook:=setwindowshookex(WH_CBT,@gethookinfo,HInstance,0);<br> &nbsp; &nbsp;myWinTitlehook.callbackfun :=callbackf;<br> &nbsp; &nbsp;myWinTitlehook.isrun:=not myWinTitlehook.isrun;<br> &nbsp;end;<br>end;<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br>procedure uninstallmousehook(); stdcall;<br>begin<br> &nbsp;if myWinTitlehook.isrun then<br> &nbsp;begin<br> &nbsp; &nbsp;UnHookWindowsHookEx(myWinTitlehook.hook);<br> &nbsp; &nbsp;myWinTitlehook.callbackfun :=nil;<br> &nbsp; &nbsp;myWinTitlehook.isrun:=not myWinTitlehook.isrun;<br> &nbsp;end;<br>end;
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
I
回复
0
查看
608
import
I
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部