![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Подскажите как сделать чтоб при загрузке Windows моя программка была запущенна в свёрнутом режиме вычитал что можно в OnCreate главной формы поместить
PostMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 1); но ка кто криво всё работает после развёртывания форма перестаёт быть во весь экран [IMG] ![]() Последний раз редактировалось Gudzik11, 09.10.2011 в 10:14. |
#2
|
||||
|
||||
![]() Какая Delphi? вариант еще:
Код:
PostMessage(Application.Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0); Код:
PostMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0); Пишу программы за еду. __________________ |
#3
|
|||
|
|||
![]() |
#4
|
||||
|
||||
![]() При разворачивании восстанавливай свойства формы, отвечающие за "полноэкранность".
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#5
|
|||
|
|||
![]() для полноэкранности использовал WindowState=wsMaximized сворачиваю в трэй
PostMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 1); востонавливаю окно PostMessage(Handle, WM_User + 1, 1, WM_LBUTTONUP); пробовал восстанавливать свойства формы так WindowState:=wsMaximized но результат не изменился как быть? Последний раз редактировалось Gudzik11, 09.10.2011 в 18:29. |
#6
|
||||
|
||||
![]() А что за WM_USER + 1, как ты его обрабатываешь? И вообще, если бы мы видели весь исходник, дебаг был бы проще.
Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#7
|
|||
|
|||
![]() вот исходник
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus,ShellAPI, StdCtrls, ExtCtrls, Registry; type TForm1 = class(TForm) pmTreyMenu: TPopupMenu; N1: TMenuItem; N2: TMenuItem; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Timer1: TTimer; Timer2: TTimer; N3: TMenuItem; N4: TMenuItem; {Трей} Procedure ControlWindow(Var Msg:TMessage); message WM_SYSCOMMAND; Procedure IconMouse(var Msg:TMessage); message WM_USER+1; Procedure Ic(n:Integer;Icon:TIcon); Procedure OnMinimizeProc(Sender:TObject); procedure N1Click(Sender: TObject); procedure N2Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Timer2Timer(Sender: TObject); procedure N4Click(Sender: TObject); procedure N3Click(Sender: TObject); private { Private declarations } id1, id2, id3, id4: Integer; procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY; function AddNull(InpTime: String): String; function MyExitWindows(RebootParam: Longword): Boolean; public { Public declarations } end; var Form1: TForm1; x: Word; Chas: TTime; sec: TTime; implementation uses Unit2, Unit3; {$R *.dfm} function IsAutorun: Boolean; var reg: TRegistry; begin Result := false; reg := TRegistry.Create; reg.RootKey := HKEY_LOCAL_MACHINE; If Reg.OpenKey('\Software\Microsoft\Windows\CurrentVersion\Run', false) then begin If reg.ValueExists('Proga') then Result := LowerCase(reg.ReadString('Proga')) = LowerCase(ParamStr(0)); reg.CloseKey; end; reg.Free; end; {======================================} {Методы для добавления программы в трей} {======================================} procedure TForm1.IconMouse(var Msg:TMessage); Var p:tpoint; begin GetCursorPos(p); // Запоминаем координаты курсора мыши Case Msg.LParam OF // Проверяем какая кнопка была нажата WM_LBUTTONUP,WM_LBUTTONDBLCLK: {Действия, выполняемый по одинарному или двойному щелчку левой кнопки мыши на значке. В нашем случае это просто активация приложения} Begin Ic(2,Application.Icon); // Удаляем значок из трея ShowWindow(Application.Handle,SW_SHOW); // Восстанавливаем кнопку программы ShowWindow(Handle,SW_SHOW); // Восстанавливаем окно программы Update; End; WM_RBUTTONUP: {Действия, выполняемый по одинарному щелчку правой кнопки мыши} Begin SetForegroundWindow(Handle); // Восстанавливаем программу в качестве переднего окна pmTreyMenu.Popup(p.X,p.Y); // Заставляем всплыть наше PopMenu PostMessage(Handle,WM_NULL,0,0); end; End; end; Procedure TForm1.OnMinimizeProc(Sender:TObject); Begin PostMessage(Handle,WM_SYSCOMMAND,SC_MINIMIZE,0); End; Procedure TForm1.ControlWindow(Var Msg:TMessage); Begin IF Msg.WParam=SC_MINIMIZE then Begin Ic(1,Application.Icon); // Добавляем значок в трей ShowWindow(Handle,SW_HIDE); // Скрываем программу ShowWindow(Application.Handle,SW_HIDE); // Скрываем кнопку с TaskBar'а End else inherited; End; Procedure TForm1.Ic(n:Integer;Icon:TIcon); Var Nim:TNotifyIconData; begin With Nim do Begin cbSize:=SizeOf(Nim); Wnd:=Self.Handle; uID:=1; uFlags:=NIF_ICON or NIF_MESSAGE or NIF_TIP; hicon:=Icon.Handle; uCallbackMessage:=wm_user+1; szTip :='PC Off'; End; Case n OF 1: Shell_NotifyIcon(Nim_Add,@Nim); 2: Shell_NotifyIcon(Nim_Delete,@Nim); 3: Shell_NotifyIcon(Nim_Modify,@Nim); End; end; procedure TForm1.N1Click(Sender: TObject); begin ShowMessage('Автор : Gudzik'); end; procedure TForm1.N2Click(Sender: TObject); begin Ic(2,Application.Icon); Close; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Label1.Caption:=FormatDateTime('hh:nn:ss', Time); //Время end; procedure TForm1.FormCreate(Sender: TObject); const MOD_ALT = 1; MOD_CONTROL = 2; MOD_SHIFT = 4; MOD_WIN = 8; VK_F10 = 121; VK_F11 = 122; VK_F12 = 123; Var x:Word; begin PostMessage(Application.Handle, WM_SYSCOMMAND, SC_MINIMIZE, 0); chas := StrToTime('00:00:00'); sec:= StrToTime('0:0:1'); // Register Hotkey Ctrl + Alt + F10 id1 := GlobalAddAtom('Hotkey1'); RegisterHotKey(Handle, id1, MOD_CONTROL + MOD_Alt, VK_F10); // Register Hotkey Ctrl + Alt + F11 id2 := GlobalAddAtom('Hotkey2'); RegisterHotKey(Handle, id2, MOD_CONTROL + MOD_Alt, VK_F11); // Register Hotkey Win + F4 id3 := GlobalAddAtom('Hotkey3'); RegisterHotKey(Handle, id3, MOD_CONTROL + MOD_Alt, VK_F12); // Globally trap the Windows system key "PrintScreen" id4 := GlobalAddAtom('Hotkey4'); RegisterHotKey(Handle, id4, 0, VK_SNAPSHOT); Label2.Caption:=DateTostr(Date); x:= DayOfWeek(Date); Case x of 1: Label7.Caption:='воскресенье'; 2: Label7.Caption:='понедельник'; 3: Label7.Caption:='вторник'; 4: Label7.Caption:='среда'; 5: Label7.Caption:='четверг'; 6: Label7.Caption:='пятница'; 7: Label7.Caption:='суббота'; end; end; procedure TForm1.WMHotKey(var Msg: TWMHotKey); begin If Msg.HotKey = id1 then //CTRL+ALT+F10 begin If IsWindowVisible(Self.Handle) then begin PostMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 1); Form3.Close; end else begin PostMessage(Handle, WM_User + 1, 1, WM_LBUTTONUP); Form3.Close; end end else if Msg.HotKey = id2 then // CTRL+ALT+F11 begin Timer2.Enabled:=True ; PostMessage(Handle, WM_User + 1, 1, WM_LBUTTONUP); chas:=Chas+StrToTime('00:00:35'); Form3.Close; end else if Msg.HotKey = id3 then // CTRL+ALT+F12 begin chas := StrToTime('00:00:00'); Timer2.Enabled:=False ; Label3.Caption:=AddNull(TimeToStr(Chas)); Form3.Close; end end; // else if Msg.HotKey = id4 then // ShowMessage('Print Screen pressed !'); //end; procedure TForm1.Timer2Timer(Sender: TObject); begin chas:=Chas-sec; Label3.Caption:=AddNull(TimeToStr(Chas)); if TimeToStr(Chas)='0:00:00' then begin Timer2.Enabled:=False ; MyExitWindows(EWX_POWEROFF or EWX_FORCE); {ShowMessage('таймер остоновлен !');} end else if TimeToStr(Chas)='0:00:30' then begin Form3.Label2.Caption:=AddNull(TimeToStr(Chas)); if (not Assigned(Form3)) then // проверка существования Формы (если нет, то Form3:=TForm3.Create(Self); // создание Формы) Form3.Show; // (или Form2.ShowModal) показ Формы ; end; end; function TForm1.AddNull(InpTime: String): String; var S: String; begin S := InpTime; if Pos(':', S) - 2 <> 0 then Result := S else begin Insert('0', S, 1); Result := S end; end; function TForm1.MyExitWindows(RebootParam: Longword): Boolean; var TTokenHd: THandle; TTokenPvg: TTokenPrivileges; cbtpPrevious: DWORD; rTTokenPvg: TTokenPrivileges; pcbtpPreviousRequired: DWORD; tpResult: Boolean; const SE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; begin if Win32Platform = VER_PLATFORM_WIN32_NT then begin tpResult := OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TTokenHd); if tpResult then begin tpResult := LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, TTokenPvg.Privileges[0].Luid); TTokenPvg.PrivilegeCount := 1; TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; cbtpPrevious := SizeOf(rTTokenPvg); pcbtpPreviousRequired := 0; if tpResult then Windows.AdjustTokenPrivileges(TTokenHd, False, TTokenPvg, cbtpPrevious, rTTokenPvg, pcbtpPreviousRequired); end; end; Result := ExitWindowsEx(RebootParam, 0); end; procedure TForm1.N4Click(Sender: TObject); begin ShowMessage('Покозать\скрыть программу CTRL+ALT+F10'+ #13#10 +'Добавить 10мин к таймеру CTRL+ALT+F11'+ #13#10 +'сбросить время таймера CTRL+ALT+F12'); end; procedure TForm1.N3Click(Sender: TObject); begin if (not Assigned(Form2)) then // проверка существования Формы (если нет, то Form2:=TForm2.Create(Self); // создание Формы) Form2.Show; // (или Form2.ShowModal) показ Формы end; end. мне почему то кажется что с добавлением программы в авто загрузку я чёт не так сделал Последний раз редактировалось Gudzik11, 09.10.2011 в 18:56. |
#8
|
||||
|
||||
![]() пойграй с этой "заготовкой". программа запускается скрытой, добавляет свою иконку в трей и себя в автозапуск (HKEY_CURRENT_USER\Software\Microsoft\Windows\Curr entVersion\Run). при клике левой мышкой восстанавливается, при нажатии кнопки свернуть снова прячется.
http://data.cod.ru/128139 Пишу программы за еду. __________________ |
#9
|
|||
|
|||
![]() Цитата:
не понял чё в этой программе не так как в моей в реестр добавляться также вроде сворачиваться тоже вот моя заготовка может кто глянет в чём дело Только проблема в том что она начинает работать не правильно только после перезагрузке Windows если с ярлыка то всё окhttp: |
#10
|
||||
|
||||
![]() Говорят, косноязычность плохо, но косноязычность в письменном виде - кошмар. Перечитывал несколько раз, но так и не смог понять смысл написанного.
![]() Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#11
|
|||
|
|||
![]() Мне нужно,чтоб моя программка сворачивалась в трэй при запуске.
Я сделал это таким образом : в OnCreate поместил PostMessage(Handle, WM_SYSCOMMAND, SC_MINIMIZE, 1); и добавил программу в авто загрузку. Всё получилось ,программа сворачивается. При нажатие на кнопку CTRL+ALT+F10 программа должна разворачиваться на весь экран,как на втором скрине,но при перезагрузке Windows программа перестает быть во весь экран,хотя если программу запустить с ярлыка на рабочем столе всё прекрасно работает! Код моей программы и исходник выше,если не трудно,помогите решить эту проблему!!! |
#12
|
|||
|
|||
![]() Я делаю подругому.
В OnCreate восстанавливаю и в OnDestroy сохраняю размеры и состояние окна (WindowState). А минимизация призапуске обеспечивается через добавление Application.ShowMainForm := False в файле прокта. |
#13
|
||||
|
||||
![]() Смотрим код:
Код:
procedure TForm1.IconMouse(var Msg:TMessage); Var p:tpoint; begin GetCursorPos(p); // Запоминаем координаты курсора мыши Case Msg.LParam OF // Проверяем какая кнопка была нажата WM_LBUTTONUP,WM_LBUTTONDBLCLK: {Действия, выполняемый по одинарному или двойному щелчку левой кнопки мыши на значке. В нашем случае это просто активация приложения} Begin Ic(2,Application.Icon); // Удаляем значок из трея ShowWindow(Application.Handle,SW_SHOW); // Восстанавливаем кнопку программы ShowWindow(Handle,SW_SHOW); // Восстанавливаем окно программы Update; End; WM_RBUTTONUP: {Действия, выполняемый по одинарному щелчку правой кнопки мыши} Begin SetForegroundWindow(Handle); // Восстанавливаем программу в качестве переднего окна pmTreyMenu.Popup(p.X,p.Y); // Заставляем всплыть наше PopMenu PostMessage(Handle,WM_NULL,0,0); end; End; end; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#14
|
|||
|
|||
![]() Цитата:
Спасибо всё заработало |