Перейти к публикации
  • Сейчас на странице   Всего пользователей: 0   (0 пользователей, 0 гостей)

Rooster

Программирование, т. 8

  

315 пользователей проголосовало

У вас нет прав на голосование в этом опросе, или на просмотр результатов опроса. Пожалуйста, войдите или зарегистрируйтесь для голосования в опросе.

Рекомендованные сообщения

            foreach (Form theform in Application.OpenForms)
            {
                SubsribeToAllButtons(theform);
            }

Не хочет и усе((99

Поделиться сообщением


Ссылка на сообщение

Мда, трудно быть шарполохом. Скован какими-то рамками.

 

То ли дело жавабоги, могут через рефлекшоны куда хочешь залезть. А елси надо то и через JNI winapi даже подрочить.

Поделиться сообщением


Ссылка на сообщение

Шутка хороша, ток я скован не шарпом, а ебучим IDE Dynamics Navision  ))))

Поделиться сообщением


Ссылка на сообщение
(изменено)

del 


Изменено пользователем Rooster

Russia.png.ea080e101222d708d08842dae4ccc684.png USA.png.9b863586cd992fb91bf92ed1de03e4cc.png Israel.png.f27d10a4455f05cd161a8c2c52b8b5e1.png

Поделиться сообщением


Ссылка на сообщение

Ну через winapi добирайся 

      hButton = GetDlgItem (hWndDlg, IDC_BUTTON);

Поделиться сообщением


Ссылка на сообщение

Мда, трудно быть шарполохом. Скован какими-то рамками.

 

То ли дело жавабоги, могут через рефлекшоны куда хочешь залезть. А елси надо то и через JNI winapi даже подрочить.

будто бы в шарпе нет рефлексии

 

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

https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.control.parent?view=netframework-4.0#System_Windows_Forms_Control_Parent

 

это не пробовал?

Drakonian понравилось это

Поделиться сообщением


Ссылка на сообщение

Мда, трудно быть шарполохом. Скован какими-то рамками.

 

То ли дело жавабоги, могут через рефлекшоны куда хочешь залезть. А елси надо то и через JNI winapi даже подрочить.

кек

рефлекшен джавы стоит и тихо посасывает в сторонке у рефлекшена шарпа

только вот тут он нахуй не нужен, и я не понимаю, что не так то

 

 

 

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

есть прилага spy++, которая возможно прямо в твоей вижле уже висит в менюшке Tools (в моей сейчас нету, возможно потому что я всё вырубал при установке)

у нее есть поиск контролов по клику, он даст тебе хэндл кнопки

https://msdn.microsoft.com/ru-ru/library/dd460750.aspx

 

и дальше его скормить в https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.control.fromhandle

и получить сам контрол

Drakonian понравилось это

Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение
(изменено)

 

Мда, трудно быть шарполохом. Скован какими-то рамками.

 

То ли дело жавабоги, могут через рефлекшоны куда хочешь залезть. А елси надо то и через JNI winapi даже подрочить.

будто бы в шарпе нет рефлексии

 

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

https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.control.parent?view=netframework-4.0#System_Windows_Forms_Control_Parent

 

это не пробовал?

 

