![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помоги с Handle [D6, Win95/98, Win2k, WinXP]
kentavr © (2004-02-07 16:23:00)Проблема такая :
есть .ехе какогото запущенного процесса и место откуда он был запущен.
Вопрос :
как определить Handle и работать с ним(свернуть, развернуть).
заранее спасибо.
gavrila (2004-02-07 19:52:00) [1]sorry:
unit UWinList;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, Menus;
type
TForm1 = class(TForm)
Button1: TButton;
StringGrid1: TStringGrid;
PMDoingList: TPopupMenu;
PMWin: TMenuItem;
PMEnable: TMenuItem;
PMDisable: TMenuItem;
PMSubEnabled: TMenuItem;
PMSubVisibling: TMenuItem;
PMVisible: TMenuItem;
PMUnVisible: TMenuItem;
GetControl: TMenuItem;
procedure Button1Click(Sender: TObject);
procedure StringGrid1DblClick(Sender: TObject);
procedure PMDoingListPopup(Sender: TObject);
procedure PMEnableClick(Sender: TObject);
procedure PMDisableClick(Sender: TObject);
procedure PMVisibleClick(Sender: TObject);
procedure PMUnVisibleClick(Sender: TObject);
procedure GetControlClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
NWindow: HWND;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
Var
NWindow: HWND;
WinText: array[0..256] of Char;
I:Integer;
begin
For I:= 1 To StringGrid1.RowCount Do
begin
StringGrid1.Cells[0, I]:='';
StringGrid1.Cells[1, I]:='';
end;
StringGrid1.Cells[0, 0] := 'Handle';
StringGrid1.Cells[1, 0] := 'Win text';
I:=0;
NWindow:= Handle;
Repeat
NWindow:= GetNextWindow(NWindow, GW_HWNDNEXT);
GetWindowText(NWindow, WinText, 254);
If WinText<>'' then
begin
Inc(I);
StringGrid1.RowCount := I;
StringGrid1.Cells[0, I]:= IntToStr(NWindow);
StringGrid1.Cells[1, I]:= WinText;
end;
Until (NWindow = 0);
StringGrid1.FixedRows:=1;
end;
procedure TForm1.StringGrid1DblClick(Sender: TObject);
begin
NWindow:= 0;
If StringGrid1.Row = 0 Then
Exit;
Try
If Trim(StringGrid1.Cells[0, StringGrid1.Row]) <> '' Then
Begin
NWindow:= StrToInt(Trim(StringGrid1.Cells[0, StringGrid1.Row]));
PMDoingList.Popup(Mouse.CursorPos.x, Mouse.CursorPos.y);
End;
Except
End;
end;
procedure TForm1.PMDoingListPopup(Sender: TObject);
begin
If Trim(StringGrid1.Cells[0, StringGrid1.Row]) <> '' Then
NWindow:= StrToInt(Trim(StringGrid1.Cells[0, StringGrid1.Row]));
// NWindow:= GetDesktopWindow();
If NWindow= 0 Then
Begin
PMWin.Enabled:= False
End
Else
Begin
PMWin.Enabled:= True;
End;
// получим параметры окна
Try
// Окно / Доступно / Недоступно
PMEnable.Checked := IsWindowEnabled(NWindow);
PMDisable.Checked := Not PMEnable.Checked;
PMVisible.Checked := IsWindowVisible(NWindow);
PMUnVisible.Checked := Not PMVisible.Checked;
//
Except
on E: Exception do
Begin
ShowMessage(E.Message);
ShowMessage(IntToStr(E.HelpContext));
Exit;
End;
End;
end;
procedure TForm1.PMEnableClick(Sender: TObject);
begin
Try
EnableWindow(NWindow, True);
Except
Exit;
End;
PMEnable.Checked := True;
PMDisable.Checked := False;
end;
procedure TForm1.PMDisableClick(Sender: TObject);
begin
Try
EnableWindow(NWindow, False);
Except
Exit;
End;
PMEnable.Checked := False;
PMDisable.Checked := True;
end;
procedure TForm1.PMVisibleClick(Sender: TObject);
begin
Try
ShowWindow(NWindow, SW_SHOW);
Except
Exit;
End;
PMVisible.Checked := True;
PMUnVisible.Checked := False;
ShowWindow(Handle, SW_SHOW);
end;
procedure TForm1.PMUnVisibleClick(Sender: TObject);
begin
Try
ShowWindow(NWindow, SW_HIDE);
Except
Exit;
End;
PMVisible.Checked := False;
PMUnVisible.Checked := True;
end;
procedure TForm1.GetControlClick(Sender: TObject);
{Var
idWin: Variant;
pdwProcessId: LPDWORD;
}begin
// idWin:= GetWindowThreadProcessId(NWindow, pdwProcessId);
// idWin:= GetWindowDC(NWindow);
end;
end.
gavrila (2004-02-07 19:51:00) [2]Пробуй ето :
kentavr (2004-02-07 17:45:00) [3]тьфу тьфу нето я хочу управлять окном этого приложения (если оно есть)
kentavr (2004-02-07 17:43:00) [4]Нет нет я поставил определитель процессов и определённый процесс я хочу или свернуть или развернуть
Digitman (2004-02-07 16:27:00) [5]
> есть .ехе какогото запущенного процесса
строго наоборот : есть процесс (или более чем 1 процесс), стартованный из заданного EXE
> как определить Handle
см. OpenProcess()
> свернуть, развернуть
процесс не может быть ни свернут ни развернут
эти понятия относятся к окнам, которые может создавать процесс ... а может и не создавать...