找Handle与Path和Name好像关系不大,有几种函数可以找Handle。HWND FindWindow( LPCTSTR lpClassName, // class name LPCTSTR lpWindowName // window name );BOOL EnumWindows( WNDENUMPROC lpEnumFunc, // callback function LPARAM lParam // application-defined value );
{$R *.dfm} procedure Search(Strings:TStrings); var Snap:THandle; RB:Boolean; PE:TProcessEntry32; begin if Strings=nil then Exit; snap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); if snap = -1 then Exit; try PE.dwSize:=SizeOf(TProcessEntry32); RB:=Process32First(snap,PE); while RB do begin Strings.AddObject(PE.szExeFile,Pointer(PE.th32ProcessID)); PE.dwSize:=SizeOf(TProcessEntry32); RB:=Process32Next(snap,PE); end; finally CloseHandle(snap); end; end; procedure TForm1.BitBtn1Click(Sender: TObject); begin ListBox1.Items.Clear; Search(ListBox1.Items); end;
procedure TForm1.Button1Click(Sender: TObject); var H:THandle; R:Cardinal; begin H:=OpenProcess(PROCESS_TERMINATE,True,LongInt(ListBox1.Items.Objects[ListBox1.ItemIndex])); R:=0; TerminateProcess(H,R); CloseHandle(H); end;
end. 关键的: procedure TForm1.Button1Click(Sender: TObject); var H:THandle; R:Cardinal; begin H:=OpenProcess(PROCESS_TERMINATE,True,LongInt(ListBox1.Items.Objects[ListBox1.ItemIndex])); R:=0; TerminateProcess(H,R); CloseHandle(H); end; 其中ListBox1.Items.Objects[ListBox1.ItemIndex]是在遍历进程时存放的ProcessID
LPCTSTR lpClassName, // class name
LPCTSTR lpWindowName // window name
);BOOL EnumWindows(
WNDENUMPROC lpEnumFunc, // callback function
LPARAM lParam // application-defined value
);
1.这两个函数有什么区别????
2.我想解决两个独立应用程序(都是自己的)之间的通讯和数据传输问题,两位大哥可否给点意见???需要用到内存共享技术码????
两个程序之间的通讯,可以通过以下方法:
1、通过发送消息完成。
2、通过内存共享完成。
3、通过Ole Automation完成。
可以任选一种。
不错啊
我也知道但是不能说的这么好
呵呵
小弟再多问一句:在内存共享方面我应该注意点什么????
繁劳兄台再指点一二!!!!!
不过我知道,Delphi5开发人员指南关于DLL一章中,有内存共享的例子,是通过Memory Map File实现的。你可以参考那本书。
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Tlhelp32, StdCtrls, Buttons, CheckLst;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn;
ListBox1: TListBox;
Button1: TButton;
procedure BitBtn1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
procedure Search(Strings:TStrings);
implementation
{$R *.dfm}
procedure Search(Strings:TStrings);
var
Snap:THandle;
RB:Boolean;
PE:TProcessEntry32;
begin
if Strings=nil then
Exit;
snap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if snap = -1 then Exit;
try
PE.dwSize:=SizeOf(TProcessEntry32);
RB:=Process32First(snap,PE);
while RB do
begin
Strings.AddObject(PE.szExeFile,Pointer(PE.th32ProcessID));
PE.dwSize:=SizeOf(TProcessEntry32);
RB:=Process32Next(snap,PE);
end;
finally
CloseHandle(snap);
end;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
ListBox1.Items.Clear;
Search(ListBox1.Items);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
H:THandle;
R:Cardinal;
begin
H:=OpenProcess(PROCESS_TERMINATE,True,LongInt(ListBox1.Items.Objects[ListBox1.ItemIndex]));
R:=0;
TerminateProcess(H,R);
CloseHandle(H);
end;
end.
关键的:
procedure TForm1.Button1Click(Sender: TObject);
var
H:THandle;
R:Cardinal;
begin
H:=OpenProcess(PROCESS_TERMINATE,True,LongInt(ListBox1.Items.Objects[ListBox1.ItemIndex]));
R:=0;
TerminateProcess(H,R);
CloseHandle(H);
end;
其中ListBox1.Items.Objects[ListBox1.ItemIndex]是在遍历进程时存放的ProcessID
先加分是真的!!!!!
小弟的email:[email protected]
目前公司的lan不支持qq,以后如果我有什么项目可以合作合作吗????
可否给段使用OLE AUTOMATION完成数据交换的代码???借鉴一下????
很简单嘛,用WINDOWS的API函数:
HWND GetWindow( HWND hWnd, // handle of original window
UINT uCmd // relationship flag
);
详细你们可以查看Delphi的API帮助.
我是笨,不过你也聪明不到哪里去。另外一个程序的Window和该程序的Window之间没有固定的关系,如果调用GetWindow?
下次您要是想骂人,先看看自己有什么漏洞,别让别人逮着了。
教教你吧"笨蛋"!!! 函数功能:该函数返回与指定窗口有特定关系(如Z序或所有者)的窗口句柄。 函数原型:HWND GetWindow(HWND hWnd,UNIT nCmd); 参数: hWnd:窗口句柄。要获得的窗口句柄是依据nCmd参数值相对于这个窗口的句柄。 nCmd:说明指定窗口与要获得句柄的窗口之间的关系。该参数值可以是下列之一: GW_CHILD:如果指定窗口是父窗口,则获得的是在Z序顶端的子窗口的句柄,否则为NULL。函数仅检查指定父窗口的子窗口,不检查继承窗口。 GW_ENABLEDPOUP:(WindowsNT 5.0)返回的句柄标识了属于指定窗口的处于使能状态弹出式窗口(检索使用第一个由GW_HWNDNEXT 查找到的满足前述条件的窗口);如果无使能窗口,则获得的句柄与指定窗口相同。 GW_HWNDFIRST:返回的句柄标识了在Z序最高端的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在Z序最高端的最高端窗口;如果指定窗口是顶层窗口,则该句柄标识了在z序最高端的顶层窗口:如果指定窗口是子窗口,则句柄标识了在Z序最高端的同属窗口。 GW_HWNDLAST:返回的句柄标识了在z序最低端的相同类型的窗口。如果指定窗口是最高端窗口,则该柄标识了在z序最低端的最高端窗口:如果指定窗口是顶层窗口,则该句柄标识了在z序最低端的顶层窗口;如果指定窗口是子窗口,则句柄标识了在Z序最低端的同属窗口。 GW_HWNDNEXT:返回的句柄标识了在Z序中指定窗口下的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在指定窗口下的最高端窗口:如果指定窗口是顶层窗口,则该句柄标识了在指定窗口下的顶层窗口;如果指定窗口是子窗口,则句柄标识了在指定窗口下的同属窗口。 GW HWNDPREV:返回的句柄标识了在Z序中指定窗口上的相同类型的窗口。如果指定窗口是最高端窗口,则该句柄标识了在指定窗口上的最高端窗口;如果指定窗口是顶层窗口,则该句柄标识了在指定窗口上的顶层窗口;如果指定窗口是子窗口,则句柄标识了在指定窗口上的同属窗口。 GW_OWNER:返回的句柄标识了指定窗口的所有者窗口(如果存在)。 返回值:如果函数成功,返回值为窗口句柄;如果与指定窗口有特定关系的窗口不存在,则返回值为NULL。 若想获得更多错误信息,请调用GetLastError函数。 备注:在循环体中调用函数EnumChildWindow比调用GetWindow函数可靠。调用GetWindow函数实现该任务的应用程序可能会陷入死循环或退回一个已被销毁的窗口句柄。 速查:Windows NT:3.1以上版本;Windows:95以上版本;Windows CE:1.0以上版本;头文件:winuser.h;库文件:user32.lib。email已收到,谢谢checky!!!!!!
chechy(chechy)咱不理他!!
最关键的就是procedure Search那段
http://www.csdn.net/Expert/topic/522/522041.shtm