Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.04.09;
Скачать: CL | DM;

Вниз

Скрыть приложение с панели задач   Найти похожие ветки 

 
Stanislav ©   (2006-01-18 11:15) [0]

Имеется Handle окна, можно ли скрыть с панели задач приложение, которому пренадлежит окно?
Или узнать Handle самого приложения?


 
Игорь Шевченко ©   (2006-01-18 11:53) [1]

У приложения нету Handle


> можно ли скрыть с панели задач приложение, которому пренадлежит
> окно?


Вряд ли


 
Stanislav ©   (2006-01-18 13:07) [2]

А можно ли запретить закрывать (С помощью кнопки закрыть или Alt+F4) окно  зная его Handle ?


 
Stanislav ©   (2006-01-18 13:25) [3]

Спасибо, разобрался!


 
VirEx ©   (2006-01-18 17:30) [4]


>  [1] Игорь Шевченко ©   (18.01.06 11:53)

у VCL есть
изменить стиль (добавить в расширенный стиль WS_EX_TOOLWINDOW)


 
Игорь Шевченко ©   (2006-01-18 17:48) [5]

VirEx ©   (18.01.06 17:30) [4]

Окно после этого пересоздавать не надо ?


 
Rouse_ ©   (2006-01-18 18:42) [6]

А что, ShowWindow(Application.Handle, SW_HIDE); уже не в почете? :)


 
Игорь Шевченко ©   (2006-01-18 18:43) [7]

Rouse_ ©   (18.01.06 18:42) [6]

Окно-то не свое


 
Rouse_ ©   (2006-01-18 18:44) [8]

Хм... не доглядел :)


 
VirEx ©   (2006-01-18 18:52) [9]

getparent()?


 
VirEx ©   (2006-01-18 18:55) [10]

или getwindowlong(findwindow("form1",nil),GWL_HWNDPARENT)
или getwindow(findwindow("form1",nil),GW_OWNER)


 
VirEx ©   (2006-01-18 18:56) [11]

или getwindowlong(findwindow(nil,"form1"),GWL_HWNDPARENT)
или getwindow(findwindow(nil,"form1"),GW_OWNER)


 
Rouse_ ©   (2006-01-18 23:36) [12]

Мдя... хотел зайти с другой стороны... Но так не получилось. На всякий случай держи код экспериментов :)

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls, CommCtrl;

type
 TForm1 = class(TForm)
   lvButtons: TListView;
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 private
   TaskBarHandle: THandle;
 public
   function GetAllTaskBarButtons: Boolean;
   function GetTaskBarButtonText(const Index: Integer): String;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.GetAllTaskBarButtons: Boolean;
var
 TmpHandle: THandle;
 I, ButtonCount: Integer;
begin
 TmpHandle := FindWindow("Shell_TrayWnd", nil);
 if TmpHandle = 0 then RaiseLastOSError;
 TmpHandle := FindWindowEx(TmpHandle, 0, "ReBarWindow32", nil);
 if TmpHandle = 0 then RaiseLastOSError;
 TmpHandle := FindWindowEx(TmpHandle, 0, "MSTaskSwWClass", nil);
 if TmpHandle = 0 then RaiseLastOSError;
 TaskBarHandle := FindWindowEx(TmpHandle, 0, "ToolbarWindow32", nil);
 if TaskBarHandle = 0 then RaiseLastOSError;
 ButtonCount := SendMessage(TaskBarHandle, TB_BUTTONCOUNT, 0, 0);
 for I := 0 to ButtonCount - 1 do
   if SendMessage(TaskBarHandle, TB_ISBUTTONHIDDEN, I, 0) <> 0 then
     lvButtons.Items.Add.Caption := GetTaskBarButtonText(I);
end;

function TForm1.GetTaskBarButtonText(const Index: Integer): String;
var
 TaskBarProcessID, TaskBarProcessHandle: THandle;
 AllocCaption: Pointer;
 BytesRead: Cardinal;
 Size: Integer;
 ButtonCaption: String;
begin
 GetWindowThreadProcessId(TaskBarHandle, TaskBarProcessID);                  
 TaskBarProcessHandle := OpenProcess(PROCESS_VM_OPERATION or
   PROCESS_VM_READ or PROCESS_VM_WRITE, False, TaskBarProcessID);
 if TaskBarProcessHandle = 0 then
   RaiseLastOSError
 else
 try
   AllocCaption := VirtualAllocEx(TaskBarProcessHandle, nil,
     MAXCHAR, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
   if AllocCaption = nil then
     RaiseLastOSError
   else
   try
     Size := SendMessage(TaskBarHandle, TB_GETBUTTONTEXT, Index, Integer(AllocCaption));
     if Size = 0 then RaiseLastOSError;
     if Size < 0 then Exit;
     SetLength(ButtonCaption, Size + 1);
     if not ReadProcessMemory(TaskBarProcessHandle, AllocCaption,
       @ButtonCaption[1], Size, BytesRead) then
       RaiseLastOSError;
     if ButtonCaption = "Windows TaskManager"#0 then
       SendMessage(TaskBarHandle, TB_HIDEBUTTON{TB_DELETEBUTTON}, Index, 0);
     Result := ButtonCaption;
   finally
     VirtualFreeEx(TaskBarProcessHandle, AllocCaption, 0, MEM_RELEASE);
   end;
 finally
   CloseHandle(TaskBarProcessHandle);
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 GetAllTaskBarButtons;
end;

end.


Нужно копаться в самом шеле...


 
Rouse_ ©   (2006-01-18 23:40) [13]

ЗЫ: с TB_ISBUTTONHIDDEN явно погорячился :)



Страницы: 1 вся ветка

Текущий архив: 2006.04.09;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.039 c
2-1143027457
Officeman
2006-03-22 14:37
2006.04.09
Как узнать "name" компонента на форме, наводя на него курсор мыши


2-1143132413
Уч.
2006-03-23 19:46
2006.04.09
type Packed Record и Record в чем разница?


3-1139404580
Megabyte
2006-02-08 16:16
2006.04.09
Статистика в БД


2-1143122160
my_sweet
2006-03-23 16:56
2006.04.09
записать текст из мемо в Stringgrid


6-1135728507
0xBAD
2005-12-28 03:08
2006.04.09
TWebBrowser и буфер обмена