Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / А в .Net у Button .Handle=0 если она изначально .Visible=False? / 25 сообщений из 31, страница 1 из 2
13.01.2015, 11:00
    #38852886
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
Есть у меня прием поиска hwnd нужного окна через EnumWindows.
1) Поиск по шапке окна
2) Для проверки скрытая кнопка (child этого окна) с хитрым к примеру .Text="blabla-bla qwertyuio" (ибо только первое не очень надежно)

Дык вот кидаю эту Button на Form, делаю ей Visible=False, запускаю, ищу окно с кнопкой - не находит .
Т.е. окно кнопки в .Net не создается, пока она невидима?
...
Рейтинг: 0 / 0
13.01.2015, 11:16
    #38852899
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
Дмитрий77, да. Через Spy++ можно убедиться.
...
Рейтинг: 0 / 0
13.01.2015, 11:43
    #38852930
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
bazileЧерез Spy++ можно убедиться.
Да и без Spy++ чутье подсказало что это так.

Ну тода.
В-1 "Обманываем"
Код: vbnet
1.
2.
3.
  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    Me.ButtonChildTitle.Visible = False 'но handle уже существует, т.к. в конструкторе .Visible = True
  End Sub



В-2 "Культурный"
Код: vbnet
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.
49.
50.
51.
  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    'секретная кнопка(невидимая, нулевых размеров и без TabStop) -по ее тексту проверяем окно
    CreateTheButton(Me.Handle, 0, 0, 0, 0, _
     WS_CHILD Or BS_DEFPUSHBUTTON, "blabla-bla qwertyuio")
  End Sub

'====
  'Window Styles
  Public Const WS_CHILD = &H40000000
  Public Const WS_VISIBLE = &H10000000

  'Button Styles
  Public Const BS_DEFPUSHBUTTON = &H1&

  <StructLayout(LayoutKind.Sequential)>
  Public Structure RECT
    Dim Left As Integer
    Dim Top As Integer
    Dim Right As Integer
    Dim Bottom As Integer
  End Structure

  Public Declare Function GetClientRect Lib "user32" _
   (ByVal hwnd As IntPtr, ByRef lpRect As RECT) As Boolean
  Public Declare Unicode Function CreateWindowEx Lib "user32" Alias "CreateWindowExW" _
   (ByVal dwExStyle As Integer, ByVal lpClassName As String, ByVal lpWindowName As String, _
   ByVal dwStyle As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, _
   ByVal nHeight As Integer, ByVal hwndParent As IntPtr, ByVal hMenu As IntPtr, _
   ByVal hInstance As IntPtr, ByRef lpParam As Object) As IntPtr

  Public Function CreateTheButton(ByVal hWndParent As IntPtr, ByVal Left As Integer, _
   ByVal Top As Integer, ByVal Width As Integer, ByVal Height As Integer, _
   ByVal ButtonStyle As Integer, Optional ByVal ButtonText As String = vbNullString) As Long

    Dim rcClient As RECT
    GetClientRect(hWndParent, rcClient)

    CreateTheButton = CreateWindowEx(0, _
     "BUTTON", _
     ButtonText, _
     ButtonStyle, _
     rcClient.Left + Left, _
     rcClient.Top + Top, _
     Width, _
     Height, _
     hWndParent, _
     IntPtr.Zero, _
     System.Runtime.InteropServices.Marshal.GetHINSTANCE _
      (System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)).ToInt32(), _
     Nothing)
  End Function
...
Рейтинг: 0 / 0
13.01.2015, 11:46
    #38852937
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
Дмитрий77,

зачем это всё?
...
Рейтинг: 0 / 0
13.01.2015, 12:02
    #38852960
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
hVostt,

Я ж сказал зачем.
>Есть у меня прием поиска hwnd нужного окна через EnumWindows.
Например, чтоб его закрыть. Или послать ему сообщение.
Окно свое, но другое. Другой exe.
Поиск "только по шапке" ненадежен, надежна дополнительная проверка, коей как вариант может быть проверка наличия дочерней кнопки с надписью которую нарочно не придумаешь.
...
Рейтинг: 0 / 0
13.01.2015, 12:14
    #38852976
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
Дмитрий77hVostt,

