![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте.
Решил написать программу, для прослушивания музыки с "ВКонтакте". Почитал и понял, что там всё сложновато для меня) Делать всё через API VK... Делал для того, что бы музыка играла на фоне, когда играю в игры. Пользуюсь браузером Firefox, если включить его, он жрет оперативу "~250.000"кб.. В общем многовато для меня. Я сделал так, кинул на форму twebbrowser, сделал маленькое окошко, при включении открывается мобильная версия Вконтакте(не вк, потому что в мобильной версии там всё компактно, красиво )Добавил функцию трея.. В общем жрет она по сравнению в firefix`ом очень мало, "40.000"кб. Решил еще добавить такую штуку, что бы нельзя было запустить вторую копию программы. Когда запускаю копию, появляется окошко, мол типа запущена уже программа... Хотелось бы еще добавить активацию этой программы. То-есть программа например запущена, я запускаю еще раз ее, появляется окошко"программа уже запущена", жму ок и после этого окно программы вылазиет из трея по вер всех окон. Подскажите как можно сделать. Если вдруг надо, вот как делал запрет на вторую копию: Код:
program Project1;
uses
Forms,
Windows,
Unit1 in 'Unit1.pas' {Form1};
{$R *.res}
begin
CreateFileMapping(HWND($FFFFFFFF), nil, PAGE_READWRITE, 0, 1024,
'Programm Name');
if GetLastError <> ERROR_ALREADY_EXISTS then
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end
else
begin
Application.MessageBox('Программа уже запущена'+#13#10+'запуск второй копии невозможен', 'Внимание');
halt;
end;
end. |
|
#2
|
||||
|
||||
|
Цитата:
|
|
#3
|
||||
|
||||
|
Штатный способ для подобных задач -- функция RegisterWindowMessage.
|
|
#4
|
|||
|
|||
|
Цитата:
Это для передачи сообщения первой копии. Вот мой код: Файл проекта. Код:
...
function AllowSetForegroundWindow(dwProcessId: DWORD): BOOL; stdcall; external 'user32.dll';
function IsSecondInstance : Boolean;
var
hMutex : THandle;
begin
Result := False;
WndMessage := RegisterWindowMessage(PChar(GetMessageName));
hMutex := CreateMutex(Nil, True, PChar(GetMutexName));
If hMutex<>0 Then
If GetLastError=ERROR_ALREADY_EXISTS Then
Begin
AllowSetForegroundWindow(DWORD(-1));
PostMessage(HWND_BROADCAST,WndMessage,0,0);
Result := True;
End;
end;
begin
If IsSecondInstance Then Halt(0);
Application.Initialize;
Application.Title := 'Window Switcher';
Application.CreateForm(TMainForm, MainForm);
Application.HookMainWindow(MainForm.HookMessageProc);
Application.Run;
end.MainForm.HookMessageProc: Код:
...
var
MainForm: TMainForm;
WndMessage : Cardinal;
implementation
function TMainForm.HookMessageProc(var Message: TMessage): Boolean;
begin
Result := False;
If Message.Msg = WndMessage Then
Begin
ActivateMainForm;
Result := True;
End;
end; |