не понял чем оно вообще мне может помочь :(

 

Мда, трудно быть шарполохом. Скован какими-то рамками.

 

То ли дело жавабоги, могут через рефлекшоны куда хочешь залезть. А елси надо то и через JNI winapi даже подрочить.

кек

рефлекшен джавы стоит и тихо посасывает в сторонке у рефлекшена шарпа

только вот тут он нахуй не нужен, и я не понимаю, что не так то

 

 

 

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

есть прилага spy++, которая возможно прямо в твоей вижле уже висит в менюшке Tools (в моей сейчас нету, возможно потому что я всё вырубал при установке)

у нее есть поиск контролов по клику, он даст тебе хэндл кнопки

https://msdn.microsoft.com/ru-ru/library/dd460750.aspx

 

и дальше его скормить в https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.control.fromhandle

и получить сам контрол

 

Норм приложуха, у меня её не было, но я скачал

 

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

 

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

 

 

 

 

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {

            System.IntPtr Test = (IntPtr)00122192;
            Control c = Control.FromHandle(Test);
            if (c != null){
                MessageBox.Show(c.Name.ToString()); }
            //foreach (Form theform in Application.OpenForms)
            //{
            //    SubsribeToAllButtons(theform);
            //}
        }

        public void SubsribeToAllButtons(Form form)
        {
            foreach (var button in GetAll(form, typeof(Button)))
            {
                button.Click += (s, e) => MessageBox.Show(button.Name);
            }
        }

        private IEnumerable<Control> GetAll(Control control, Type type)
        {
            var controls = control.Controls.Cast<Control>();

            return controls.SelectMany(c => GetAll(c, type))
                           .Concat(controls)
                           .Where(c => c.GetType() == type);
        }
    }
}

 

 


Изменено пользователем Drakonian

Поделиться сообщением


Ссылка на сообщение

ебать блять

 

ясен пень ты ничего не находишь, ты пытаешься из другого приложения всё сделать, что ты хочешь вообще там получить


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение
(изменено)

            IntPtr test = Marshal.StringToHGlobalUni("000626C6");
            Marshal.FreeHGlobal(test);
            Control c = Control.FromHandle(test);
            if (c != null)
            {
                MessageBox.Show(c.Name.ToString());
            }

Думал мб с поинтером трабла, но нееее

ебать блять

 

ясен пень ты ничего не находишь, ты пытаешься из другого приложения всё сделать, что ты хочешь вообще там получить

Ну это понятно было, если ты думаешь что  я пытался с другого ток приложения получить то нет xD Это скорей из-за безысходности

 

вот так я делал, но я нахожусь в контроле и сосу бибу

 

компилю в DLL и цепляю на рандомный доступный мне контрол на нужной мне форме, в попытках найти хуиту, вся приложуха крашится из-за FromHandle, я думаю так как не делал проверку на NULL щас сделаю )

 

 

 

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Dynamics.Framework.UI.Extensibility;
using Microsoft.Dynamics.Framework.UI.Extensibility.WinForms;
using System.Windows.Forms;
using System.Drawing;

namespace Class1
{
    [ControlAddInExport("Button2")] // Interface - this is the name that is registered in NAV


    public class zDemoButton : StringControlAddInBase


    {
        // Initialise what you want to create, then return it to RTC
       protected override Control CreateControl()
       {
           Button B = new Button();
           B.BackColor = Color.AliceBlue; // Just so it stands out in the page
           B.Click += this.OnButtonClick; // This is needed for calling NAV trigger (function below)
            //Convert.ToInt32
             return (B);
            }

    private void OnButtonClick(object sender, System.EventArgs e)
        {
            //           Button[] array;
            //           array = new Button[42];
            //           string a = Application.OpenForms.ToString();

            //foreach (Form theform in Application.OpenForms)
           // {
                System.IntPtr Test = (IntPtr) 000E2668;
                Control c = Control.FromHandle(Test);
                //c.Visible = false;
           // }
            this.RaiseControlAddInEvent(1, c.Name.ToString());
        }

        public void SubsribeToAllButtons(Form form)
        {
            foreach (var button in GetAll(form, typeof(Button)))
            {
                button.Click += (s, e) => MessageBox.Show(button.Name);
            }
        }

        private IEnumerable<Control> GetAll(Control control, Type type)
        {
            var controls = control.Controls.Cast<Control>();

            return controls.SelectMany(c => GetAll(c, type))
                           .Concat(controls)
                           .Where(c => c.GetType() == type);
        }

    }

}

 

 

 

 

так же я пытался напрямую в навижене это сделать, но столкнулся с тем, что в навижене нет такого типа данных как IntPtr и поэтому я так же не могу передать с навижена это как параметр

kONvhvf.png

оно даже не компилится, кек

Кстати NAME основной формы мне удалось получить через костыль (видно на скрине)

 

