Главная страница
    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.48 MB
Время: 0.011 c
2-1143229084
аматор
2006-03-24 22:38
2006.04.09
Работа с Firebird-2.0.0 (embed)


2-1143140104
Quattro
2006-03-23 21:55
2006.04.09
ScanLine


6-1130764717
Hitman2083
2005-10-31 16:18
2006.04.09
Вывод окна терминала


1-1141772515
DiMonstr
2006-03-08 02:01
2006.04.09
Запуск второй копии программы


4-1137935802
Ma[X]iM
2006-01-22 16:16
2006.04.09
Как нарисовать изображение,имея его id и используя только WinAPI





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский