|
|
|
Использование Win API
|
|||
|---|---|---|---|
|
#18+
Добрый день. Возникла необходимость применить WinAPI, раньше мало сталкивался, надо сообщение передать из одного приложения в другое, рассматриваю примеры из тематических форумов, пробую реализовать. Так вот сделал приложение - приемник, там организовал присвоение кода приложению, так Код: pascal 1. 2. 3. 4. 5. 6. затем в другом приложении по кнопке выдаю инфу по всем окнам коряво, но как-то так Код: pascal 1. 2. 3. 4. 5. так вот получается что напротив моего приложения приемника выводит 0, почему-то видимо SetWindowLong я не верно применяю Модератор: Пользуйтесь тегом (кнопкой) SRC для оформления кода, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 13:10 |
|
||
|
Использование Win API
|
|||
|---|---|---|---|
|
#18+
Х.з. Странная какое то желание, так передавать "сообщения" (в кавычках). Почему не работает - точно не знаю, так никогда не делал. Но в описание ф-ции черным по белому (на моем мониторе) написано: MSDN Remarks Certain window data is cached, so changes you make using SetWindowLong will not take effect until you call the SetWindowPos function. Specifically, if you change any of the frame styles, you must call SetWindowPos with the SWP_FRAMECHANGED flag for the cache to be updated properly. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 13:16 |
|
||
|
Использование Win API
|
|||
|---|---|---|---|
|
#18+
patrick1968так вот получается что напротив моего приложения приемника выводит 0 Во-первых, у приложения много окон. Во-вторых, GWL_USERDATA может использоваться VCL, поэтому лезть в него не стоит. В-третьих, передача сообщения из одного приложения в другое делается гораздо проще через SendMessage, причём в обе стороны сразу, ибо это функция. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 13:30 |
|
||
|
Использование Win API
|
|||
|---|---|---|---|
|
#18+
В реалиях у приложения приемника (написанного на vfp) как раз разработчиком сделано так что приложению (окну) через SetWindowLong присваивается код по которому следует это приложение однозначно определить, в принципе передать сообщение удалось, но на том конце структура TCopyDataStruct не воспринимается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 13:44 |
|
||
|
Использование Win API
|
|||
|---|---|---|---|
|
#18+
patrick1968Возникла необходимость применить WinAPI Это хорошо, давно пора patrick1968 Код: pascal 1. Зачем? Для какой цели? можно почитать тут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 13:56 |
|
||
|
Использование Win API
|
|||
|---|---|---|---|
|
#18+
lcStringToSend=Strconv(lcstr + Chr(0), 5) lnPtrStringToSend = WinAPI_HeapAlloc(WinAPI_GetProcessHeap(), 0, Lenc(lcStringToSend)) Sys(2600, lnPtrStringToSend,Lenc(lcStringToSend), lcStringToSend) && Copy value to memory Local lcCOPYDATASTRUCT As String lcCOPYDATASTRUCT = ; BINTOC(ID_DATA, "4RS") ; && ULONG_PTR dwData + BinToC(Lenc(lcStringToSend), "4RS") ; && DWORD cbData + BinToC(lnPtrStringToSend, "4RS") && PVOID lpData SendMessage(hwnd1,WM_COPYDATA,_vfp.HWnd,@lcCOPYDATASTRUCT) вот так организовано формирования структуры сообщения в vfp, как это можно переложить на структуру COPYDATA ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 13:57 |
|
||
|
Использование Win API
|
|||
|---|---|---|---|
|
#18+
patrick1968.... вот так организовано формирования структуры сообщения в vfp, как это можно переложить на структуру COPYDATA "простите, кто на ком стоял" ( C ) Собачье сердце кого на кого положить? В чем вообще проблема? В коде все в комментариях подписано https://msdn.microsoft.com/en-us/library/windows/desktop/ms649010(v=vs.85).aspx http://www.foxclub.ru/rhproject/project/html/c3b28578-7b4f-487f-9192-fb619ff83ad6.htm Что в результате появляется после "BINTOC(ID_DATA, "4RS")", мне сказать сложно. Проще foxPro запустить и посмотреть. IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 14:03 |
|
||
|
Использование Win API
|
|||
|---|---|---|---|
|
#18+
patrick1968, "Приемник": Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. "Передатчик": Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. Примерно так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 14:16 |
|
||
|
Использование Win API
|
|||
|---|---|---|---|
|
#18+
DarkMaster, Поправка. Не все переименовал :) Код: pascal 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 14:18 |
|
||
|
Использование Win API
|
|||
|---|---|---|---|
|
#18+
procedure SendDataStrToTarget(ACommand,Flags:integer; S:String); 3 параметра // использование SendDataStrToTarget(WM_MYCOMMAND,'My message to target'); а здесь 2, что-то пропустили ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 14:52 |
|
||
|
Использование Win API
|
|||
|---|---|---|---|
|
#18+
patrick1968, Выкинь Flags из параметров - там дополнительные всякие специфичные вещи с их помощью делались. Тебе это не нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 15:27 |
|
||
|
Использование Win API
|
|||
|---|---|---|---|
|
#18+
patrick1968, Кстати, забыл сказать. Тут есть тонкое место при передаче данных. Если у тебя Дельфя поддерживает unicode, то строку нужно запихивать более акуратно, чем в примере (он на AnsiString заточен). Для Unicode лучше сделать вот так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. Иначе у тебя придет или обрезанная строка или вообще непонятно что. Так что учитывай, какую строку ты передаешь - Ansi или Unicode и примет ли твой приемник такую строку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 16:01 |
|
||
|
Использование Win API
|
|||
|---|---|---|---|
|
#18+
DarkMasterВыкинь Flags из параметров - там дополнительные всякие специфичные вещи с их помощью делались. Тебе это не нужно. Как я понял, Flags автору нужен 21513065 у него там должно быть BINTOC( ID_DATA, "4RS" ) IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 16:09 |
|
||
|
Использование Win API
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, Ну пример вообще выкушен из какого-то старого проекта, Flags я использовал тогда для другого. ТС может помедитировать над структурой COPYDATA и напихать в нее все, что ему нужно - основное я показал. У меня в dwData передавалась команда (одна из) приемнику. ТС может использовать dwData для чего-то другого - в общем простор для творчества. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 16:30 |
|
||
|
Использование Win API
|
|||
|---|---|---|---|
|
#18+
DarkMaster, для передачи строк может лучше такую конструкцию использовать: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 17:32 |
|
||
|
Использование Win API
|
|||
|---|---|---|---|
|
#18+
Kast2K, Length(Buffer) тебя не смущает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 17:40 |
|
||
|
Использование Win API
|
|||
|---|---|---|---|
|
#18+
DarkMasterKast2K, Length(Buffer) тебя не смущает? А должна? UTF8String = type AnsiString, не? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.06.2018, 17:54 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39664309&tid=2040709]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
177ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 220ms |
| total: | 519ms |

| 0 / 0 |