Вообще из навижена мне удалось получить контроль основной формы, например через код иземнять Width окна или делать CLEAR всей колекции контролов (лол белое окно получается), но как найти нужную мне кнопку еще хз


Изменено пользователем Drakonian

Поделиться сообщением


Ссылка на сообщение

я хз что такое твой навижен

но если там нет IntPtr, то это не сишарп

 

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


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

Таки да)))
 

Доступные мне типы данных:

 

 

---------------------------
Microsoft Dynamics NAV Development Environment
---------------------------
'asdasdas' is not an option.
 
The existing options are:
 
Action, Automation, BigInteger, BigText, Binary, Boolean, Byte, Char, ClientType, 
Code, Codeunit, DataClassification, Date, DateFormula, DateTime, Decimal, DefaultLayout, 
Dialog, DotNet, Duration, ExecutionMode, FieldRef, File, FilterPageBuilder, GUID, 
InStream, Integer, KeyRef, Notification, NotificationScope, OCX, ObjectType, Option, 
OutStream, Page, Query, Record, RecordID, RecordRef, Report, ReportFormat, SessionSettings, 
TableConnectionType, TestPage, TestPermissions, Text, TextEncoding, Time, TransactionType, 
Variant, Verbosity, XMLport
---------------------------
OK   
---------------------------
 
 
Но я могу подключать DotNet либы и их юзать, есть какая-то либа для типов данных? Чтобы она принимала строку и возвращала IntPtr или что-то подобное
пока те способы что гуглил закончились неудачой

Поделиться сообщением


Ссылка на сообщение

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


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

IntPtr лежит в неймспейсе System в mscorlib

 

не бывает приложений дотнета без него, это невозможно


Торжество разума в том, чтобы уживаться с теми, у кого этого разума нет. Вольтер.
Чтобы хорошо высыпаться, нужно спать 8 часов в день. И еще столько же ночью.

Поделиться сообщением


Ссылка на сообщение

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

 

 

Один раз получить нейм, дальше он не нужен будет

Поделиться сообщением


Ссылка на сообщение

это хуёво когда я гуглю этот MS Dynamics NAV, нахоже кучу ссылок но так нихуя и не понимаю до сих пор что это такое?

Поделиться сообщением


Ссылка на сообщение

1С от майкрософт


ебучая кнопка

 

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

Поделиться сообщением


Ссылка на сообщение

окей ты говоришь что можешь подключать .net либы, тоесть по сути дела это бесплатная dll-инъекция, правильно?

ты в какой-то момент можешь вызвать свой код в этом NAV приложении с какими-то параметрами?

Поделиться сообщением


Ссылка на сообщение
(изменено)

Правильно и если хорошенько обдумать код и что туда вообще передавать то это явно решаемая задача

Вообще-то у меня возникла идея создать DLL которая будет принимать как параметр коллекцию контролов, которую я буду передавать на нужной мне форме с помощью другого DotNet System.Windows.Forms.Application 

 

Сейчас буду пробовать 


Изменено пользователем Drakonian

Поделиться сообщением


Ссылка на сообщение
(изменено)

У меня получилось!
Через навижен с помощью DotNet методов Controls, Count, RemoveAt, Name, Item. Этих методов достаточно чтобы отсеивать контролы через ремув по индексу заранее узнав сколько контролов содержится через каунт, как только удаляешь нужную тебе область рандомно, сразу вызываешь нейм этой области, таргетишься на нее и так по кругу. Лол кек чебурек

 

Форму зовут  {0000002A-0000-0000-0108-0000836BD2D2}

Она содержит несколько контейнеров, меня интересует LayoutPlaceholder

В нем же так же несколько контейнеров, мне нужен был ActionBar

 

А в нем уже помещаются эти системные кнопки в контроле который называется

 

{71674C43-BAC2-47be-8A98-4A646BB3FC42}

 

 

 

Фух блять, три дня как больной ебался, чтобы клиент навижена сломать, получилось таки.

 

Спасибо всем кто помогал! )


Изменено пользователем Drakonian

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...