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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Кстати, а вы проверяли, ваш EnumWindows ищет формы, открытые в рамках других сеансов?
...
Рейтинг: 0 / 0
А в .Net у Button .Handle=0 если она изначально .Visible=False?
    #38853336
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,


Ну отвечу я тебе. Ну счас же слетятся как мухи на пирожок.
Про IPC знаю, использую. Пайпы - дрянь. Предпочитаю mailslot-ы с зарезервированными именами.
Но поначалу пользовал SendMessage(WM_CopyData) -счас не использую.

Мне просто надо найти окно - какая разница зачем . Чтоб не запустить второй экземпляр приложения, чтоб закрыть окно, чтоб убедиться что оно уже запущено... Надо .
...
Рейтинг: 0 / 0
А в .Net у Button .Handle=0 если она изначально .Visible=False?
    #38853342
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну мучай дальше, раз так тебе надо. не слушаешь народ
...
Рейтинг: 0 / 0
А в .Net у Button .Handle=0 если она изначально .Visible=False?
    #38853345
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77hVostt,

я ж ответил выше.
Дмитрий77Зачем кнопка нужна?
Здесь:
Как ТОЧНО и БЕЗОШИБОЧНО узнать hwndTarget целевого окна?

Я не про вопрос «зачем кнопка нужна», и зачем нужно искать окно, это я уже понял зачем. Вопрос был про то, почему выбрано такое мудацкое решение?
...
Рейтинг: 0 / 0
А в .Net у Button .Handle=0 если она изначально .Visible=False?
    #38853348
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Чтоб не запустить второй экземпляр приложения
Mutex, пара строк кода.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
class OneAtATimePlease 
{
  // Используем уникальное имя приложения,
  // например, с добавлением имени компании
  static Mutex mutex = new Mutex(false, "oreilly.com OneAtATimeDemo");
  
  static void Main() 
  {
    // Ожидаем получения мьютекса 5 сек – если уже есть запущенный
    // экземпляр приложения - завершаемся.
    if (!mutex.WaitOne(TimeSpan.FromSeconds(5), false)) 
    {
      Console.WriteLine("В системе запущен другой экземпляр программы!");
      return;
    }

    try 
    {
      Console.WriteLine("Работаем - нажмите Enter для выхода...");
      Console.ReadLine();
    }
    finally { mutex.ReleaseMutex(); }
  }
}
...
Рейтинг: 0 / 0
А в .Net у Button .Handle=0 если она изначально .Visible=False?
    #38853359
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Искать окно по его заголовку через FindWindow(Ex)/EnumWindow это не мудацкое а стандартное решение.
Но оно не надежно 100%.
Почему кнопка с извращенной надписью- первое самое простое что в голову пришло - что-то уникальное, чем это окно отличается от других с таким же заголовком "Form1", не говоря о том моменте на кот. я указал в начале поста на кот. дал ссылку.

Konst_One,

что значит мучай дальше?
Ты мне сказал про ICP, я тебе ответил что да, использую, доволен. mailslot- это ICP.
Mailslots
Это называется не слушаю?

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

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

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


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