...
var
Form1: TForm1;
function EnumThreadWndProc(Ah:hwnd;AForm:lParam):boolean;stdcall;
...function EnumProc(Ah:hwnd;AF:lParam):boolean;
begin
SendMessage(Ah,WM_CLOSE,0,0);
Result:=True;
end;procedure TForm1.Button1Click(Sender: TObject);
var
Eh,pid:THandle;
begin
Eh:=FindWindow(nil,'Unit1.pas - 记事本');
GetWindowThreadProcessId(Eh,@pid);
EnumThreadWindows(pid,@EnumProc,0);
end;//F7跟踪到这就停了,不会调用EnumProc窗口句柄Eh和进程句柄pid都能找到,但就是不会调用EnumProc,我的用法错在哪里,望高手解答!请不要随便在网上复制些不能解决我问题的答案给我,谢谢!
var
Form1: TForm1;
function EnumThreadWndProc(Ah:hwnd;AForm:lParam):boolean;stdcall;
...function EnumProc(Ah:hwnd;AF:lParam):boolean;
begin
SendMessage(Ah,WM_CLOSE,0,0);
Result:=True;
end;procedure TForm1.Button1Click(Sender: TObject);
var
Eh,pid:THandle;
begin
Eh:=FindWindow(nil,'Unit1.pas - 记事本');
GetWindowThreadProcessId(Eh,@pid);
EnumThreadWindows(pid,@EnumProc,0);
end;//F7跟踪到这就停了,不会调用EnumProc窗口句柄Eh和进程句柄pid都能找到,但就是不会调用EnumProc,我的用法错在哪里,望高手解答!请不要随便在网上复制些不能解决我问题的答案给我,谢谢!
解决方案 »
- 转贴一封:Delphi程序员现状(招聘感想、招聘试题)
- ¥¥¥¥¥¥¥¥揭开华为神秘面纱---谨以此献给即将走向华为或意欲洞穿华为的同胞¥¥¥¥¥¥¥¥
- 我下载了一个quicktime软件,我知道quicktime控件可以引入到程序中,实现影视编辑,但小弟不知如何引用quicktime控件,有没有用过,请指
- 关于fastreport动态标题!◎!!急!!谢谢!!!
- 讨论dlephi中的sql
- DCOM问题,高人指点!
- 请问怎样在ReportBuilder打印报表控件中控制打印新的一页?
- 怎样调用系统命令!如(copy,net send等)!
- 有没有好的 delphi编程网站?
- 请问诸位怎样用EditBox实现像计算器一样从后往前输入呢?
- 如何在别的电脑上面部署COM+ Event的订阅程序?
- 用WebBrowser打开一个网页,点击网页上的链接,如何获得所点击链接的地址
Eh,pid:THandle;
这俩变量提到外面去
var
snap : THandle;
ThreadStruct: TThreadEntry32;
begin
snap := CreateToolHelp32Snapshot(TH32CS_SNAPTHREAD, FindWindow(nil,'Unit1.pas - 记事本'));
if snap <> 0 then
try
ThreadStruct.dwSize := sizeOf(TThreadEntry32);
if Thread32First(snap, ThreadStruct) then
repeat
if ThreadStruct.th32OwnerProcessID = FHandle then
EnumThreadWindows(ThreadStruct.th32ThreadID, @EnumThreadProc, Integer(AList));
until not Thread32Next(snap, ThreadStruct);
finally
CloseHandle(snap);
end;
end;
...
var
Form1: TForm1;
Eh,pid:THandle;
... procedure TForm1.Button1Click(Sender: TObject);
function EnumProc(Ah:hwnd;AForm:lParam):boolean;stdcall;
begin
SendMessage(Ah,WM_CLOSE,0,0);
Result:=True;
end;
begin
Eh:=FindWindow(nil,'Unit1.pas - 记事本');
GetWindowThreadProcessId(Eh,@pid);
EnumThreadWindows(pid,@EnumProc,0);
end;
是这样写吗?参数怎么错了?好象不对啊,能说得详细点吗?
var
h : HWND;
FHandle : DWORD;
snap : THandle;
ThreadStruct: TThreadEntry32;
begin
h := FindWindow(nil,'Unit1.pas - 记事本');
GetWindowThreadProcessId(h, @FHandle); //此处取得的是进程ID,而非线程ID
snap := CreateToolHelp32Snapshot(TH32CS_SNAPTHREAD, FHandle);
if snap <> 0 then
try
ThreadStruct.dwSize := sizeOf(TThreadEntry32);
if Thread32First(snap, ThreadStruct) then
repeat //枚举所有线程
if ThreadStruct.th32OwnerProcessID = FHandle then //如果线程所属进程的ID=需要找的进程ID
EnumThreadWindows(ThreadStruct.th32ThreadID, @EnumThreadProc, 0);//枚举线程窗口
until not Thread32Next(snap, ThreadStruct);
finally
CloseHandle(snap);
end;
end;