Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Передать commandline


Страницы:   1 2

Gu ©   (2011-09-26 13:51:00) 

Вот есть например Ms.Word. Кликаем в проводнике на какойнибудь документ, он окрывается в окне ворда. Кликаем на другой он открывается в новой вкладке этого же окна. Т.е. приложение не закрывается и не новое окно открывается. Или например WMPlayer (или Windows Media player Classic - там опция есть "один проигрыватель для каждого файла") - запускаем какой нибудь avi, открывается Wmp, запускаем другой - новое воспроизведение в этом же окне.

Как это реализовать? Т.е. нужно чтобы при запуске файла, расш.которого привязано к приложению (и если приложение уже в памяти) запущеному приложению передавалась бы командная строка запуска + событие, что идет запуск нового.


QAZ   (2011-09-27 14:59:00) [1]


> это к чему?

чтоб не забыл что код тестовый :)
разделение на тестовый\рабочий уже хорошая база для ошибок типа "забыл букву поменять"


Gu   (2011-09-27 14:47:00) [2]


> поздравляю с говнокодом :)


это к чему? в тестовых прогах такое запрещено? или у вас у одного код самый верный, а все остальные лохи?


Gu   (2011-09-27 14:45:00) [3]

ясно, вроде copyDataStruct.cbData := 2 + Length(stringToSend) *2; работает норм


QAZ   (2011-09-27 14:43:00) [4]


> hhh:=FindWindow(' TMainForm', nil);if hhh=0 then exit;

поздравляю с говнокодом :)


MBo   (2011-09-27 14:36:00) [5]

>Или это связано с новыми строковыми типами delphiXe
Естественно -
>copyDataStruct.cbData := 1 + Length(stringToSend) ;


QAZ   (2011-09-27 14:34:00) [6]


> Gu   (27.09.11 14:30) [33]

книжку прочитай,хоть какунибудь
Length измеряеца в количестве букв
cbData измеряется в байтах
а в уникоде 2 байта на букву


Gu   (2011-09-27 14:30:00) [7]


> И. Павел ©   (26.09.11 14:11) [4]
> И. Павел ©   (26.09.11 14:13) [5]


вот еще что хотел спросить - про отправку сообщений. работают оба примера, но в обоих случаях (win7,delphiXe) у меня при получении данных и их отображении длинна отправляемой строки всегда не равна получаемой(меньше) либо при приеме и показе строки - после нескольких символов начинаются кракозябры. может что то не так делаю?

// отправка

procedure TSenderMainForm.SendString; // в онклик
var
stringToSend : string; hhh:thandle;
copyDataStruct : TCopyDataStruct;
begin
stringToSend := 'About Delphi Programming';
copyDataStruct.dwData := 0;
copyDataStruct.cbData := 1 + Length(stringToSend) ;
copyDataStruct.lpData := PChar(stringToSend) ;
hhh:=FindWindow('TMainForm', nil);if hhh=0 then exit;
SendMessage ( hhh, WM_COPYDATA, 0, integer(@copyDataStruct));
end;

// прием

procedure TMainForm.ReceiveMessage (var Msg: TWMCopyData);
var s:string;
begin
s := PChar(Msg.CopyDataStruct.lpData) ;
showmessage(s+' '+inttostr(length(s)));
end;


но если при отправке ставлю copyDataStruct.cbData := Length(stringToSend) *3; то все норм (или просто большое число) и строки равны. Почему так, ведь вроде все верно? Или это связано с новыми строковыми типами delphiXe и как тогда лечить?


QAZ   (2011-09-27 13:23:00) [8]


> Какой из них весомей - тот, который позволяет решить задачу
> проще, быстрее и надежнее. И если программа изначально не
> предназначена под DDE (COM, что угодно еще), то зачем городить
> монстра ТОЛЬКО ради того, чтобы всего лишь передать параметр?

какого нафиг монстра? DDE это всего 4 сообщения,а не какаято неведомая "технология" про которую даже в книгах не знают что написать
и весь код использования (10 строк) не больше любой возьни с мьютексами,мапедфайлами,атомами и прочего
и работает с любым приложением имеющим хоть одно окно,хоть с СОМ хоть с чем

> Германн ©   (27.09.11 00:49) [28]
> Германн ©   (27.09.11 01:01) [29]

это когда люди читают в msdn\sdk как и при каких условиях изпользовать те или иные функции\сообщения
а не копипастять с форумов,а потом страдают синдромом говнокода с вопросами типа "почему у меня работает а у Васи нет" или всеми любимый "в ХР пашет ,а в висте вылетает,это глюк винды?"


И. Павел   (2011-09-27 08:29:00) [9]

