RussianDelphiProgrammingAlliance

Главная | О проекте | Новости | Статьи | Проекты | Исходники | Файлы | ЧаВо | Ссылки

FAQ - ЧаВо
Работа с Windows

Посылка сообщений чужим программам Получить файл
Сменить рисунок на рабочем столе Получить файл
Поместить иконку в Try область Получить файл
Открытие файла по расширению Получить файл
Перезагрузить компьютер Получить файл
OLE котейнер Получить файл


Посылка сообщений чужим программам

В этом примере посылается сообщение кнопке ПУСК.
Не забудьте поставить Messages в раздел USES

procedure TForm1.BitBtn1Click(Sender: TObject);
Var Tray, Child : hWnd;
C : Array[0..127] of Char;
S : String;
Begin
Tray := FindWindow('Shell_TrayWnd', NIL);//находим материнское окно
Child := GetWindow(Tray,GW_CHILD);
GetClassName(Child, C, SizeOf(C));// Извлекаем название дочернего элемента
s:=Strpas(c);
IF s<>'Button' then begin // Если название элемента не подходит
Child := GetWindow(Child, GW_HWNDNEXT); //Смотрим следующий эл-т
GetClassName(Child, C, SizeOf(C));
s:=Strpas(c);
end;
SendMessage(Child,WM_LBUTTONDOWN,0,0) ; //собственно посылаем сооющение
end;

К оглавлению

Сменить рисунок на рабочем столе
SystemParametersInfo(SPI_SETDESKWALLPAPER ,0,PChar('путь к файлу')
,SPIF_UPDATEINIFILE + SPIF_SENDWININICHANGE);

К оглавлению

Поместить иконку в Try область

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

const
WM_MYICONNOTIFY = WM_USER + 123;
type
TForm1 = class(TForm)
PopupMenu1: TPopupMenu;
RestoreItem: TMenuItem;
N1: TMenuItem;
FileExitItem1: TMenuItem;
HideItem: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure RestoreItemClick(Sender: TObject);
procedure HideItemClick(Sender: TObject);
procedure FileExitItem1Click(Sender: TObject);
private
{ Private declarations }
ShownOnce: Boolean;
public
{ Public declarations }
procedure WMICON(var msg: TMessage); message WM_MYICONNOTIFY;
procedure WMSYSCOMMAND(var msg: TMessage);message WM_SYSCOMMAND;
procedure RestoreMainForm;
procedure HideMainForm;
procedure CreateTrayIcon(n:Integer);
procedure DeleteTrayIcon(n:Integer);
end;

var
Form1: TForm1;

implementation

{$R *.DFM}
uses ShellApi, shlobj, registry;
procedure TForm1.WMICON(var msg: TMessage);
var P : TPoint;
begin
case msg.LParam of // обработка обратных сообщений
WM_LBUTTONUP:
begin
GetCursorPos(p);
SetForegroundWindow(Application.MainForm.Handle);
PopupMenu1.Popup(P.X, P.Y);
end;
WM_LBUTTONDBLCLK : RestoreItemClick(Self);
end;
end;

procedure TForm1.WMSYSCOMMAND(var msg: TMessage);
begin
inherited;
if (Msg.wParam=SC_MINIMIZE) then HideItemClick(Self); //обработка минимизирвания окна
end;

procedure TForm1.HideMainForm;
begin
Application.ShowMainForm := False;
ShowWindow(Application.Handle, SW_HIDE);
ShowWindow(Application.MainForm.Handle, SW_HIDE);
end;

procedure TForm1.RestoreMainForm;
var i,j : Integer;
begin //Эта процедура отрисовывает обратно форму
       // В принцепе можно обойтись и тривиальным Form.Visible:=True
Application.ShowMainForm := True;
ShowWindow(Application.Handle, SW_RESTORE);
ShowWindow(Application.MainForm.Handle, SW_RESTORE);
if not ShownOnce then
begin
for I := 0 to Application.MainForm.ComponentCount -1 do
if Application.MainForm.Components[I] is TWinControl then
with Application.MainForm.Components[I] as TWinControl do
if Visible then
begin
ShowWindow(Handle, SW_SHOWDEFAULT);
for J := 0 to ComponentCount -1 do
if Components[J] is TWinControl then
ShowWindow((Components[J] as TWinControl).Handle, SW_SHOWDEFAULT);
end;
ShownOnce := True;
end;

end;

procedure TForm1.CreateTrayIcon(n:Integer);
var nidata : TNotifyIconData;
begin
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle; //HWND вашего окна (окна принимающего обратные сообщения)
uID := 1; // номер значка
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_MYICONNOTIFY; //обратное сообщение
hIcon := Application.Icon.Handle; // то откуда сдергивается значок это может быть и ImageList и т.д.
StrPCopy(szTip,Application.Title); // всплывающая строка
end;
Shell_NotifyIcon(NIM_ADD, @nidata); // добавление значка
end;

procedure TForm1.DeleteTrayIcon(n:Integer);
var nidata : TNotifyIconData;
begin
with nidata do
begin
cbSize := SizeOf(TNotifyIconData);
Wnd := Self.Handle;
uID := 1;
end;
Shell_NotifyIcon(NIM_DELETE, @nidata); // удаление значка
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ShownOnce:= False;
CreateTrayIcon(1);
HideItem.Enabled := False;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
DeleteTrayIcon(1);
end;

procedure TForm1.RestoreItemClick(Sender: TObject);
begin
RestoreMainForm;
//DeleteTrayIcon(1); //если убрать ремарку то при показывании основного окна значок исчезает
RestoreItem.Enabled := False;
HideItem.Enabled := True;
end;

procedure TForm1.HideItemClick(Sender: TObject);
begin
HideMainForm;
CreateTrayIcon(1);
HideItem.Enabled := False;
RestoreItem.Enabled := True;
end;

procedure TForm1.FileExitItem1Click(Sender: TObject);
begin
Close;
end;

end.
{Также есть еще такая фигня Shell_NotifyIcon(NIM_Modify, @nidata) позволяет
менять уже установленный значок, не прибегая к его убиванию и построению заново
Есть более короткий путь всех этих штук, но он не очень корректный, и хреновато
работает под Win98, но проще в понимании, если надо пиште скину}

К оглавлению

Открытие файла по расширению
В строку Uses вставьте ShellApi
ShellExecute(0, Nil,PChar( путь к файлу ), Nil, Nil, SW_NORMAL);

К оглавлению

Перегрузить компьютер

procedure TForm1.Button1Click(Sender: TObject);
begin
exitWindowsEx(EWX_SHUTDOWN,0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
exitWindowsEx(EWX_REBOOT,0);

end;

К оглавлению

OLE контейнер
Это слишком длинный пример поэтому просто скачайте файл и разберитесь с ним спокойно

К оглавлению


Обязанности по поддержанию порядка и обновления этой страницы лежат на Diamond Cat.

Последнее обновление - 15 октября 1999

Чужая реклама:

InterReklama Advertising Network