Я ж сказал зачем.
>Есть у меня прием поиска hwnd нужного окна через EnumWindows.
Например, чтоб его закрыть. Или послать ему сообщение.
Окно свое, но другое. Другой exe.
Поиск "только по шапке" ненадежен, надежна дополнительная проверка, коей как вариант может быть проверка наличия дочерней кнопки с надписью которую нарочно не придумаешь.

Не вижу никакого смысла в подобном извращении. Лучше один разок освоить WCF, чем так знатно ипстись. Ну только если нет мазохистских наклонностей.
...
Рейтинг: 0 / 0
13.01.2015, 12:50
    #38853020
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
hVosttДмитрий77hVostt,

Я ж сказал зачем.
>Есть у меня прием поиска hwnd нужного окна через EnumWindows.
Например, чтоб его закрыть. Или послать ему сообщение.
Окно свое, но другое. Другой exe.
Поиск "только по шапке" ненадежен, надежна дополнительная проверка, коей как вариант может быть проверка наличия дочерней кнопки с надписью которую нарочно не придумаешь.

Не вижу никакого смысла в подобном извращении. Лучше один разок освоить WCF, чем так знатно ипстись. Ну только если нет мазохистских наклонностей.куда ж тя понесло? человек пока азы .НЕТ-а старается осилить, да ещё и на VB, а ты ему WCF!
...
Рейтинг: 0 / 0
13.01.2015, 13:22
    #38853071
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
>человек пока азы .НЕТ-а старается осилить, да ещё и на VB
пытается-старается...человек нормально все осиливает в рабочем порядке, все хорошо.

>, а ты ему WCF!
ну да, давайте не отвлекаться

API-коды опять не понравились? Код создания кнопки через CreateWindowEx для меня не новый.
Даже придумал как из .Net извратиться - просто показать в конструкторе, потом скрыть в Load. И даже не сказал, что мне так не нравится.
В VB6 кнопка кстати сразу hwnd имеет.
...
Рейтинг: 0 / 0
13.01.2015, 14:00
    #38853143
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
Дмитрий77Например, чтоб его закрыть. Или послать ему сообщение.
Окно свое, но другое. Другой exe.

Если оба приложения свои (или два экземпляра одного и того же?), то не лучше ли изначально предусмотреть возможность обмена сообщениями между ними? Пайпы там, или тот же WCF.
...
Рейтинг: 0 / 0
13.01.2015, 14:17
    #38853165
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
Дмитрий77API-коды опять не понравились? Код создания кнопки через CreateWindowEx для меня не новый.
Даже придумал как из .Net извратиться - просто показать в конструкторе, потом скрыть в Load. И даже не сказал, что мне так не нравится.
В VB6 кнопка кстати сразу hwnd имеет.

А нафига вообще подобной фигнёй заниматься? Чисто исключительно ради того, чтобы лишний раз винапи подёргать? Просто не вижу смысла. Задача решается через пайпы/WCF, для простейшей коммуникации (послать сигнал, например, на закрытие) кода в несколько строчек, вместо анальных сношений с поисками окон и размещения кнопки.

П.С. Мой знакомый «программист» как-то вместо того, что разобраться как форматировать текстовый файл отчёта с помощью скрипта, сделал макрос в FAR-е, повесил на горячие клавиши, а затем открывал файл, зажимал эти клавиши чем-нибудь тяжёлым и макрос «работал». И делал так до тех пор, пока не накосячил и не получил по шапке.
...
Рейтинг: 0 / 0
13.01.2015, 14:19
    #38853170
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
skyANAкуда ж тя понесло? человек пока азы .НЕТ-а старается осилить, да ещё и на VB, а ты ему WCF!



ну чего ты опять начинаешь
...
Рейтинг: 0 / 0
13.01.2015, 14:23
    #38853175
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
hVostt,
это же очень просто, есть бальзаковские конторы где з.п. идет со строчки написанного кода..
зы. ругать таппера незя, он играет как умеет..
...
Рейтинг: 0 / 0
13.01.2015, 14:24
    #38853176
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
не помогут тут ему пайпы , он пытается кликнуть на кнопку в чужом приложении
...
Рейтинг: 0 / 0
13.01.2015, 14:27
    #38853180
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
Где-то в степиhVostt,
это же очень просто, есть бальзаковские конторы где з.п. идет со строчки написанного кода..
зы. ругать таппера незя, он играет как умеет..