[9]-[30] "Ну вы, блин, даете..." (C)


Gu   (2011-09-27 03:11:00) [10]


> Плохиш ©   (26.09.11 14:39) [7]
> На делфимастере эта тема обсасывается каждые полгода.


можно еще ляпнуть, что человечество настолько тупое, что каждый год в школу ходит.


> Юрий Зотов ©   (26.09.11 17:56) [13]
> На "Королевстве" есть статья Антона Григорьева, в которой
> Ваша задача подробно разобрана. С объяснениями, с работающим
> примером и его кодом. Называется она как-то так: "Обобщающие
> примеры работы с WinAPI". Там три статьи с таким названием,
>  но разных авторов - Вам нужен пример Антона.


нашел, да, похоже это оптимальный метод. честно говоря о наличии таких "ящиков" даже не знал. вот решение подробно описаное с примером работы: http://www.delphikingdom.com/asp/viewitem.asp?catalogid=904

всем спасибо.


Германн   (2011-09-27 01:01:00) [11]

Да и насчёт "культуры программирования" тоже хотелось бы услышать ваше аргументированное сообщение.
Пока я вижу только "невразумительный бред новичка"!


Германн   (2011-09-27 00:49:00) [12]


> а по вашему пример с кагого либо faq\форума весомей сложившейся
> культуры программирования серьезного\качественного софта
> и рекомендаций MS?

Вот про рекомендации MS пожалуйста подробнее.
Про форумы и ихние факи мы наслышаны достаточно. :)


Юрий Зотов   (2011-09-27 00:03:00) [13]

> QAZ   (26.09.11 23:38) [26]

Какой из них весомей - тот, который позволяет решить задачу проще, быстрее и надежнее. И если программа изначально не предназначена под DDE (COM, что угодно еще), то зачем городить монстра ТОЛЬКО ради того, чтобы всего лишь передать параметр?


QAZ   (2011-09-26 23:38:00) [14]


> Значит, это все-таки способ нормальный, а не 0нальный. Что
> ж, уже хорошо.

я имел в виду связку с "вторая копия" а не мессажи вообще

> 1. Откуда Вы знаете, как оно реализовано в других программах?
>  Вы их все исследовали?

их не обязательно прямотаки исследовать если знаеш где смотреть
на вскидку:все программы MS,Corel,Adobe,Autodesk,Borland\Embarcadero...

> ..вполне себе допускают запуск второй копии

вторая рабочая копия и копия для передачи кс это разные вещи

> 2. Это единственный аргумент, или есть более весомые?

а по вашему пример с кагого либо faq\форума весомей сложившейся культуры программирования серьезного\качественного софта и рекомендаций MS?


DVM   (2011-09-26 23:19:00) [15]


> Gu   (26.09.11 13:51) 

Я когда то делал подобное посылкой WM_DROPFILES из второй копии программы окну первой. Так как первая у меня все равно обрабатывала WM_DROPFILES, то было несложно послать это сообщение точно так же как это делает проводник.
Вторая копия после закрывалась.


Jeer   (2011-09-26 23:11:00) [16]


> потому что серьезные программы


..вполне себе допускают запуск второй копии и серьезные программисты не страдают фигней.


Юрий Зотов   (2011-09-26 23:03:00) [17]

> QAZ   (26.09.11 22:54) [22]

> посылка каких либо сообщений кому либо не может быть плохо в
> принципе, ибо это суть винды

Значит, это все-таки способ нормальный, а не 0нальный. Что ж, уже хорошо.

> а вот запуски вторых,третих и прочих копий приложения вот это ни есть
> хорошо, хотябы потому что серьезные программы подобными финтами не
> страдают

1. Откуда Вы знаете, как оно реализовано в других программах? Вы их все исследовали?

2. Это единственный аргумент, или есть более весомые?


QAZ   (2011-09-26 22:54:00) [18]

посылка каких либо сообщений кому либо не может быть плохо в принципе, ибо это суть винды
а вот запуски вторых,третих и прочих копий приложения вот это ни есть хорошо, хотябы потому что серьезные программы подобными финтами не страдают


Юрий Зотов   (2011-09-26 22:14:00) [19]

> QAZ

Медальку можете забрать, не в ней дело. Но, может быть, Вы все же объясните, ЧЕМ же КОНКРЕТНО плох способ отсылки сообщения?

А то голословно как-то у Вас звучит... обоснование не помешало бы... ну хоть какое-нибудь... если оно есть, конечно.


Rouse_   (2011-09-26 19:28:00) [20]

Эээ - так мы не договаривались, на АПИ, таки я подозреваю, всегда работать будет :)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо