![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передать commandline
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]Эээ - так мы не договаривались, на АПИ, таки я подозреваю, всегда работать будет :)