От интереса распирает, зачем такой тупой подход нужен при наличии кучи адекватных способов решения простейшей задачи. И гуглится же легко и непринуждённо, был бы интерес.
...
Рейтинг: 0 / 0
13.01.2015, 14:28
    #38853181
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
Konst_Oneне помогут тут ему пайпы , он пытается кликнуть на кнопку в чужом приложении

Он размещает кнопку в окне, которое собирается «найти». Копетан очевидности передаёт привет
...
Рейтинг: 0 / 0
13.01.2015, 14:30
    #38853186
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
hVosttKonst_Oneне помогут тут ему пайпы , он пытается кликнуть на кнопку в чужом приложении

Он размещает кнопку в окне, которое собирается «найти». Копетан очевидности передаёт привет

зачем интересно это нужно? портить чужое приложение своей кнопкой
...
Рейтинг: 0 / 0
13.01.2015, 14:34
    #38853194
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
Konst_Oneзачем интересно это нужно? портить чужое приложение своей кнопкой

Об этом и речь. Со своей кнопкой в чужую программу не лезь!
...
Рейтинг: 0 / 0
13.01.2015, 14:40
    #38853200
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
hVostt,
ну неужели не понятно, что человек застрял на уровне "С", и застрял в радикальной форме (нигелирование других языковых культур)
Хотя есть масса примеров полиглотов ( в лучшем понимании этого слова), любое изучение дополнительного языка должно начинаться
с целей и задачей этого языка а не с хотеллок..
...
Рейтинг: 0 / 0
13.01.2015, 15:11
    #38853236
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
Зачем кнопка нужна?
Здесь:
Как ТОЧНО и БЕЗОШИБОЧНО узнать hwndTarget целевого окна?

Я не понимаю, куда вас всех так несет?

Вопрос был простой.
авторА в .Net у Button .Handle=0 если она изначально .Visible=False?
Ответ был во втором посте.
bazileДмитрий77, да.

Ну написал я как решил проблему, написал пару слов зачем... и понеслось.
Пиши на C++,
застрял на уровне "С",
один разок освоить WCF
пайпы,обмен сообщениями, мазохизм...

нафига столько рассуждений не по теме вопроса?
....

>з.п. идет со строчки написанного кода..
нет, мне никто не платит за строчки кода
...
Рейтинг: 0 / 0
13.01.2015, 15:18
    #38853248
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
Дмитрий77нафига столько рассуждений не по теме вопроса?

Мы так развлекаемся.
Вы же не оплачиваете услуги интернет-консультантов?
А какой еще может быть стимул отвечать на вопрос, кроме желания выпендриться?
Так что не обижайтесь.
:-)
...
Рейтинг: 0 / 0
13.01.2015, 15:41
    #38853284
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
Дмитрий77Ну написал я как решил проблему, написал пару слов зачем... и понеслось.
Пиши на C++,
застрял на уровне "С",
один разок освоить WCF
пайпы,обмен сообщениями, мазохизм...

нафига столько рассуждений не по теме вопроса?

Я вообще-то поинтересовался, зачем понадобилось так извращаться. Интересно же.
Но если не хочешь отвечать, не надо.
...
Рейтинг: 0 / 0
13.01.2015, 15:54
    #38853311
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
hVostt,

я ж ответил выше.
Дмитрий77Зачем кнопка нужна?
Здесь:
Как ТОЧНО и БЕЗОШИБОЧНО узнать hwndTarget целевого окна?
...
Рейтинг: 0 / 0
13.01.2015, 16:00
    #38853317
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
да уж...
ну ведь копаешься же с WinAPI на хорошем уровне, ну так почитай про IPC
...
Рейтинг: 0 / 0
13.01.2015, 16:00
    #38853320
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
хоть с семафора начни
...
Рейтинг: 0 / 0
13.01.2015, 16:07
    #38853328
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
А в .Net у Button .Handle=0 если она изначально .Visible=False?
А в .Net у Button .Handle=0 если она изначально .Visible=False?
Прочел тему, подумалось: а не Дмитрий ли ее создал, уж больно она извращенная. Оказалось, не ошибся...

Вам же правильно уже сказали, стандартная функциональность межпроцессного взаимодействия - через WCF. Можете извратиться и сделать через named pipes, shared memory, com-сервера. Ничем не хуже поиска по тексту в кнопке на форме.

Кстати, а вы проверяли, ваш EnumWindows ищет формы, открытые в рамках других сеансов?
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / А в .Net у Button .Handle=0 если она изначально .Visible=False? / 25 сообщений из 31, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]